// 初始化函数
INIT
FOR i := 1 TO 10 DO
FloorButtons[i] := FALSE;
END_FOR
Direction := 0;
CurrentStatus := 0;
END_INIT
// 处理楼层按钮输入
FOR i := 1 TO 10 DO
IF FloorButtons[i] THEN // 如果有人按下了电梯按钮
IF i > CurrentFloor THEN // 如果目标楼层在当前楼层下方
TargetFloor := i;
Direction := 1; // 向上运行
ELSEIF i < CurrentFloor THEN // 如果目标楼层在当前楼层上方
TargetFloor := i;
Direction := 2; // 向下运行
ELSE // 如果目标楼层就在当前楼层
DoorOpen := TRUE; // 开门让乘客进入电梯
CurrentStatus := 2; // 进入开门状态
END_IF
END_IF
END_FOR
// 处理目标楼层输入
IF TargetFloor > CurrentFloor THEN
Direction := 1;
ELSEIF TargetFloor < CurrentFloor THEN
Direction := 2;
ELSE
DoorOpen := TRUE; // 开门让乘客出电梯
CurrentStatus := 2; // 进入开门状态
END_IF
CASE CurrentStatus OF
0: // 停止状态
MotorUp := FALSE;
MotorDown := FALSE;
DoorOpen := FALSE;
DoorClose := FALSE;
IF IsOpen THEN
CurrentStatus := 2; // 进入开门状态
END_IF
IF Direction <> 0 THEN
CurrentStatus := 1; // 进入运行状态
END_IF
1: // 运行状态
IF Direction = 1 THEN
MotorUp := TRUE;
MotorDown := FALSE;
ELSEIF Direction = 2 THEN
MotorUp := FALSE;
MotorDown := TRUE;
ELSE
CurrentStatus := 0; // 进入停止状态
END_IF
IF TargetFloor = CurrentFloor THEN
CurrentStatus := 2; // 进入开门状态
END_IF
2: // 开门状态
DoorOpen := TRUE;
DoorClose := FALSE;
IF NOT IsOpen THEN
CurrentStatus := 3; // 进入关门状态
END_IF
3: // 关门状态
DoorOpen := FALSE;
DoorClose := TRUE;
IF IsOpen THEN
CurrentStatus := 2; // 进入开门状态
ELSEIF Direction <> 0 THEN
CurrentStatus := 1; // 进入运行状态
END_IF
END_CASE
END_FUNCTION_BLOCK[/code]