关于S7-200中断的退出

我用下面中断程序接受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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午1:34
下一篇 2021年7月5日 上午1:34

相关推荐

发表回复

登录后才能评论