INTERRUPT...DECL ...WHEN ...DO ... 中断指令
中断声明的原理:
当出现诸如输入等定义的事件时,控制器中断当前程序,并处理一个定义的子程序。
事件和子程序用 INTERRUPT...DECL ...WHEN ...DO ... 来定义
中断声明是一个指令。它必须位于程序的指令部分,不允许位于声明部分!
声明后先将取消中断 (Interrupt)。必须先激活中断,然后才能对定义的事件作出反应!
中断声明的句法:
Global (全局)
中断只有从对其进行声明的层面起才被识别。
在一个子程序中声明的中断在主程序中是未知的 (此处为中断 23)。一个在声明的开头写有关键词 GLOBAL 的中断在上一层面也是已知的(此处为中断 2)。
Prio:优先级
1.有优先级 1、2、4- 39 和 81 - 128 可供选择。
2.优先级 3 和 40 - 80 是预留给系统应用的。
3.某些情况下中断 19 预留给制动测试。
4.如果多个中断同时出现,则先执行最高优先级的中断,然后再执行优.
5.先级低的中断。(1 = 最高优先级)
事件:触发中断的事件。该事件在出现时通过一个脉冲边沿被识别 (脉冲边沿触发)。
中断程序
1.应处理的中断程序的名称。
2.该子程序被称为中断程序。
3.运行时间变量不允许作为参数传递给中断程序
4.允许使用在一个数据列表中声明的变量。
INTERRUPT +操作+<编号>
ON: 激活一个中断。
OFF : 取消激活一个中断。
DISABLE: 禁止一个中断。
ENABLE : 开通一个原本禁止的中断。
例:INTERRUPT ON 10 中断被识别并被执行 (脉冲正沿)
这种情况下,中断由状态的转换而触发,例如,对于$IN[22]==TRUE 而言,通过 FALSE 到 TRUE 的转换。也就是说,在 INTERRUPT ON 时不允许已是该状态,否则就无法触发中断!在此情况下,还必须注意:状态转换最早允许在 INTERRUPT ON 后的一个插值周期进行。(可通过在INTERRUPT ON 后编程设定 WAIT SEC 0.012 来实现。若不希望出现预进停止,则可另外在 WAIT SEC 前再编入一个 CONTINUE。)原因是 INTERRUPTON 需要一个插值周期 (= 12 ms),直到中断真正激活。如果先前变换了状态,中断不能识别这一变换。
中断指令与FB_PSPS程序的使用分析:
DEF UP1() UP程序
UP Anfang
SPS_N=-1
SPS_FERTIG=FALSE
IF NOTCALLBYSELECT THEN 在由程序调用UP 时 CALLBYSELECT=false
INTERRUPTDECL 10 WHEN $CYCFLAG[254]==FALSE DO VW(#FB_STOP,TRUE)
由M254 的非来激活中断,触发程序VW(#FB_STOP,TRUE) 中断的等级是10
INTERRUPT ON10 激活中断
INT10=TRUE
VW_USR_R(#USR_INIT)执行 VW_USR_R初始化
ENDIF
VW(#VW_INIT_UP,TRUE)执行 VW初始化
DEF FB_STOP () 声明程序FB_STOP ()
INT INT_N
BOOL EXIT_OK
BOOL IN_APO_1
全部0条评论
快来发表一下你的评论吧 !