
21控制要求如下
系统开始运行时,要确定系统处于初始标态,如果处于初始状态,显示屏显示数字“000”,系统可以启动进行工作。
(1)按下启动按钮及水位选择开关开始进水,进水时显示屏显示数字“118”不倒计时直到高水位停止进水并开始洗涤。
(2)洗涤时,开始倒计时,正转15秒后暂停,暂停3秒后,然后开始反转洗涤15秒,然后暂停3秒。
(3)循环3次共108秒后开始排水,排水不倒计时,排到低水位脱水10秒
(4)开始清洗,重复(1)-(3)洗涤3遍。
(5)整个过程显示屏跟随倒计时。
(6)清洗完成、报警10秒(不计入售计时)并自动停机。
(7) 按下停止按钮,可手动排水和手动脱水
// 定义变量
VAR
iCount : INT; // 倒计时时间,单位为秒
iState : INT; // 系统状态,0表示初始状态,1表示进水状态,2表示洗涤状态,3表示排水状态,4表示清洗状态
iCycle : INT; // 清洗循环次数,最多为3次
END_VAR
// 初始化
iCount := 0;
iState := 0;
iCycle := 0;
// 主程序
WHILE TRUE DO
// 判断系统状态
CASE iState OF
// 初始状态
0:
// 显示屏显示数字“000”
// 如果按下启动按钮及水位选择开关
IF (StartButton AND WaterLevelSwitch) THEN
// 进入进水状态
iState := 1;
// 显示屏显示数字“118”
// 不倒计时直到高水位停止进水并开始洗涤
END_IF
// 进水状态
1:
// 显示屏显示数字“118”
CountDown(0); // 不倒计时
// 如果高水位停止进水
IF HighWaterLevel THEN
// 进入洗涤状态
iState := 2;
// 倒计时15秒
iCount := 15;
END_IF
// 洗涤状态
2:
// 倒计时
CountDown(iCount);
// 如果倒计时时间到
IF (iCount = 0) THEN
// 如果正转
IF ForwardRotation THEN
// 暂停3秒
iCount := 3;
// 如果反转
ELSE
// 暂停3秒
iCount := 3;
// 如果循环次数不够
IF (iCycle < 2) THEN
// 进入下一个循环
iCycle := iCycle + 1;
// 进入进水状态
iState := 1;
// 显示屏显示数字“118”
// 不倒计时直到高水位停止进水并开始洗涤
// 如果循环次数够了
ELSE
// 进入排水状态
iState := 3;
// 排水不倒计时
END_IF
END_IF
END_IF
// 排水状态
3:
// 排水不倒计时
// 如果低水位脱水10秒
IF (LowWaterLevel AND (iCount >= 10)) THEN
// 进入清洗状态
iState := 4;
// 清洗循环次数加1
iCycle := iCycle + 1;
// 如果清洗循环次数不够
IF (iCycle < 3) THEN
// 进入进水状态
iState := 1;
// 显示屏显示数字“118”
// 不倒计时直到高水位停止进水并开始洗涤
// 如果清洗循环次数够了
ELSE
// 清洗完成,报警10秒并自动停机
// 倒计时10秒
iCount := 10;
END_IF
END_IF
// 清洗状态
4:
// 重复洗涤过程
iState := 2;
// 报警状态
5:
// 报警10秒
CountDown(iCount);
// 如果倒计时时间到
IF (iCount = 0) THEN
// 自动停机
iState := 6;
END_IF
// 停机状态
6:
// 如果按下停止按钮
IF StopButton THEN
// 手动排水和手动脱水
// 进入初始状态
iState := 0;
// 显示屏显示数字“000”
END_IF
END_CASE
END_WHILE