程序如下:
//声明变量
VAR
//用于保存洗涤选择、洗衣时间、清洗选择、脱水时间的编码
washMode:BYTE:=0;
washTime:BYTE:=4; //默认为12分钟
washClean:BYTE:=0;
spinTime:BYTE:=0;
//用于保存当前是否为洗涤状态和是否为暂停状态的标志
isWashing:BOOL:=FALSE;
isPaused:BOOL:=FALSE;
END_VAR
//主程序
IF NOT isPaused THEN //如果不是暂停状态
IF NOT isWashing THEN //如果不是洗涤状态
//更新洗涤模式、时间、清洗、脱水时间以及相应编码的指示灯
washMode:=I8.2 + I8.3 * 2#10 + I8.4 *2#100 + I8.5 * 2#1000;
IF I8.3 THEN //如果按下洗衣时间按钮
CASE washTime OF //根据现有的洗衣时间进行循环选择
1:washTime:=4;
4:washTime:=3;
3:washTime:=2;
2:washTime:=1;
END_CASE
END_IF
washClean:=I8.4 + I8.5 * 2#10;
spinTime:=I8.5 + I8.6 * 2#10 + I8.7 * 2#100;
//更新数码管显示
IF spinTime > 0 THEN //如果在脱水状态
DINT_TO_INT(spinTime,IN_OUT := ((I8.1 * 2#1000) + (I8.0 * 2#100) + (I13 * 2#10) + I10),MIN_VAL := 0,MAX_VAL := 99);
ELSE //不在脱水状态下,则更新洗衣时间的数码管显示
DINT_TO_INT(washTime * 3,IN_OUT := ((I8.1 * 2#1000) + (I8.0 * 2#100) + (I13 * 2#10) + I10),MIN_VAL := 0,MAX_VAL := 99);
END_IF
//控制进水和排水阀门
IF isWashing AND (I0.1 = FALSE) THEN //如果正在洗涤,并且水位已经达到高位,就要开始排水
Q0.6:=TRUE;
Q0.5:=FALSE;
ELSEIF (NOT isWashing) AND (I0.1 = TRUE) THEN //如果不在洗涤状态,但是水位仍然在高位,说明正在排水
Q0.5:=TRUE;
Q0.6:=FALSE;
ELSE //否则就要继续进水
Q0.5:=TRUE;
Q0.6:=FALSE;
END_IF
//控制电机正转、反转和停转
IF (isWashing OR spinTime > 0) AND (spinTime < 255) THEN //如果在洗涤或脱水状态下
CASE washMode OF //根据洗涤模式进行控制
0: //默认情况下,不执行任何洗涤动作
Q1.0:=FALSE;
Q1.1:=FALSE;
1: //牛仔模式
IF I0.1 THEN //如果水位到了高位
Q1.0:=TRUE;
Q1.1:=FALSE;
spinTime:=20;
END_IF
2: //标准模式
IF I0.1 THEN //如果水位到了高位
Q1.0:=TRUE;
Q1.1:=FALSE;
spinTime:=15;
END_IF
3: //轻柔模式
IF I0.1 THEN //如果水位到了高位
Q1.0:=TRUE;
Q1.1:=FALSE;
spinTime:=10;
END_IF
4: //羊毛模式
IF I0.1 THEN //如果水位到了高位
Q1.0:=TRUE;
Q1.1:=FALSE;
spinTime:=5;
END_IF
END_CASE
ELSE //不在洗涤或脱水状态下
Q1.0:=FALSE;
Q1.1:=FALSE;
END_IF
END_IF
//控制洗衣机门电机
IF NOT Q1.0 AND NOT Q1.1 THEN //如果电机没有运行
IF I0.0 THEN //如果开门按钮被按下,则停止电机的运行,并且将isPaused标志设置为TRUE
Q0.4:=FALSE;
isPaused:=TRUE;
END_IF
ELSE //电机正在运行
IF I0.0 THEN //如果开门键被按下,则停止电机的运行,并且将isWashing标志设置为FALSE
Q1.0:=FALSE;
Q1.1:=FALSE;
isWashing:=FALSE;
Q0.4:=FALSE;
END_IF
END_IF
//控制启动/暂停的按钮
IF NOT isWashing AND NOT isPaused THEN //如果不在洗涤状态也不在暂停状态下,可以按启动键开始洗涤程序
IF I8.7 THEN //如果启动键被按下,就开始洗涤程序,并将isWashing标志设置为TRUE
isWashing:=TRUE;
Q0.4:=TRUE;
END_IF
ELSEIF isWashing AND NOT isPaused THEN //如果正在洗涤,可以按暂停键暂停
IF I8.7 THEN //如果暂停键被按下,就暂停洗涤程序,并将isPaused标志设置为TRUE
isPaused:=TRUE;
Q0.4:=FALSE;
END_IF
ELSEIF NOT isWashing AND isPaused THEN //如果处于暂停状态,可以按启动键继续洗涤程序
IF I8.7 THEN //如果启动键被按下,就继续洗涤程序,并将isPaused标志设置为FALSE
isPaused:=FALSE;
Q0.4:=TRUE;
END_IF
END_IF
END_IF
//控制清洗选择的指示灯
CASE washClean OF //根据当前清洗选择进行控制
0:Q0.1:=FALSE;Q0.2:=FALSE;
1:Q0.1:=TRUE;Q0.2:=FALSE;
2:Q0.1:=FALSE;Q0.2:=TRUE;
END_CASE
//控制洗衣时间的指示灯
CASE washTime OF //根据当前洗衣时间进行控制
1:Q0.3:=TRUE;Q0.4:=FALSE;Q0.5:=FALSE;Q0.6:=FALSE;
2:Q0.3:=FALSE;Q0.4:=TRUE;Q0.5:=FALSE;Q0.6:=FALSE;
3:Q0.3:=FALSE;Q0.4:=FALSE;Q0.5:=TRUE;Q0.6:=FALSE;
4:Q0.3:=FALSE;Q0.4:=FALSE;Q0.5:=FALSE;Q0.6:=TRUE;
END_CASE
//控制洗涤模式的指示灯
CASE washMode OF //根据当前洗涤模式进行控制
1:Q0.7:=TRUE;Q0.0:=FALSE;Q0.1:=FALSE;Q0.2:=FALSE;
2:Q0.7:=FALSE;Q0.0:=TRUE;Q0.1:=FALSE;Q0.2:=FALSE;
3:Q0.7:=TRUE;Q0.0:=TRUE;Q0.1:=FALSE;Q0.2:=FALSE;
4:Q0.7:=FALSE;Q0.0:=FALSE;Q0.1:=TRUE;Q0.2:=FALSE;
END_CASE
//控制脱水时间的指示灯
CASE spinTime OF //根据当前脱水时间进行控制
1:Q8.0:=TRUE;Q8.1:=FALSE;Q8.2:=FALSE;
3:Q8.0:=FALSE;Q8.1:=TRUE;Q8.2:=FALSE;
5:Q8.0:=FALSE;Q8.1:=FALSE;Q8.2:=TRUE;
ELSE //如果不在脱水状态下 |