请参考以下备用自投程序:
[code]FUNCTION_BLOCK FB_RedundantStart
TITLE = 'Redundant Start Block'
VERSION : INT := 1;
VAR_INPUT
Enable : BOOL; (* 主控制开关 *)
Motor1_Start : BOOL; (* 电机1启动信号 *)
Motor2_Start : BOOL; (* 电机2启动信号 *)
Motor3_Start : BOOL; (* 电机3启动信号 *)
Motor4_Start : BOOL; (* 电机4启动信号 *)
Motor5_Start : BOOL; (* 电机5启动信号 *)
Motor6_Start : BOOL; (* 电机6启动信号 *)
Motor7_Start : BOOL; (* 电机7启动信号 *)
END_VAR
VAR_OUTPUT
Motor1_Run : BOOL; (* 电机1运行信号 *)
Motor2_Run : BOOL; (* 电机2运行信号 *)
Motor3_Run : BOOL; (* 电机3运行信号 *)
Motor4_Run : BOOL; (* 电机4运行信号 *)
Motor5_Run : BOOL; (* 电机5运行信号 *)
Motor6_Run : BOOL; (* 电机6运行信号 *)
Motor7_Run : BOOL; (* 电机7运行信号 *)
END_VAR
VAR_TEMP
All_Run : BOOL; (* 所有电机运行标志 *)
Running_Count : INT := 0; (* 运行的电机数量 *)
Is_Run : ARRAY[1..7] OF BOOL := [FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE]; (* 每个电机的运行标志 *)
i : INT; (* 循环计数器 *)
END_VAR
BEGIN
(* 检查主控制开关是否打开 *)
IF Enable THEN
(* 检查每个电机启动信号 *)
IF Motor1_Start THEN
Is_Run[1] := TRUE;
END_IF
IF Motor2_Start THEN
Is_Run[2] := TRUE;
END_IF
IF Motor3_Start THEN
Is_Run[3] := TRUE;
END_IF
IF Motor4_Start THEN
Is_Run[4] := TRUE;
END_IF
IF Motor5_Start THEN
Is_Run[5] := TRUE;
END_IF
IF Motor6_Start THEN
Is_Run[6] := TRUE;
END_IF
IF Motor7_Start THEN
Is_Run[7] := TRUE;
END_IF
(* 计算正在运行的电机数量 *)
Running_Count := 0;
FOR i:=1 TO 7 DO
Running_Count := Running_Count + INT_TO_BOOL(Is_Run[i]);
END_FOR
(* 判断是否需要备用自投 *)
IF Running_Count > 5 THEN
All_Run := FALSE;
IF Is_Run[1] THEN
Is_Run[1] := FALSE;
ELSIF Is_Run[2] THEN
Is_Run[2] := FALSE;
ELSIF Is_Run[3] THEN
Is_Run[3] := FALSE;
ELSIF Is_Run[4] THEN
Is_Run[4] := FALSE;
ELSIF Is_Run[5] THEN
Is_Run[5] := FALSE;
ELSIF Is_Run[6] THEN
Is_Run[6] := FALSE;
ELSE
Is_Run[7] := FALSE;
END_IF
END_IF
(* 设置每个电机的运行标志 *)
Motor1_Run := Is_Run[1];
Motor2_Run := Is_Run[2];
Motor3_Run := Is_Run[3];
Motor4_Run := Is_Run[4];
Motor5_Run := Is_Run[5];
Motor6_Run := Is_Run[6];
Motor7_Run := Is_Run[7];
ELSE
(* 主控制开关未打开,所有电机关闭 *)
Motor1_Run := FALSE;
Motor2_Run := FALSE;
Motor3_Run := FALSE;
Motor4_Run := FALSE;
Motor5_Run := FALSE;
Motor6_Run := FALSE;
Motor7_Run := FALSE;
END_IF;
END_FUNCTION_BLOCK[/code]
该函数块可以实现7台电机的5用2备功能。输入参数中,Enable为主控制开关,Motor1_Start到Motor7_Start为对应的电机启动信号;输出参数中,Motor1_Run到Motor7_Run为对应的电机运行信号。当启动的电机数量超过5台时,程序会自动关闭一个正在运行的电机。当主控制开关未打开时,所有电机都会关闭。 |