|
转眼即逝,已来到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”,此方法是最标准也是时效性最高的轮询方法。
来源:西门子工业技术论坛 |
|