西门子200smart modbus rtu通讯实例1
通讯过程中可能会出现的错误报警
上一篇说的是一个简单的modbus rtu轮询,由于编程验证时不经意间接错的通讯连接,造成了一个MSG的报警错误6#,在处理该问题时,让我萌生了写一写通讯程序过程中错误报警的念头。
1) 先说说MBUS_CTRL初始化错误报警3(超时无效);我在验证时由于用一条简易的双绞线,之前是做过与富士温控仪时modbus rtu通讯验证过的,时间一长也忘了具体的连接,很随意的连接后就下载程序测试了。监控程序时发现居然有报警,想起刚刚接线时想打开原先的DP插头检查的,打开原DP插头果然是连接错误改接后,MBUS_CTRL初始化无错误。
2) MBUS_MSG错误报警6,由于在编辑modbus rtu通讯轮询时,键入了一个错误的M区地址,监控主站通讯轮询时失效,发现仅仅只有2个MSG指令居然也同时被激活了,错误报警是必然了,重新审阅轮询程序很快发现了问题的所在,修改后MSG指令error无错误报警。
上述2个错误是我验证程序时出现过的过程处理。
3) MBUS_MSG错误报警3(接收超时),当我仅仅只给主站上电时,监控主站MSG指令,指令error错误报警输出轮询值3,图示:

从故障现象看,MSG指令出现错误报警时为该指令轮询离开时,这个结果符合官方技术文档中的描述,当Done位为1时,输出error错误值为输出状态值。该故障为从站未上电工作或从站通讯线开路,主站均报警3。
4) 人为断开从站(电源、通讯),再插入后的现象,图示:属于编程不够严谨问题

从站应答过来的右移1位的指令,在重新连接通讯后,居然变为这样的状态。监控从站程序,发现了问题,因为我在创建用户程序时,没有在系统块的启动项中选择run模式,刚刚测试时,发现重新上电后cpu在stop模式,修改后重新下载。由于从站初始化操作中的不严谨,造成的这个错误,从站程序在上一篇中有图片,这个低级错误相信网友也能够很明显可以看出来的。
5) 关于MaxHold管脚数据,该管脚是指定参与通讯的最大保存寄存器数。当在编辑从站MBUS_INIT初始化指令时,注意在库存储器分配范围,如果这样编辑,就会出现错误报警,图示:

MaxHold管脚数量是指,HoldStart保存寄存器区的起始地址开始的连续字节个数,我的程序自VB11开始的1000个字,很显然超过到库存储器分配的起始地址VB1000了。这时,MBUS_INIT初始化指令错误报警5(库存储分配保持寄存器与modbus从站符合重叠),MBUS_SLAVE运行指令错误报警10(从站功能未启用),这个容易理解。初始化都未通过,从站怎么能够建立,修改程序不在范围下载后,通讯正常工作。
另外,我记得在经济型plc做从站初始化指令时,还需要注意MaxIQ和MaxAI管脚的数据设置范围,经济型plc由于不支持模块扩展,所以填入MaxAI数值后也会报错。