技术论坛

 【周三技术工坊】浅谈200SMART的MODBUS RTU通信

返回主题列表
作者 主题

至圣

经验值: 15303
发帖数: 1533
精华帖: 115
楼主    2019-08-13 23:24:00
主题:【周三技术工坊】浅谈200SMART的MODBUS RTU通信 精华帖 

        转眼即逝,已来到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。功能码解析如图:

        200SMART的 MODBUS通信是半双工的,因此在和多个从站通信时需要轮询读取,线上CASE经常会出现轮询程序执行一段时间后会轮询程序无法执行无法读取问题,那么轮询程序客户会常采用定时轮询的方式也就是利用累加或定时器分时调用Mbus_MSG指令,这种方法在使用时如果出现一个站掉站的情况,轮询程序就会因为掉站的指令没DONE而定时时间到触发了下一个Mbus_MSG指令而报6号错误。那么轮询的最好方法就是利用上一个MSG指令的DONE位复位自身触发条件置位下一个MSG指令触发,因为DONE是MODBUS完成的标识位,当一个站掉站后在报错的同时DONE位也会置“1”,此方法是最标准也是时效性最高的轮询方法。



手机用户20190815D42442
新手

经验值: 36
发帖数: 1
精华帖: 0
5楼    2019-08-15 11:53:38
主题:【故事】回复:【周三技术工坊】浅谈200SMART的MODBUS RTU通信
和6台变频器通讯,接5台时通讯都会正常,接第6台下去就会错误了这事什么原因,也是会报错3
yzm_cumt
至圣

经验值: 18166
发帖数: 2649
精华帖: 14
6楼    2019-08-16 09:41:52
主题:回复:【周三技术工坊】浅谈200SMART的MODBUS RTU通信

不好意思 ,第四段的ADDR还是没有搞明白?为什么是4096+40001呢?@绫

sometimes you have to be your own hero!
WOWUWUWU
至圣

经验值: 10349
发帖数: 1791
精华帖: 0
8楼    2019-08-17 18:36:10
主题:【故事】回复:【周三技术工坊】浅谈200SMART的MODBUS RTU通信
谢谢分享,很实用。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。