我用S7200自由口与一个设备通讯,这个设备必须要向它发送询问命令以后才会回一个消息,所以只用XMT发送,马上再用RCV接收,一般情况下通讯能够正常,但是如果那个设备故障了,它就不回消息了,这时RCV就读不到结束符0A,那么SMB86一直是0,请问这时如何关掉RCV?
我现在是检测到SMB86=0保持5秒后,认为通讯异常,然后我送16#30到SMB87禁用RCV,接着再送16#B0到SMB87打开RCV,这样做了以后,发现SMB86里面是128,请问,128是什么原因才出现的,如何解决?
问题补充:
我的通讯设置:
SMB30 16#49
SMB87 16#B0
SMB89 16#0A
SMB94 16#255
最佳答案
1 如何人为结束RCV接收状态?
接收指令控制字节(SMB87/SMB187)的en位可以用来允许/禁止接收状态。可以设置en为“0”,然后对此端口执行RCV指令,即可结束RCV指令。
即
R SM87.7,1
RCV VBX,0
2 SMB86=128表示接收信息被用户禁止
提问者对于答案的评价:
感谢大家的回答;现在搞定了;因为我接收的信息没有开始字符,只有结束字符,一开始我用空闲线时间开始,但是与从站的配合有时候有问题,我设了空闲线时间是5MS,但是有时候从站在5MS内就回了消息,这样就会出错,而且用空闲线时间做,如果接受不到结束字符,就是说如果从站故障时没回消息,RCV就一直是0,不能结束,这时候理论上应该设SM87.7为0,再启动一起RCV,因为只有启动RCV,系统才会去看SM87.7,启动以后系统会发现RCV被禁用了,这时就会把RCV停止,这时去看SM86里面是128,表示RCV被禁用,然后再把SM86恢复为B0,开启RCV功能,同样要启动RCV一次来让系统知道,但是因为我的没有开始字符,不适合这样做,后来我用了任意字符开始,写16#49到SM30,16#BC到SM86,16#0A到SM89,16#0A到SMW90,1000到SMW92,100到SMB94,RCV启动后马上开始接受,接受到任意字符就认为开始,然后收到结束符认为结束,如果这个时间超过1000MS就超时,系统会把SM86写成4,这时再重新开始发送接收,如果还超时就一直循环,直到从站恢复通讯,PLC会立即恢复与从站的通讯
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc350018.html