西门子200smart modbus 50个从站轮询通讯程序 程序优化了传统轮询程序,适合1到50个从站轮询 并且配备离线报警,并且可设置离线次数报警 当从站超过10个站时常规轮询的程序量非常大,用此轮询程序将大大简化工作量 程序完全开源无加密 程序注释清晰,实战程序,可直接修改使用

搞工控的朋友都懂,Modbus轮询遇到几十个从站的时候,代码量能让人写到怀疑人生。去年在厂里调试个污水处理项目,50台设备挂在200 SMART上,那传统轮询写法直接把我整emo了——光是轮询调用块就铺满整个程序页面,改个参数得翻半天。

这时候就体现出咱们今天要聊的这个轮询框架的牛逼之处了。先看核心代码段:

LD     SM0.0
MOVD   &VB1000, AC1         //从站配置表首地址
+D     VD2000, AC1          //偏移量计算
MOVW   *AC1, LW0            //读取当前从站号
MOVW   LW0, LW4             
CALL   MBUS_MSG:LEN         //发起Modbus请求

这段骚操作用指针偏移直接跳过了传统写法里每个从站单独调用的麻烦。VD2000这个偏移量寄存器是关键,每次轮询自动+14(因为每个从站配置占14字节),配合循环指令就能把50个从站遛得明明白白。

离线报警更是个实用功能。项目里最怕设备掉线没及时发现,这里直接整了个结构体:

//从站状态结构体
VB1000: 站号(2字节)
VB1002: 超时计数器(4字节) 
VB1006: 报警状态(1字节)
VB1007: 心跳时间戳(4字节)
...

当某个站连续3次(次数可调)没响应,立即触发报警位。实际测试时故意拔了第23号站的网线,HMI上秒弹报警,复位后自动恢复轮询,这比老外某些收费库还靠谱。

西门子200smart modbus 50个从站轮询通讯程序 程序优化了传统轮询程序,适合1到50个从站轮询 并且配备离线报警,并且可设置离线次数报警 当从站超过10个站时常规轮询的程序量非常大,用此轮询程序将大大简化工作量 程序完全开源无加密 程序注释清晰,实战程序,可直接修改使用

重点说说怎么改站数。打开程序直接修改这个常量:

MOVW   50, VW999           //最大从站数设置

想缩成20站?把50改成20完事。之前见过有的程序要改十几个地方,这设计确实省心。

对老司机来说,最爽的还是程序结构。主循环就干三件事:

  1. 定时器触发轮询
  2. 指针自动跳转
  3. 异常捕获处理

没有乱七八糟的嵌套调用,所有IO映射都集中在数据块里。上周拿这个框架改了个立体仓库项目,32个穿梭车通讯,从导入程序到调试完成只用了俩小时——放以前怎么也得折腾一天。

源码里注释也够直白:

// 重要!波特率修改处 ↓
MOVB   9, SMB30            // 9=19200, 12=115200
// 接线注意SM线要接终端电阻!!!

连调试时容易踩的坑都标出来了,这对新手简直救命。实测带45个温控表稳定运行一周没掉过链子,每个站的轮询间隔精准控制在150ms±10ms。

需要源码的老铁直接某度搜"200smart Modbus轮询框架",Github那个star最多的就是。下次遇到多从站项目别头铁硬刚了,这轮子够你玩转各种现场。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐