问题:
如何为S7-22x的过程报警(I/O中断)编程?
解答:
下列CPU可以处理一个或更多的过程报警(I/O 中断):
I/O 中断 | CPU221 | CPU222 | CPU224 | CPU226 | CPU226XM |
输入n | I 0.0 | I 0.0 | I 0.0 | I 0.0 | I 0.0 |
可能的中断程序个数n | INT | INT | INT | INT | INT |
I/O 中断包括上升沿和下降沿,高速计数器中断和脉冲序列中断。
CPU可以为每个输入的上升沿和/或下降沿生成一个中断,并为这些输入中的每一个定义上升沿和下降沿事件。操作系统为每个事件赋予一个固定的事件号。
事件 | 输入 | 事件数 | 优先级 |
上升沿在n | I 0.0n | 0n | 0n |
下降沿在n | I 0.0n | 1n | 4n |
上升沿在n | I 0.1n | 2n | 1n |
下降沿在n | I 0.1n | 3n | 5n |
上升沿在n | I 0.2n | 4n | 2n |
下降沿在n | I 0.2n | 5n | 6n |
上升沿在n | I 0.3n | 6n | 3n |
下降沿在n | I 0.3n | 7n | 7n |
在下面的实例中,中断程序“4”被分配给 I 0.0n事件的上升沿,这样就可以在中断程序“INTn4”中为处理报警而编写你的程序了。
命令的作用? | 命令 | 操作数 | 操作数实例 |
网络 1 | |||
通过调用只在第一个循环周期中置“1”的特殊标志位,将报警程序号唯一地分配给事件n | LDn | SM 0.1n | SM 0.1n |
将中断程序号“4 (INT 4)”分配给I 0.0 事件“事件号n0”的上升沿n | ATCHn | INT,EVENTn | 4,0n |
允许所有的中断程序(开中断)n | ENIn | ||
继续执行主程序n | ....n | ||
....n | |||
结束主程序n | MENDn | ||
网络 X | |||
通过号“4”打开中断程序n | INTn | No.n | 4n |
现在编写想要在报警发生时运行的程序(上升沿 I 0.0 )n | .......n | ....n | ....n |
结束上升沿在I 0.0 的中断程序n | RETIn |
注意事项
- CPU根据中断的优先级对其按时间顺序进行处理。因此对于中断处理始终只能有一个激活的程序。如果程序正在处理一个中断而一个新的过程报警又到达了,那么当前的活动程序继续运行直至结束。它不能被后面的中断程序所打断,即使那个程序有更高的优先级。当另一个中断正在被处理时,发生了一个中断,那么后面的中断就会被放入队列中等待以后的处理。下表显示中断的三个队列以及每个队列中可放入的最多的中断个数。
队列 | CPU221 | CPU222 | CPU224 | CPU226 | CPU226XM |
I/O 中断n | 16n | 16n | 16n | 16n | 16n |
通讯中断n | 4n | 4n | 4n | 8n | 8n |
时间控制中断n | 8n | 8n | 8n | 8n | 8n |
- 有可能出现所产生的中断数要大于队列中最多可放入中断个数的情况。这样,系统就会发出队列溢出标志以指明不能被放入队列的中断事件的类型。下面的表格为发生队列溢出时所设置的特殊标志。只能在中断程序中使用位nSM 4.0 至n4.2,因为当队列被处理后、主程序的处理继续进行时,它们会被重新复位,并且。
队列 | 特殊标记 |
通讯中断的队列溢出n | SM 4.0n |
I/O 中断的队列溢出n | SM 4.1n |
时间控制中断的队列溢出n | SM 4.2n |
更多信息可参见条目 ID 1109582中的S7-22x系统手册。
关键字:
子程序,程序中断,系统属性
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc341228.html