电工学习网

 找回密码
 立即注册
查看: 4425|回复: 0

浅谈西门子200SMART的MODBUS RTU通信

[复制链接]
发表于 2019-8-14 13:12:11 | 显示全部楼层 |阅读模式
        转眼即逝,已来到Siemens  SFAE HS一年之久,工作十余年从设备维护到系统集成再到热线产品应用技术支持,角色的转变让我从不同角度对工控有了不同的认识。
       刚开始上线时是“一头雾水”,经常被客户问的不知所措,印象最深的就是MODBUS通信问题。200SMART库指令支持标准的MODBUS通信,客户询问最多的问题如通信不上报3  、带多个从站通信延迟 程序轮询问题。
     200SMART的MODBUS通信为标准的MODBUS RTU通信 ,数据帧起始位数据位停止位分别为1个、8个、1个,客户如果想实现停止位为2位的MODBUS通信 此MODBUS库是不支持的 ,用户只能使用自由口编程实现。通信报3不能通信的问题首先需检查通信线缆是否正常,485通信200SMART的485口定义为3 + 、8 -  ,客户经常会由于接反线造成通信不上。记忆犹新的一个CASE通信报3检查通信线缆 、站地址波特率效验都没问题,但是依然通信不上。最后客户两端增加终端电阻后正常,经常在线上告知客户最多按照要求两端加终端电阻,此CASE就证明了联网的格言:“通信问题你糊弄它,它就糊弄你!”。
      和第三方设备MODBUS通信时经常有客户询问modbus地址ADDR怎么确定,因为第三方设备经常会只给出16进制的数据地址,这样的话addr地址需要根据读写的功能码和16进制地址计算出ADDR地址,如从站设备给出地址为1000H  功能码为03H,解析标准的功能码03指的是读取单个或多个保持寄存器,那么ADDR为4096+40001。功能码解析如图:
6370133540493382759239615.jpg
        200SMART的 MODBUS通信是半双工的,因此在和多个从站通信时需要轮询读取,线上CASE经常会出现轮询程序执行一段时间后会轮询程序无法执行无法读取问题,那么轮询程序客户会常采用定时轮询的方式也就是利用累加或定时器分时调用Mbus_MSG指令,这种方法在使用时如果出现一个站掉站的情况,轮询程序就会因为掉站的指令没DONE而定时时间到触发了下一个Mbus_MSG指令而报6号错误。那么轮询的最好方法就是利用上一个MSG指令的DONE位复位自身触发条件置位下一个MSG指令触发,因为DONE是MODBUS完成的标识位,当一个站掉站后在报错的同时DONE位也会置“1”,此方法是最标准也是时效性最高的轮询方法。
6370133542883579355837491.jpg
来源:西门子工业技术论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-3-28 22:04

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表