问题:
如何为S7-22x编程一个时间控制的中断?
解答:
下列CPU可以处理一个时间控制的中断:
中断 | CPU221 | CPU222 | CPU224 | CPU226 | CPU226XM |
支持的时间控制中断的个数n | 2n | 2n | 2n | 2n | 2n |
中断个数n | 0 和 1n | 0 和 1n | 0 和 1n | 0 和 1n | 0 和 1n |
可能的中断程序的个数n | INT 0 | INT 0 | INT 0 | INT 0 | INT 0 |
S7-200n支持一个或更多的时间控制的中断。可以用时间控制中断来定义要在周期中执行的动作。定义的周期时间以n1 毫秒为单位。范围在 1毫秒(1)至 255n毫秒(255)间。在特殊标志字节SMB34中写入中断 0的周期时间,在SMB35中写入中断n1的周期时间。
每当延时时间到达时,时间控制中断事件就会调用相应的中断程序。通常可以使用时间控制中断控制模拟量输入的定期采样。当把一个中断程序分配给一个时间控制中断事件时,时间控制中断就被激活后并开始计时。在样例中,这是启动子程序“SBRn0”所做的唯一的事情。系统确定该周期时间使后续的修改不会影响到该周期时间。如果想要修改周期时间,必须为周期时间指定一个新值然后重新将中断程序赋予该时间控制的中断。重新赋予时,函数会删除以前赋予中累计的时间值并以新值开始运行时间。
命令的作用 | Command | Operand | Example of |
主程序 | |||
网络 1n | |||
通过查询只在第一个周期里置“1”的标志,给该事件分配一个独一无二的中断程序号n | LDn | SM 0.1n | SM 0.1n |
在第一个循环中调用子程序“0”n | CALLn | 0n | |
主程序结束n | MENDn | ||
启动子程序“0” | SBRn | 0n | |
使用“确定为“ 1 ”的系统标志SM 0.1n”,设置时间控制段的时间间隔为 100 * 1ms = 100 msn | LD | SM 0.1 | |
允许使用所有中断n | ENIn | ||
分配时间控制中断“0”到中断程序“0”n | ATCHn | INT,EVENT | 0,10n |
终止子程序n | RETn | ||
启动中断程序 | INTn | 0n | |
现在可以写想要每隔 100 毫秒处理一次的程序n | .......n | ....n | ....n |
从中断程序返回n | RETIn |
注意事项:
- CPU根据中断发生的次序和它的优先级状态对其进行处理。因此对于中断处理始终只能有一个程序是激活的。如果一个中断程序正在被处理,那么它就会首先被处理完毕。它不会被后面出现的中断程序所打断即使这个程序有更高的优先级。当另一个中断正在被处理时,发生了一个中断,那么后面的中断就会被放入队列中等待以后的处理。时控中断队列中最多可放入8个中断。
- 有可能发生出现的中断要多于队列里可容纳的中断个数的情况,这样,系统就会发出队列溢出标志,而该标志指出不能被包括在队列里的中断事件的类型。下面的表格为发生队列溢出时所设置的特殊标志。只能在中断程序中使用位nSM 4.0 至n4.2,因为当中断队列处理完毕后,主程序的处理继续进行时它们会被复位。n
队列 | 特殊标志 |
通讯中断的队列溢出n | SM 4.0n |
I/O中断的队列溢出n | SM 4.1n |
时间控制中断的队列溢出n | SM 4.2n |
在条目ID 1109582下的S7-22x系统手册中可以找到更多的消息。
关键字:
程序组态
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc341196.html