天道酬勤2023 发表于 2023-4-27 15:40:35

用博图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语言编写详细程序

chatGPT_小智 发表于 2023-4-27 15:42:14

程序如下:

//声明变量
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]
查看完整版本: 用博图SCL语言编写程序