1. 一台电脑监控程序及状态表,另一台电脑用串口调试助手监控串口数据。电脑,电缆,串口等都没有问题。
2. 手册上的自由口通讯例程已经做通的。
3. 我现在要做一个自由口通讯,发送和接收均是 以7e开始 以5e结束。
4. 我的程序是首先PLC发送一个数据包,然后接收。
5. 本来已经提了一个问题,结果在问题补充的时候,补充了好几次都弄不上去。就新建了问题。
下午题的问题中,程序有点问题,用的手册上的例程,本来想屏蔽的,结果没有把NOT指令屏蔽掉,因为在NOT指令后面有一个RCV指令。现将新的程序贴上
主程序:
网络1
LD SM0.1
MOVB 16#09, SMB30 //初始化自由口
MOVB 16#9C, SMB87 // 16#B2.16#B0 均设置过,没有成功
MOVB 16#7E, SMB88 //起始字符
MOVB 16#5E, SMB89 ///结束字符
MOVW 25, SMW90 ///空闲超过5毫秒
MOVW 50, SMW92 ///计时器超过15毫秒
MOVB 100, SMB94 ////最大接收100个字符
ATCH INT_0:INT0, 23 /// 连接中断0到接收结束事件
ATCH INT_2:INT2, 9 /// 连接中断2到发送结束事件
XMT VB500, 0 /// 发送数据
ENI
INT_0 /// 中断0
LD SM0.0
+D 1, VD2000 ///////中断计数,监控中断
XMT VB500, 0
INT_2
LD SM0.0
+D 1, VD2008 ///中断计数,监控中断
RCV VB300, 0
我的程序本意是想RCV指令在设定的时间内不管有没有收到信息都自动停止接收,再次转入发送(XMT)。但是上述程序经过测试发现,PLC没有收到串口的数据,还是不自动停止接收。收到数据后立即发送数据。
请教我如何完成这个功能:在一定的时间内不管有没有收到信息都自动停止接收,停止RCB指令。要不怎么都发不了数据。
最佳答案
SM87.7(SM187.7)被修改后,必须执行一次RCV指令才能启停接收功能。也就是说:在设定的时间内,无论是否有数据,都将SM87.8复位,然后执行一次RCV指令关闭接收功能。如果不执行RCV指令,RCV的状态是不会发生变化的。
提问者对于答案的评价:
问题在前天已经解决,思路是鼠老爹这种思路。看来还是我理解错了。我的理解是只要设置了SMW90和SMW92,SMB87设置为16#9C等,只要设置了正确了这几个参数,经过设定的时间,RCV指令有没有接收到数据都会自动接收终止,自动放开自由口的占用。实际做了大量测试,都没有成功。按照鼠老爹的说法,就算终止条件满足了,还得复位SM87.7,同时调用一次RCV指令才能结束对自由口的占用。
感谢各位的关注,感谢鼠老爹大侠!
专家置评
关于自由口通信,论坛上有个精华贴,大家可以有时间参考一下!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc311890.html