首页 历史故事如何使用中断指令优化程序?

如何使用中断指令优化程序?

【摘要】:中断指令包括附加和分离指令、启动和取消延时中断指令、禁用和启用报警中断指令等。使用DETACH指令将特定事件或所有事件与特定OB分离。激活延时和时间循环中断事件的总次数不得超过4次。发生中断时,可使用EN_AIRT启用由DIS_AIRT指令延迟的组织块处理。例如,如果调用了DIS_AIRT 5次并因此延迟处理5次,则需要调用EN_AIRT指令5次以取消全部5次延迟。

中断指令包括附加和分离指令、启动和取消延时中断指令、禁用和启用报警中断指令等。其中,使用附加指令ATTACH和分离指令DETACH指令可激活和禁用中断事件驱动的子程序,通过启动延时中断指令SRT_DINT和取消延时中断指令CAN_DINT可以启动和取消延时中断处理过程,使用禁用报警中断指令DIS_AIRT和启用报警中断指令EN_AIRT可禁用和启用报警中断处理过程。

1.附加和分离指令

附加指令如图5-34所示。使用ATTACH可为事件分配组织块(OB)。在参数OB_NR中输入组织块的符号名称或数字名称,然后此组织块将分配给由参数EVENT指定的事件。如果在无错执行ATTACH指令之后发生参数EVENT中的事件,则会调用由参数OB_NR指定的组织块并执行其程序。通过参数ADD可指定应取消还是保留先前对其他事件进行的组织块分配。如果参数ADD的值为“0”,则现有分配会被当前分配替换。

978-7-111-34922-8-Chapter05-59.jpg

图5-34 附加和分离指令

CPU支持以下硬件中断事件:

1)上升沿事件(所有内置CPU数字量输入外加任何信号板数字量输入)。数字输入从OFF切换为ON时会出现上升沿,以响应连接到输入的现场设备的信号变化。

2)下降沿事件(所有内置CPU数字量输入外加任何信号板输入)。数字输入从ON切换为OFF时会出现下降沿。

3)高速计数器(HSC)当前值=参考值(CV=RV)事件(HSC 1~HSC 6)。当前计数值从相邻值变为与先前设置的参考值完全匹配时,会生成HSC的CV=RV中断。

4)HSC方向变化事件(HSC 1~HSC 6)。当检测到HSC从增大变为减小或从减小变为增大时,会发生方向变化事件。

5)HSC外部复位事件(HSC 1~HSC 6)。某些HSC模式允许分配一个数字输入作为外部复位端,用于将HSC的计数值重置为零。当该输入从OFF切换为ON时,会发生此类HSC的外部复位事件。

注意:必须在设备配置中启用硬件中断。如果要在配置或运行期间附加此事件,则必须在设备配置中为数字输入通道或HSC选中启用事件框。

分离指令如图5-36所示。使用DETACH指令将特定事件或所有事件与特定OB分离。如果指定了EVENT,则仅将该事件与指定的OB_NR分离。当前附加到此OB_NR的任何其他事件仍保持附加状态。如果未指定EVENT,则分离当前连接到OB_NR的所有事件。

2.启动和取消延时中断指令

启动和取消延时中断指令如图5-35所示。通过SRT_DINT和CAN_DINT指令可以启动和取消延时中断处理过程。每个延时中断都是一个在指定的延迟时间过后发生的一次性事件。如果在延迟时间到期前取消延时事件,则不会发生程序中断。

参数DTIME指定的延迟时间过去后,SRT_DINT会启动执行OB的延时中断。延迟时间从使能输入EN上生成下降沿时开始算起。如果延迟时间的减计数中断,则不会执行在参数OB_NR中指定的组织块。CAN_DINT可取消已启动的延时中断,此时,将不执行延时中断OB。激活延时和时间循环中断事件的总次数不得超过4次。

978-7-111-34922-8-Chapter05-60.jpg

图5-35 启动和取消延时中断指令

3.禁用和启用报警中断指令

禁用和启用报警中断指令如图5-36所示。使用DIS_AIRT和EN_AIRT指令可禁用和启用报警中断处理过程。可使用DIS_AIRT延迟处理其优先级高于当前组织块优先级的中断OB。可在组织块中多次调用DIS_AIRT。DIS_AIRT调用由操作系统进行计数。每次执行DIS_AIRT都会使处理越来越延迟。要取消延迟,需要执行EN_AIRT指令。可在DIS_AIRT指令的参数RET_VAL中查询延迟次数。如果参数RET_VAL的值为“0”,则无延迟。

发生中断时,可使用EN_AIRT启用由DIS_AIRT指令延迟的组织块处理。每次执行EN_AIRT都会取消已被操作系统记录的由DIS_AIRT调用产生的处理延迟。要取消所有延迟,EN_AIRT的执行次数必须与DIS_AIRT的调用次数相等。例如,如果调用了DIS_AIRT 5次并因此延迟处理5次,则需要调用EN_AIRT指令5次以取消全部5次延迟。可在EN_AIRT指令的参数RET_VAL中查询执行EN_AIRT后尚未启用的中断延迟数。参数RET_VAL的值为“0”表示由DIS_AIRT启用的所有延迟均已取消。

978-7-111-34922-8-Chapter05-61.jpg

图5-36 禁用和启用报警中断指令