有条件结束
在当前程序位置结束程序代码的当前扫描。
输入
如果为TRUE,将执行指令
输出
设置为TRUE(如果指令已成功处理)
当执行条件变为TRUE时,程序将终止扫描并开始I/O处理。然后,程序返回到第一个地址。
在子例行程序或中断程序等子程序中无法执行此指令。仅在主程序区域中使用FP_END_SCAN指令。
两个或多个FP_END_SCAN指令可在主程序内使用。
当使用下列指令之一时必须小心,这些指令通过检测执行条件(触发器)的上升沿而被执行。
DF(上升沿差分)
CT(计数器)的计数输入
F118_UDC(升值/降值计数器)的计数输入
SR(移位寄存器)的移位输入
F119_LRSR(左/右移位寄存器)的移位输入
P型指令的差分执行(由P和编号指定,例如P20_ADD)
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
bEndCurrentScan: BOOL:=FALSE;
iCounterExecuted: INT:=0;
iCounterNotExecuted: INT:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_F,FP_END_SCAN!,,19,0,27,3,,?DEN?AENO);
B(B_CONTACT,,bEndCurrentScan,6,1,8,3,);
L(1,2,6,2);
L(8,2,19,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,FP_INC!,,20,0,26,4,,?DEN?Dd?Ad?AENO);
B(B_VARIN,,iCounterNotExecuted,18,2,20,4,);
L(1,2,20,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY
FP_INC(d := iCounterExecuted);
If (bEndCurrentScan) then
FP_END_SCAN();
End_if;
FP_INC(d := iCounterNotExecuted);