以下是一个自由口程序,下载到PLC中正常,但是有几处疑问请各位师傅讲解,不胜感激!
主程序
// 网络注释
LD SM0.1
MOVB 16#49, SMB30
MOVB 16#9C, SMB87
MOVW +100, SMW92
MOVW 0, SMW90
MOVB 21, SMB94
ENI
Network 2
LD SM0.1
ATCH INT0, 9 //传输完成中断
MOVB 150, SMB34
ATCH INT1, 10 //定时中断
INT_0
LD SM0.0
RCV VB100, 0
MOVB 250, SMB34
ATCH INT_1, 10
INT_1
LD SM0.0
DTCH 10
XMT VB0, 0
问题一:主程序网络2为何用sm0.1?那中断程序不是只执行一次了吗?sm0.1
导通一个周期之后断开了,后面的程序不是都不执行了吗?
问题二:主程序网络二的SMB34的值和INT_0程序里边的SMB34值的设置有什么讲究吗?
问题三:为何主程序里边有定时中断,中断0程序里边又来一次,实验证明去掉一个都不能正常通讯。
问题补充:
是不是ENI指令使得两个ATCH中断指可以一直使能,就是执行?
最佳答案
从这断程序中可以看出你对中断比较爱好,鼓励!但是这样写有点复杂了。
一、SM0.1为开机脉冲,初始化。你这有定时,链接中断,开中断,这些只需要开机运行一次就够了。只要你不关中断,那就会一直运行中断的。
二、其实这两个地方的SMB34没有任何联系,你放心。因为开始150ms是你开机到第一次发送的时间间隔,等到发送的时候呢,就关掉这个中断连接了。等发送完开始接收的时候,又更改了SMB34的数值,开始了接收的倒计时,然后时间到了又进入到了INT1,INT0如此循环。
但是有几点要求,INT0里的SMB34最小值要给足接收数据的时间,否则还没结束就开始发送,绝对报错!最大值当然是不用超过255ms了。
三、你明白我上个解答后,这你就应该能明白了。如果你把这150ms去掉根本无法开始发送,更别说结束后的接收了。250ms去掉后,要是还有开中断连接,那150ms就有开始了,报错。要是连INT0里的开中断连接都没有的话,那一个发送一个接收就结束了。
补充、ENI是全局开放所有被连接的中断事件,但是你可以单个中断分离,如DTCH,针对的还有个全局关DISI。
如果还有问题可以联系我
提问者对于答案的评价:
非常感谢,谢谢回复!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345430.html