技术论坛

 关于200smart PLC调用modbus rtu通讯轮询时的问题

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

经验值: 72003
发帖数: 8041
精华帖: 145
楼主    2018-04-22 21:15:05
主题:关于200smart PLC调用modbus rtu通讯轮询时的问题 精华帖 

关于200smart PLC调用modbus rtu通讯轮询时的问题

   今天,下午在“找答案”中看到有一侧关于200smart PLC调用modbus rtu通讯轮询时,无法正常轮询的问题。根据提问者描述:“当与一个从站通讯时,通讯正常。而2个从站(需要轮询时)无法正常通讯(无法实现轮询工作机制)”。

   看了提问者的程序,感觉没有什么疑点,因为提问者描述是按官方的例子程序编辑的。记得初次做modbus rtu通讯项目时,我也是按官方的例子程序测试过,没有发现什么问题。

   提问者的编程思路基本与官方的基本一致,开始也是先调用特殊标志位SM0.1将所有的触发位清0,然后初始化modbus rtu通讯指令,待初始化完成后,进行MBUS_MSG指令的轮询。具体问题链接:

http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=189072&cid=1076

   晚上回家想起下午的那个问题,总感觉在那处出现不妥,于是,再次上网查看该提问。重新按提问者编辑了程序测试,发现没有报警错误error管脚数值0,但确实没有实现轮询工作,监控各标志位没有被正常轮询触发,图示:



打开帮助手册,仔细核对官方例子程序,发现有其中一个程序段与官方的有一些差异。即网络2与网络3的位置有区别,别的程序段均一致。

发现实际V1.3并没有随着初始化指令完成被触发,同时监控其它MBUS_MSG指令的触发位均为0,说明V1.3并没有被真正的有效触发过。

为验证给V1.3是否被V1.0触发,我在程序网络3中再增加了一个加1指令,数据地址VB100,图示:



监控结果仍然是没有被触发加1指令。

打开200smart 的系统手册,看是否能够找到该指令的具体说明。

关于modbus rtu主站初始化指令及MBUS_MSG指令的时间说明,图示:



这个初始化指令的执行时间在0.2mS ~ 0.1mS之间,并不存在plc的扫描周期的关联(程序的每一次扫描周期一定是大于该初始化需要的时间值)。

既然没有与初始化指令有时间上的冲突,尝试着将V1.0(NO)修改为SM0.1(NC)后测试,目的是先初始化完成一个周期后,再执行轮询工作机制,图示:



这个测试,说明当modbus rtu通讯的初始化程序正常后的第2个周期,触发MBUS_MSG指令程序可以轮询,这个与官方的例子程序的工作机制相吻合。

刨根到底想问题,为什么在同一个周期中,初始化完成标志位Done位无法触发下面的V1.3?

当只有这样的情况时,才有可能没有沿的作用,即SM0.0与V1.0在同一个周期内同时被置1,就没有沿跳变。因为库指令被加密了,无法再看到内部的处理程序段。为验证这个可能原因,我在网络4中增加一个验证程序段来验证这个想法,图示:



果不出其然,VB100并没有被激活加1,原因是特殊标志位SM0.0每次刷新的同时,与上升沿在同一个周期内,所以,沿无效。

那么,模糊的问题开始清晰起来了。如果V1.0等同于SM0.0的状态值,则实际上并没有沿跳变的可能条件,也就没有下面的轮询工作机制的环境。

小结:

该轮询机制无法正常工作的更本原因是:

1)  没有严格按官方的例子程序执行编程;

2)  看似正常的程序段,由于在特殊条件下(V1.0相当于SM0.0状态时)不能够正确产生沿的作用;

3)  程序段的结构非常重要,必须认清程序的扫描机制和特殊标志位是作用;

   程序虽然严格按自左而右,自上而下的扫描工作机制执行,但如果遇到特殊程序段应用时,确实需要思考可能存在的原因。有时候,我在编辑程序时也会无意间出现一些自己“匪夷所思”的现象,我会很“自觉”的有意把程序网络段置换个位置测试,可能会达到预想不到的效果,这个实际上仍然是对程序工作机制的理解程度问题,所谓“小问题,大智慧”。


刘工TIA
侠圣

经验值: 2230
发帖数: 222
精华帖: 5
1楼    2018-04-22 21:53:14
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题
有时一些匪夷所思的问题,换个网络程序段也许就不一样。确实是的。很多时候,某个网络在前或者在后有很大影响,因为plc的程序扫描机制。
WWCWWC
至圣

经验值: 72003
发帖数: 8041
精华帖: 145
2楼    2018-04-23 08:56:33
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题

这个问题并非是匪夷所思的,主要是因为modbus rtu通讯的完成位标记Done位与特殊标志位SM0.0的特性在此处相同。

另外,错误的应用了上升沿。如果取消启动modbus rtu通讯的启动V1.3的上升沿,轮询可以实现。

也可以用其它控制位,替代V1.0来确定轮询也是可以的。


WWCWWC
至圣

经验值: 72003
发帖数: 8041
精华帖: 145
3楼    2018-04-23 09:01:14
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题

置换网络段位置,实际上就是为了规避plc程序的扫描周期,我在开始的验证程序中应用SM0.1目的也是规避扫描周期对modbus rtu初始化指令完成标志位Done位与特殊标志位SM0.0特性问题,使V1.0在第二个周期有效。

芳季
至圣

经验值: 67500
发帖数: 14774
精华帖: 100
4楼    2018-04-23 12:52:21
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题

ctrl指令我一直觉得一执行就会Done。都是一个周期内的事。

WWCWWC
至圣

经验值: 72003
发帖数: 8041
精华帖: 145
5楼    2018-04-23 13:00:33
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题

我测试结果,这个Done(初始化完成)位等同于SM0.0,所以在同一个时刻,也就没有了上升沿的触发条件。



Laohuai
至圣

经验值: 17408
发帖数: 6225
精华帖: 18
6楼    2018-04-24 22:42:55
主题:回复:关于200smart PLC调用modbus rtu通讯轮询时的问题

我觉得新手就是要按照官方给的例子套写,不要多一个指令,也不要少一个指令

当然MSG可以添加或者减少。

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