第一个功能块:
FUNCTION_BLOCK MaxMinValue
VAR_INPUT
InputArr : ARRAY [1..10] OF REAL; //用于查找最大值最小值的数组,数组长度为10
END_VAR
VAR_OUTPUT
MaxValue : REAL; //最大值
MinValue : REAL; //最小值
END_VAR
VAR
i : INT := 1; //数组下标
END_VAR
//初始化最大值和最小值为第一个元素
MaxValue := InputArr[1];
MinValue := InputArr[1];
WHILE i <= 10 DO
IF InputArr[i] > MaxValue THEN //更新最大值
MaxValue := InputArr[i];
END_IF
IF InputArr[i] < MinValue THEN //更新最小值
MinValue := InputArr[i];
END_IF
i := i + 1; //数组下标+1
END_WHILE
第二个功能块:
FUNCTION_BLOCK MotorControl
VAR_INPUT
Level : REAL; //液位计数值
ContNum : INT; //控制电机的数量
Auto1, Able1, Fault1 : BOOL; //电机1的三个控制信号
ContLevel1 : REAL; //电机1启动液位
Auto2, Able2, Fault2 : BOOL; //电机2的三个控制信号
ContLevel2 : REAL; //电机2启动液位
Auto3, Able3, Fault3 : BOOL; //电机3的三个控制信号
ContLevel3 : REAL; //电机3启动液位
Auto4, Able4, Fault4 : BOOL; //电机4的三个控制信号
ContLevel4 : REAL; //电机4启动液位
Auto5, Able5, Fault5 : BOOL; //电机5的三个控制信号
ContLevel5 : REAL; //电机5启动液位
Auto6, Able6, Fault6 : BOOL; //电机6的三个控制信号
ContLevel6 : REAL; //电机6启动液位
END_VAR
VAR_OUTPUT
Run1, Run2, Run3, Run4, Run5, Run6 : BOOL; //控制电机开关的信号
END_VAR
//初始化电机状态为关闭
Run1 := FALSE;
Run2 := FALSE;
Run3 := FALSE;
Run4 := FALSE;
Run5 := FALSE;
Run6 := FALSE;
//判断控制的电机数量,最大为6台
CASE ContNum OF
1: //控制1台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
2: //控制2台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
IF Level >= ContLevel2 THEN //满足启动液位
IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
Run2 := TRUE; //打开电机2
END_IF
END_IF
3: //控制3台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
IF Level >= ContLevel2 THEN //满足启动液位
IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
Run2 := TRUE; //打开电机2
END_IF
END_IF
IF Level >= ContLevel3 THEN //满足启动液位
IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
Run3 := TRUE; //打开电机3
END_IF
END_IF
4: //控制4台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
IF Level >= ContLevel2 THEN //满足启动液位
IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
Run2 := TRUE; //打开电机2
END_IF
END_IF
IF Level >= ContLevel3 THEN //满足启动液位
IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
Run3 := TRUE; //打开电机3
END_IF
END_IF
IF Level >= ContLevel4 THEN //满足启动液位
IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
Run4 := TRUE; //打开电机4
END_IF
END_IF
5: //控制5台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
IF Level >= ContLevel2 THEN //满足启动液位
IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
Run2 := TRUE; //打开电机2
END_IF
END_IF
IF Level >= ContLevel3 THEN //满足启动液位
IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
Run3 := TRUE; //打开电机3
END_IF
END_IF
IF Level >= ContLevel4 THEN //满足启动液位
IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
Run4 := TRUE; //打开电机4
END_IF
END_IF
IF Level >= ContLevel5 THEN //满足启动液位
IF Auto5 = TRUE AND Able5 = TRUE AND Fault5 = FALSE THEN //自动模式且允许控制且无故障
Run5 := TRUE; //打开电机5
END_IF
END_IF
6: //控制6台电机
IF Level >= ContLevel1 THEN //满足启动液位
IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
Run1 := TRUE; //打开电机1
END_IF
END_IF
IF Level >= ContLevel2 THEN //满足启动液位
IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
Run2 := TRUE; //打开电机2
END_IF
END_IF
IF Level >= ContLevel3 THEN //满足启动液位
IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
Run3 := TRUE; //打开电机3
END_IF
END_IF
IF Level >= ContLevel4 THEN //满足启动液位
IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
Run4 := TRUE; //打开电机4
END_IF
END_IF
IF Level >= ContLevel5 THEN //满足启动液位
IF Auto5 = TRUE AND Able5 = TRUE AND Fault5 = FALSE THEN //自动模式且允许控制且无故障
Run5 := TRUE; //打开电机5
END_IF
END_IF
IF Level >= ContLevel6 THEN //满足启动液位
IF Auto6 = TRUE AND Able6 = TRUE AND Fault6 = FALSE THEN //自动模式且允许控制且无故障
Run6 := TRUE; //打开电机6
END_IF
END_IF
END_CASE
END_FUNCTION_BLOCK |