西门子博途系列学习笔记SCL(二)——modbus Rtu

西门子博途v16系列学习笔记SCL(二)——modbus Rtu

他说他曾经到过山羊之巅

意大利的微风那般甘甜

价值观的塌陷

墨镜摘下露出他绝世容颜

左东答莱

右西科润

受苦受难美利坚

------ 许四多

今天给大家讲解西门子博途最新版本V16的SCL(ST结构化文本)语言编写的modbus Rtu通讯功能块,本功能块亲测可用,不接受任何反驳及意见,能用就用,不能用改改参数就能用了,这点耐心都没有,做什么自动化编程?你还能干啥?
言归正传,西门子的modbus Rtu/Tcp 指令功能块做的几乎完美,比施耐德,ABlogix,都要简单有效,总体说来,使用该功能与所有支持modbus协议的第三方设备通讯都没有问题,拢共分3步:
1. 硬件参数配置,就是port,波特率,数据位,停止位这些,基本是使用默认值,默认值是开发人员给程序员的福利,已经调到最优性能,别自己瞎鼓捣,通讯不上还赖人家东西不行
2. 在主循环调用该modbus poll功能块,填写管脚参数,使能该功能块,功能块开始内部执行modbus初始化,初始化完成后,开始轮询modbus Rtu从站
3. 监控modbus poll背景数据块,前提是填写从站地址及数据起始地址及长度,从站数量使用循环控制,简单好用

程序截图:学scl编程,一定要手敲代码,保证你每天都敲代码100行,一年后还学不会你找我

1.程序注释,modbus rtu参数说明,这个说明可比modbus 协议手册简单多了,而且是中文的,香不香
程序注释,modbus rtu参数说明,这个说明可比modbus 协议手册简单多了,而且是中文的,香不香
2.port硬件端口号,就是RS485的端口号ID,
port硬件端口号,就是RS485的端口号ID,
3.MODBUS 通讯参数设置,停止位1位2位对应有校验或没有校验
MODBUS 通讯参数设置,停止位1位2位对应有校验或没有校验,
4.功能块参数管脚设置,都是可以改的,改改就能明白了
功能块参数管脚设置,都是可以改的,改改就能明白了
5.程序初始化,modbus rtu 主站初始化调用
程序初始化,modbus rtu 主站初始化调用
6.程序主体,学scl编程,一定要手敲代码,保证你每天都敲代码100行
程序主体,学scl编程,一定要手敲代码,保证你每天都敲代码100行
7.mode = 4,这个是关键参数,4代表rtu的工作模式,西门子独有参数
mode = 4,这个是关键参数,4代表rtu的工作模式,西门子独有参数
8.主函数调用
主函数调用
9.modbus poll的背景数据块DB1, 需要和几个从站通讯,填写从站个数即可,每个从站的地址和变量范文,直接填写在request数组里即可,程序会轮询调用
modbus poll的背景数据块DB1, 需要和几个从站通讯,填写从站个数即可,每个从站的地址和变量范文,直接填写在request数组里即可,程序会轮询调用
有使用上的问题,可以给我留言哦,超级美味,自己尝试一下吧!

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 52
    评论
西门子SCL博途中,可以通过以下步骤来读取任意长度的泛型数组的最大值及其索引: 1. 声明一个泛型数组,例如`data`,并初始化该数组,例如`data := [1, 3, 5, 2, 4]`。 2. 声明一个变量`maxValue`,用于存储最大值。初始时,将`maxValue`赋值为数组的第一个元素,即`maxValue := data[0]`。 3. 声明一个变量`maxIndex`,用于存储最大值的索引。初始时,将`maxIndex`赋值为0,即`maxIndex := 0`。 4. 使用循环结构(例如`FOR`或`WHILE`)依次遍历数组中的每个元素。 5. 在循环内部,使用条件判断语句(例如`IF...THEN...`)来比较当前元素与`maxValue`的大小。 6. 如果当前元素大于`maxValue`,则将`maxValue`更新为当前元素的值,并将`maxIndex`更新为当前元素的索引。 7. 继续遍历数组直到所有元素都被比较完毕。 8. 循环结束后,`maxValue`即为数组中的最大值,`maxIndex`即为最大值的索引。 以下是一个示例代码实现: ``` VAR data: ARRAY[1..5] OF INT := [1, 3, 5, 2, 4]; maxValue: INT; maxIndex: INT; FOR i := 1 TO 5 DO IF data[i] > maxValue THEN maxValue := data[i]; maxIndex := i; END_IF; END_FOR; // 输出结果 PRINT("最大值: " + INT_TO_STRING(maxValue)); PRINT("最大值索引: " + INT_TO_STRING(maxIndex)); ``` 通过以上代码,可以读取任意长度的泛型数组中的最大值及其索引。代码根据数组的长度,逐个比较数组元素,找到最大值,并记录其索引,最后输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值