现在我用s7200的plc 做自由口通信,自由口初始是接受,接受后在接受完成中断里,调用定时中断发送数据,延时后发送数据,发送完成后调用发送完成中断里面,接着做接受,现在想要在这种模式下,强制的发送数据,请问各位老师怎么做
最佳答案
我们再来滤滤编程思路。
首先在通讯参数初始化子程序中编辑了接收指令,然后,在接收完成中断定义定时中断,这个定时中断是发送通讯数据的。
好,这里就有可能存在一些问题了。
原因:当初始化通讯参数后,启用接收指令接收数据,这个没有问题。可能出现问题的是当接收指令完成后,在接收完成中断了调用定时中断,那样有可能在通讯口中出现多个指令的传送。
因为,自由口通讯仅仅允许在一条通讯线路上只能有一个指令的有效。
你的提问,是可以做到的。首先,再次来理解中断子程序的调用,中断子程序一旦初始化生效后,cpu会一直按初始化子程序的定义执行中断子程序,一旦中断条件满足就自动执行,执行周期为一个扫描周期。
而你现在要强制执行其它中断的操作步骤是:
先分离中断,然后根据需要再次定义中断连接,中断事件,开中断,当完成这些中断后仍然需要执行分离中断,再重新初始中断。
虽然从指令的层面上分析是允许这样编辑程序,但我个人感觉可能是你还没有理清整个通讯程序的思路,原因是执行中断分离,定义中断,开中断过程中可能会丢失一些通讯传送数据。
我建议的通讯路径是:
接收数据,当正确接收到数据后,重新做出需要操作的发送数据执行发送数据,当发送完成后,在发送完成中断中仍然调用接收数据程序,当接收到正确的数据后,再做出接收正确数据的响应,但当接收到不正确的数据后,仍然响应出接收到错误的数据,并再次发送数据的请求,如此循环。
提问者对于答案的评价:
.
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc370774.html