s7-200plc用自由口编写的主战程序,轮训两台modbus从站,主站程序做好下载后监视状态表数据都能读过来.但是当我给三台测试的plc断电又从新上电后,数据就都读不回来了,然后把主站plc的程序从新下载一遍又正常了不知道这是什么问题,求高手帮忙分析分析:主程序如下
Network 1 // 网络标题
// 网络注释
LD SM0.1
MOVB 9, SMB30
MOVB 2#11000100, SMB87
MOVW 5, SMW90
MOVW 5, SMW92
MOVB 255, SMB94
MOVB 0, VB400
MOVB 0, VB401
ATCH INT1, 23
ATCH INT0, 9
ENI
Network 2
LDN T56
TON T56, 1
Network 3
LD T56
EU
LPS
R SM87.7, 1
INCB VB401
AB= VB401, 3
MOVB 0, VB401
LRD
AB= VB401, 1
XMT VB200, 0
LPP
AB= VB401, 2
XMT VB300, 0 中断0程序如下:
LD SM0.0
LPS
S M10.0, 1
AB= VB401, 1
S SM87.7, 1
MOVB 4, SMB88
AENO
RCV VB100, 0
LPP
AB= VB401, 2
S SM87.7, 1
MOVB 3, SMB88
AENO
RCV VB500, 0
最佳答案
你可以在两次轮训结束后增加一个重启的过程或者在读到通讯故障的信号后,关闭自由口,再重新打开自由口,或者读取一个长度为0的信号(清空缓存区),就不会造成循环停止了
提问者对于答案的评价:
谢谢,虽然不是很明白,但是感谢你的热心回答
专家置评
已阅,最佳答案正确。
在接收条件里做了定时器超时中断,需要在中断程序里再做个判断,是因为时间到了才进入中断,还是收到结束字符进入的。如果是定时到了,再从新触发下接收,直至收到结束字符在开始新一轮的发送。就是要把丢站超时这个结束条件考虑进来,不然这个循环就卡在那里了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc212175.html