这种用西门子plc怎么写?

img


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