我用下面中断程序接受9个字节的数据,我想问下这段程序是接受完9个字节才退出中断还是每接受一个字节就退出一次,如果是接受9个才退出,请问为啥顺序执行一遍但不退出中断?
INT_0
LD SM0.0
MOVB SMB2, *VD256
LD SM0.0
INCD VD256
INCW VW200
LD SM0.0
AW>= VW200, 9
S M0.0, 1
问题补充:
3楼说的结束指令是RETI吗???STEP7在编译的时候自己会添上的,那是不是我可以理解为,我用VB连续发送几个字节,PLC每收一个字节退出一次中断,然后再进来???
最佳答案
我用VB连续发送几个字节,PLC每收一个字节退出一次中断,然后再进来???
是的。
当有一个字符到通讯口时,就会执行INT_0,怎么执行呢?从上到下,一个指令一个指令执行
要执行多长时间呢?0.8+15+14+0.8+22+20+0.8+23+2.9=99.3微秒=0.0993毫秒
当执行完S M0.0, 1后,中断程序退出,返回到原点,继续执行原来的程序。
INT_0
LD SM0.0 //执行所需的时间0.8us
MOVB SMB2, *VD256 //执行所需的时间15us+14us
LD SM0.0 //执行所需的时间0.8us
INCD VD256 //执行所需的时间22us
INCW VW200 //执行所需的时间20us
LD SM0.0 //执行所需的时间0.8us
AW>= VW200, 9 //执行所需的时间23us
S M0.0, 1 //执行所需的时间2.9us (VW200≥9)
如果用VB发送10个字节,那么中断0执行10次。
这样的中断程序是越短越好,防止中断程序还没执行完,通讯口又来字符了,假如波特率是9600,一个字符传送的时间是1.04毫秒(一个字符按10位计算),如果中断程序执行的时间大于1.04毫秒,那字符可能会丢失。
如果中断程序里有CRETI(从中断有条件返回)指令,当条件满足时,CRETI后面的语句就不会被执行,退出中断程序,返回到原点,继续执行原来的程序。
中断程序执行完了就退出。
通讯口有字符来的时候,就执行这个中断。
执行程序的时候不会等待通讯某个状态的,相反的是通讯的某个状态会产生中断。
程序不会在某个点停留的。
每个指令的执行时间在手册上都能查到,累加一下,就是中断执行的时间。
另外可以用RCV指令执行接收数据,而不用字符中断方式,具体见手册。
提问者对于答案的评价:
谢谢您~~~~
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc353497.html