问题:
如何编程S7-21x的时间控制中断?
解答:
下列CPU可以处理时间控制中断:
中断 | CPU 210 | CPU 212 | CPU 214 | CPU 215 | CPU 216 |
支持的时间控制中断的数量n | 无n | 1n | 2n | 2n | 2n |
中断号n | 无n | 0n | 0 和 1n | 0 和 1n | 0 和 1n |
可能的中断程序号n | 无n | INT 0 | INT 0 | INT 0 | INT 0 |
S7-21x支持一个或更多的时间控制中断。可以用时间控制中断来执行需要循环执行的动作。
循环时间按每步 1 ms定义,范围在 5 ms (5) 至 255 msn(255)。
可以在特殊寄存器SMB34里为中断程序 0写入循环时间,并在SMB35里为时间控制的中断程序n1写入循环时间。
每次当延时到达时,时间控制中断事件就会调用相应的中断程序。
通常使用时间控制中断进行模拟量输入采样。当分配一个中断程序到一个时间控制中断事件时,时间控制中断激活并开始计时。
在样例中,定时中断的初始化由只调用一次的启动子程序“SBR_0”完成。系统确定循环时间使以后所做的更改不会影响到循环时间。如果想要更改循环时间,必须为循环时间指定一个新值然后把中断程序重新分配到时间控制中断。重新分配时,此功能会删除以前定义的计时时值并开始以新时间值运行。
命令的作用 | 命令 | 操作数 | 操作数实例 |
主程序 | |||
网络 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根据中断发生的次序和它的优先级状态对其进行处理。因此对于中断处理始终只能有一个程序被激活。如果一个中断程序正在被处理,那么它就会先处理完毕。它不会被后面的中断程序所打断即使那个程序有更高的优先级。当一个中断正在被处理时,发生了另一个中断,那么后面的中断就会被放入队列中等待以后的处理。下表显示中断的三个队列以及可放入每个队列的最多的中断数。n
队列 | CPU210 | CPU212 | CPU214 | CPU215 | CPU216 |
时间控制中断n | 无 | 2n | 4n | 8n | 8n |
- 有时候发生出现的中断要多与队列里可容纳的中断个数,这样,系统就会发出独特的队列溢出标志以指出不能被放入队列的中断事件的类型。下面的表格为发生队列溢出时所设置的特殊标志。只能在中断程序中使用位nSM 4.0 ton4.2,因为当队列被处理完毕、主程序的处理继续进行时,他们会被复位。n
队列 | 特殊标志 |
通讯中断的队列溢出n | SM 4.0n |
I/O中断的队列溢出n | SM 4.1n |
时间控制中断的队列溢出n | SM 4.2n |
在条目ID 1109154下的S7-21x系统手册中可以找到更多的消息。
关键字:
程序组态
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc341203.html