用博图SCL语言编写程序
1、控制要求(1)总体程序控制序号 名称 功能要求 说明1 电源控制 电源开关按键控制循环开关机。 默认模式:洗涤选择:标准洗衣时间:6清洗选择:一清脱水时间:32 洗涤模式设定 打开电源在默认模式状态,在非洗涤状态下可进行模式设定。 3 洗涤控制 启动暂停按键控制洗衣机按照洗涤模式执行洗涤程序,暂停后保留现场运行参数。洗涤过程中,不能执行模式设定。 4 洗衣机开门控制 打开洗衣机门电机停止运行,保留现场运行参数。 (2)洗涤程序选择序号 名称 功能要求 说明1 牛仔 电机正转20秒,反转20秒,高水位时启动。 洗涤选择按键循环选择,对应指示灯亮,洗涤时对应指示灯亮。2 标准 电机正转15秒,反转15秒。高水位时启动。 3 轻柔 电机正转10秒,反转10秒。高水位时启动。 4 羊毛 电机正转5秒,反转5秒。高水位时启动。 (3)洗涤时间选择序号 名称 功能要求 说明1 12 电机持续运转时间6分钟。 洗涤时间选择按键循环选择,对应指示灯亮,洗涤时对应指示灯亮。2 9 电机持续运转时间5分钟。 3 6 电机持续运转时间4分钟。 4 3 电机持续运转时间3分钟。 (4)清洗选择序号 名称 功能要求 说明1 溢注 洗涤后排水 清洗选择按键循环选择,对应指示灯亮,清洗时对应指示灯亮。2 一清 洗涤后排水,再进水,执行1次清洗,清洗时间1分钟,正反转安洗涤选择程序执行,清洗完成后排水。 3 二清 洗涤后排水,再进水,执行1次清洗,清洗时间1分钟,正反转按洗涤选择程序执行,清洗完成后排水,再重复执行一遍清洗程序。 (5)脱水时间序号 名称 功能要求 说明1 5 电机持续运转时间5分钟,脱水时排水,时间到报警结束。 脱水时间选择按键循环选择,对应指示灯亮,洗涤时对应指示灯亮。2 3 电机持续运转时间3分钟,脱水时排水,时间到报警结束。 3 1 电机持续运转时间1分钟,脱水时排水,时间到报警结束。 (6)数码管控制序号 名称 显示要求 说明1 虚拟数码管 显示选定的脱水时间,单位分。 脱水完成时为0。2、I/O分配(1)开关量输入序号 名称 点号 对应端口1 洗衣机开门信号 I0.0 Q12 高水位信号 I0.1 Q23 低水位信号 I0.2 Q34 电源开关 I8.6 K65 启动/暂停 I8.7 K76 洗涤选择 I8.2 K07 洗衣时间 I8.3 K18 清洗选择 I8.4 K25 脱水选择 I8.5 K3(2)开关量输出序号 名称 点号 对应端口1 编码信号:1)洗涤选择:牛仔0000、标准0001、轻柔0010、羊毛00112)洗衣时间:3分钟0100、6分钟0101、9分钟0110、12分钟01113)清洗选择:溢注1000、一清1001、二清10104)脱水时间:1分钟1011、3分钟1100、5分钟1101 Q0.0 I12 Q0.1 I23 Q0.2 I34 Q0.3 I45 洗衣机内景显示 Q0.4 I56 进水阀 Q0.5 I77 出水阀 Q0.6 I88 正转 Q0.7 I99 反转 Q1.0 I1010 脱水 Q1.1 I1111 数码管个位:根据8421码,控制数码管显示0-9,IN13-IN10分别对应8、4、2、1。 Q8.0 I1212 Q8.1 I1313 Q8.2 I1414 Q8.3 I1515 数码管十位:根据8421码,控制数码管显示0-9,IN17-IN14分别对应8、4、2、1。 Q8.4 I1616 Q8.5 I1717 Q8.6 I1818 Q8.7 I19根据上述要求用博图的SCL语言编写详细程序
程序如下:
//声明变量
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 //如果不在脱水状态下
页:
[1]