技术论坛

 关于S7-200 modbus rtu通讯报警6#(续1)

返回主题列表
作者 主题
WWCWWC
至圣

经验值:79157
发帖数:9099
精华帖:157
楼主    2019-01-01 08:23:11
主题:关于S7-200 modbus rtu通讯报警6#(续1) 精华帖 

关于S7-200 modbus rtu通讯报警6#(续1)

   真没有想到,回复了网友在“找答案”栏目中的一个问题,在西门子论坛上居然掀起了对modbus rtu错误报警6#的大讨论,这些讨论已经早已超越了原提问的本质,升华到modbus rtu通讯的一定高度。

   这篇短文仍然对上次的modbus rtu仅仅调用一个msg指令,而系统出现错误报警6的深入。先上图,后说明,图示:


程序解释:

1)  初始化modbus rtu(mbus_crtl),给指令分配参数;

2)  将初始化完成标记位Done(M0.0)延时一个扫描周期后(利用特殊标志位SM0.1的NC逻辑关系),用M0.2触发msg指令;

3)  Msg指令的EN、First分别由M0.2及M0.2的上升沿触发相应的管脚。

 

   从监控图示可以看到这时并没有再出现错误报警6,而是根据我实际没有连接rs-485口的实际现状报的警,符合实际错误报警现象)出现错误报警3。与上一篇帖子不同的程序,也只是应用了第二次扫描周期激活msg指令及msg的EN端子的使能位,这与第一篇帖子中的程序段位置颠倒,从功能上是一致的。

同样的程序及外部连接情况下,仅仅修改msg的EN端用SM0.0特殊标志位的程序,图示:


这时的msg指令error输出为错误报警6。

小结:

   问题变得非常显现了,msg指令error出现错误报警6,主要是因为错误的调用了msg指令引起的。从msg指令的应用中可以理解,同一个时刻只允许一条msg指令有效(半双工通讯的协议),而用特殊标志位SM0.0显然违背了modbus rtu通讯的规约(始终激活状态,无法识别调用状况),尤其是用户程序调用多个msg指令时,无法区分哪一个msg有效;SM0.0另一个情况是它本身的特性(长ON,每一个周期的刷新)。从而出现错误报警6也符合了错误报警的信息含义。参考在线帮助引用:“EN 输入和“第一个”(First) 输入同时接通时,MBUS_MSG 指令会向 Modbus 从站发起主站请求。 发送请求、等待响应和处理响应通常需要多个 PLC 扫描时间。 EN 输入必须接通才能启用请求的发送,并且应该保持接通状态,直到“完成”(Done) 位接通”。从几个验证例子上分析msg指令的应用必须是同时激活这2个使能端。几篇【modbus rtu错误报警6】的帖子,我也仅仅是引用了网友的最初程序架构。无论从轮询角度,还是程序的架构或官方给出的例子程序也不是用这个特殊标志位SM0.0的。错误的调用特殊标志位使能msg指令,引起错误的报警信息,让人容易掉了“坑”。另外一个情况是官方给出的库文件msg指令既然有对同一个周期(通讯时刻)禁止2个以上的msg指令调用,那么msg指令中应该有区分2个指令同时调用的判断程序段,由于库指令的加密,又通过EN、First管脚使能的不同条件下的验证检测,也符合上述观点,讨论至此只能暂告一个段落了。如有网友知道modbus rtu库指令的内核,再继续深入讨论。


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。