• «
  • 1
  • 2
  • »
  • Pages: 2/2     Go
gmajyqi
只有想不到的,没有做不到的gmaiyqi@163.com
级别: 略有小成
精华主题: 0
发帖数量: 105 个
工控威望: 325 点
下载积分: 1940 分
在线时间: 103(小时)
注册时间: 2007-03-28
最后登录: 2026-01-21
查看gmajyqi的 主题 / 回贴
12楼  发表于: 15天前
以下程序只是一个基本框架,实际应用中需要根据具体的PLC型号、输入输出地址分配、供水时间要求等进行调整和完善。同时,还可以考虑添加故障报警、手动控制等功能以增强系统的实用性和可靠性。编程思路

1. 定义输入输出:将每个电磁阀的状态(开/关)连接到PLC的输入点,用于判断管路是否关闭。将控制电磁阀的输出信号连接到PLC的输出点,以控制电磁阀的通断。

2. 设置状态变量:使用中间继电器或数据寄存器来记录当前的供水组合状态以及管路的关闭状态。

3. 状态判断与跳转:在程序中不断检查当前要供水的两路管路是否关闭。如果有管路关闭,则跳过该组合,寻找下一个有效的供水组合,同时要保证始终有两路给水。

4. 循环控制:当遍历完所有可能的供水组合后,重新回到初始状态,实现循环供水。

示例程序(以三菱FX系列PLC梯形图为例)

假设X0-X6分别对应7条管道是否关闭的输入信号(X0对应1号管道,X1对应2号管道,以此类推,X为ON表示管道关闭),Y0-Y6分别对应7个电磁阀的输出信号(Y0控制1号电磁阀,Y1控制2号电磁阀,以此类推)。
// 初始化状态,假设初始从1、2号供水开始
M0 = ON;  // M0作为当前状态标志,初始为1、2号供水状态

// 主循环
LOOP:
    // 判断1、2号供水状态
    IF (M0 AND NOT X0 AND NOT X1) THEN
        Y0 = ON;  // 打开1号电磁阀
        Y1 = ON;  // 打开2号电磁阀
        // 延时供水时间(假设T0为定时器,定时时间根据实际需求设置)
        T0 = START;
        WHILE (NOT T0.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y0 = OFF;
        Y1 = OFF;
        M1 = ON;  // 切换到2、3号供水状态
        M0 = OFF;
    ELSEIF (M0 AND (X0 OR X1)) THEN
        M1 = ON;  // 若1或2号管道关闭,直接切换到2、3号供水状态
        M0 = OFF;
    END IF;

    // 判断2、3号供水状态
    IF (M1 AND NOT X1 AND NOT X2) THEN
        Y1 = ON;
        Y2 = ON;
        T1 = START;
        WHILE (NOT T1.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y1 = OFF;
        Y2 = OFF;
        M2 = ON;  // 切换到3、4号供水状态
        M1 = OFF;
    ELSEIF (M1 AND (X1 OR X2)) THEN
        M2 = ON;  // 若2或3号管道关闭,直接切换到3、4号供水状态
        M1 = OFF;
    END IF;

    // 依次类推,判断3、4号;4、5号;5、6号;6、7号;7、1号供水状态,逻辑同上述
    // 判断3、4号供水状态
    IF (M2 AND NOT X2 AND NOT X3) THEN
        Y2 = ON;
        Y3 = ON;
        T2 = START;
        WHILE (NOT T2.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y2 = OFF;
        Y3 = OFF;
        M3 = ON;  // 切换到4、5号供水状态
        M2 = OFF;
    ELSEIF (M2 AND (X2 OR X3)) THEN
        M3 = ON;  // 若3或4号管道关闭,直接切换到4、5号供水状态
        M2 = OFF;
    END IF;

    // 判断4、5号供水状态
    IF (M3 AND NOT X3 AND NOT X4) THEN
        Y3 = ON;
        Y4 = ON;
        T3 = START;
        WHILE (NOT T3.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y3 = OFF;
        Y4 = OFF;
        M4 = ON;  // 切换到5、6号供水状态
        M3 = OFF;
    ELSEIF (M3 AND (X3 OR X4)) THEN
        M4 = ON;  // 若4或5号管道关闭,直接切换到5、6号供水状态
        M3 = OFF;
    END IF;

    // 判断5、6号供水状态
    IF (M4 AND NOT X4 AND NOT X5) THEN
        Y4 = ON;
        Y5 = ON;
        T4 = START;
        WHILE (NOT T4.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y4 = OFF;
        Y5 = OFF;
        M5 = ON;  // 切换到6、7号供水状态
        M4 = OFF;
    ELSEIF (M4 AND (X4 OR X5)) THEN
        M5 = ON;  // 若5或6号管道关闭,直接切换到6、7号供水状态
        M4 = OFF;
    END IF;

    // 判断6、7号供水状态
    IF (M5 AND NOT X5 AND NOT X6) THEN
        Y5 = ON;
        Y6 = ON;
        T5 = START;
        WHILE (NOT T5.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y5 = OFF;
        Y6 = OFF;
        M6 = ON;  // 切换到7、1号供水状态
        M5 = OFF;
    ELSEIF (M5 AND (X5 OR X6)) THEN
        M6 = ON;  // 若6或7号管道关闭,直接切换到7、1号供水状态
        M5 = OFF;
    END IF;

    // 判断7、1号供水状态
    IF (M6 AND NOT X6 AND NOT X0) THEN
        Y6 = ON;
        Y0 = ON;
        T6 = START;
        WHILE (NOT T6.DONE) DO
            // 等待供水时间结束
        END WHILE;
        Y6 = OFF;
        Y0 = OFF;
        M0 = ON;  // 切换回1、2号供水状态
        M6 = OFF;
    ELSEIF (M6 AND (X6 OR X0)) THEN
        M0 = ON;  // 若7或1号管道关闭,直接切换回1、2号供水状态
        M6 = OFF;
    END IF;

    // 跳转到循环开始处
    GOTO LOOP;
只有想不到的,没有做不到的
ljb6688
级别: 工控侠客
精华主题: 0
发帖数量: 1923 个
工控威望: 2102 点
下载积分: 120088 分
在线时间: 2182(小时)
注册时间: 2009-12-08
最后登录: 2026-02-04
查看ljb6688的 主题 / 回贴
13楼  发表于: 15天前
引用
引用第8楼梦雨天涯于2026-01-21 10:32发表的  :
FX5U做的   

大佬,讲下编程思路呢。
电气自动化,智能化控制,数据远传采集。工控元件代理,机器人附件    
zhengtiguo
上善若水
级别: 家园常客
精华主题: 0
发帖数量: 581 个
工控威望: 636 点
下载积分: 5011 分
在线时间: 137(小时)
注册时间: 2025-05-29
最后登录: 2026-02-04
查看zhengtiguo的 主题 / 回贴
14楼  发表于: 15天前
排队
深耕技术
卓发智能
相互学习,共同进步。
级别: 工控侠客
精华主题: 0
发帖数量: 2503 个
工控威望: 3165 点
下载积分: 13384 分
在线时间: 686(小时)
注册时间: 2008-08-03
最后登录: 2026-01-26
查看卓发智能的 主题 / 回贴
15楼  发表于: 15天前
// 系统启停逻辑
V_CycleFlag := I_Start AND NOT I_Stop;

// 定时器触发:当前状态供水时长到,触发状态跳转
V_Timer(IN:=V_CycleFlag, PT:=T#10S); // 设定每组供水10秒,可修改

// 状态跳转逻辑:定时器到或当前状态无效,切换下一个状态
IF V_Timer.Q OR NOT (I_PipeEn[V_CurrentState+1] AND I_PipeEn[IF V_CurrentState=6 THEN 1 ELSE V_CurrentState+2]) THEN
    V_CurrentState := V_CurrentState + 1;
    IF V_CurrentState >=7 THEN
        V_CurrentState := 0; // 状态循环:6→0
    END_IF;
    V_Timer(IN:=FALSE); // 定时器复位
END_IF;

// 电磁阀输出逻辑:根据当前状态,输出对应两路电磁阀
// 先复位所有电磁阀
FOR i:=1 TO 7 DO
    Q_Solenoid := FALSE;
END_FOR;

// 按状态输出两路电磁阀(需两路均使能)
IF V_CycleFlag THEN
    CASE V_CurrentState OF
        0: // 状态0:1-2路供水
            IF I_PipeEn[1] AND I_PipeEn[2] THEN
                Q_Solenoid[1]:=TRUE; Q_Solenoid[2]:=TRUE;
            END_IF;
        1: // 状态1:2-3路供水
            IF I_PipeEn[2] AND I_PipeEn[3] THEN
                Q_Solenoid[2]:=TRUE; Q_Solenoid[3]:=TRUE;
            END_IF;
        2: // 状态2:3-4路供水
            IF I_PipeEn[3] AND I_PipeEn[4] THEN
                Q_Solenoid[3]:=TRUE; Q_Solenoid[4]:=TRUE;
            END_IF;
        3: // 状态3:4-5路供水
            IF I_PipeEn[4] AND I_PipeEn[5] THEN
                Q_Solenoid[4]:=TRUE; Q_Solenoid[5]:=TRUE;
            END_IF;
        4: // 状态4:5-6路供水
            IF I_PipeEn[5] AND I_PipeEn[6] THEN
                Q_Solenoid[5]:=TRUE; Q_Solenoid[6]:=TRUE;
            END_IF;
        5: // 状态5:6-7路供水
            IF I_PipeEn[6] AND I_PipeEn[7] THEN
                Q_Solenoid[6]:=TRUE; Q_Solenoid[7]:=TRUE;
            END_IF;
        6: // 状态6:7-1路供水
            IF I_PipeEn[7] AND I_PipeEn[1] THEN
                Q_Solenoid[7]:=TRUE; Q_Solenoid[1]:=TRUE;
            END_IF;
    END_CASE;
END_IF;
相信自我!
奋斗人生
级别: 家园常客
精华主题: 0
发帖数量: 580 个
工控威望: 750 点
下载积分: 10859 分
在线时间: 69(小时)
注册时间: 2011-09-05
最后登录: 2026-02-04
查看奋斗人生的 主题 / 回贴
16楼  发表于: 15天前
引用
引用第8楼梦雨天涯于2026-01-21 10:32发表的  :
FX5U做的   

可以
乌喽牛
级别: 家园常客
精华主题: 0
发帖数量: 820 个
工控威望: 958 点
下载积分: 2248 分
在线时间: 266(小时)
注册时间: 2020-06-10
最后登录: 2026-02-04
查看乌喽牛的 主题 / 回贴
17楼  发表于: 15天前
围观,挺有意思
胡三001
级别: 正式会员
精华主题: 0
发帖数量: 35 个
工控威望: 64 点
下载积分: 382 分
在线时间: 28(小时)
注册时间: 2023-09-14
最后登录: 2026-02-04
查看胡三001的 主题 / 回贴
18楼  发表于: 14天前
感觉写起来有点绕啊 !
uthman
QQ:3749615
级别: 家园常客
精华主题: 1 篇
发帖数量: 398 个
工控威望: 827 点
下载积分: 2723 分
在线时间: 799(小时)
注册时间: 2007-10-25
最后登录: 2026-02-03
查看uthman的 主题 / 回贴
19楼  发表于: 14天前
雪山飞狐
级别: 网络英雄

精华主题: 0
发帖数量: 16306 个
工控威望: 17389 点
下载积分: 57971 分
在线时间: 1158(小时)
注册时间: 2019-06-05
最后登录: 2026-02-04
查看雪山飞狐的 主题 / 回贴
20楼  发表于: 13天前
努力学习编程方法
wudilaolu007
非标行业10年经验,对汽车行业接触颇深
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 104 点
下载积分: 699 分
在线时间: 12(小时)
注册时间: 2017-01-05
最后登录: 2026-02-03
查看wudilaolu007的 主题 / 回贴
21楼  发表于: 3天前
引用
引用第12楼gmajyqi于2026-01-21 13:44发表的  :
以下程序只是一个基本框架,实际应用中需要根据具体的PLC型号、输入输出地址分配、供水时间要求等进行调整和完善。同时,还可以考虑添加故障报警、手动控制等功能以增强系统的实用性和可靠性。编程思路

1. 定义输入输出:将每个电磁阀的状态(开/关)连接到PLC的输入点,用于判断管路是否关闭。将控制电磁阀的输出信号连接到PLC的输出点,以控制电磁阀的通断。

2. 设置状态变量:使用中间继电器或数据寄存器来记录当前的供水组合状态以及管路的关闭状态。
.......

意思是以后不要来论坛了,去问AI就行了?
payfsl
级别: 工控侠客
精华主题: 2 篇
发帖数量: 2637 个
工控威望: 2921 点
下载积分: 40175 分
在线时间: 492(小时)
注册时间: 2010-08-03
最后登录: 2026-02-04
查看payfsl的 主题 / 回贴
22楼  发表于: 昨天
用三菱 ST 语言实现 7 个电磁阀的循环联动供水逻辑,核心要求是:按「1-2→2-3→…→7-1→1-2」的顺序循环,任意时刻保持两路供水,且能自动跳过关闭的管路(电磁阀),同时保证始终有两路有效电磁阀工作。 下面我将提供可直接在三菱 PLC(支持 ST 语言,如 FX5U、Q 系列)中运行的代码,全程使用中文变量,附带逻辑说明和使用注意事项。
一、整体设计思路
1. 定义 7 个电磁阀的状态变量(是否开启、是否故障 / 关闭禁用),中文命名保证可读性。
2. 定义当前供水的「前一路」和「后一路」电磁阀编号,确保任意时刻两路联动。
3. 设计「有效下一步」查找逻辑:当目标管路(电磁阀)关闭时,自动顺延查找下一个可用电磁阀,保证始终有两路有效供水。
4. 设计循环切换逻辑,包含切换延时(可配置,避免切换过快),支持循环往复运行。
5. 增加启停控制,方便实际现场操作。
二、三菱 ST 语言完整代码
(* ==============================================
   7电磁阀循环联动供水程序(三菱ST语言)
   核心功能:循环切换、跳过关闭管路、始终保持两路供水
   适用PLC:FX5U、Q系列(支持ST语言)
============================================== *)

(* ---------------------- 第一步:全局变量定义(可放入DB块或全局变量表) ---------------------- *)
(* 1. 电磁阀状态变量(BOOL型:TRUE=开启/可用,FALSE=关闭/禁用/故障) *)
VAR_GLOBAL
    (* 7个电磁阀的启用状态(FALSE=管路关闭,需跳过;TRUE=管路可用,可供水) *)
    电磁阀1启用 : BOOL := TRUE;
    电磁阀2启用 : BOOL := TRUE;
    电磁阀3启用 : BOOL := TRUE;
    电磁阀4启用 : BOOL := TRUE;
    电磁阀5启用 : BOOL := TRUE;
    电磁阀6启用 : BOOL := TRUE;
    电磁阀7启用 : BOOL := TRUE;
    
    (* 7个电磁阀的输出控制(TRUE=通电供水,FALSE=断电停止) *)
    电磁阀1输出 : BOOL := FALSE;
    电磁阀2输出 : BOOL := FALSE;
    电磁阀3输出 : BOOL := FALSE;
    电磁阀4输出 : BOOL := FALSE;
    电磁阀5输出 : BOOL := FALSE;
    电磁阀6输出 : BOOL := FALSE;
    电磁阀7输出 : BOOL := FALSE;
    
    (* 控制类变量 *)
    系统运行标志 : BOOL := FALSE;  (* 系统启停开关:TRUE=运行,FALSE=停止(可关联外部按钮) *)
    切换延时时间 : INT := 5000;   (* 供水切换延时(单位:ms),可根据现场需求修改(如5000=5秒) *)
    切换延时定时器 : TON;         (* 切换延时定时器(三菱ST内置TON指令) *)
    
    (* 逻辑状态变量 *)
    当前前电磁阀编号 : INT := 1;  (* 当前供水的前一个电磁阀编号(1-7) *)
    当前后电磁阀编号 : INT := 2;  (* 当前供水的后一个电磁阀编号(1-7),与前一个联动 *)
END_VAR

(* ---------------------- 第二步:核心逻辑实现 ---------------------- *)
(* 1. 系统停止时的复位逻辑 *)
IF NOT 系统运行标志 THEN
    (* 停止所有电磁阀输出 *)
    电磁阀1输出 := FALSE;
    电磁阀2输出 := FALSE;
    电磁阀3输出 := FALSE;
    电磁阀4输出 := FALSE;
    电磁阀5输出 := FALSE;
    电磁阀6输出 := FALSE;
    电磁阀7输出 := FALSE;
    
    (* 复位定时器和状态变量 *)
    切换延时定时器(IN := FALSE, PT := 0);
    当前前电磁阀编号 := 1;
    当前后电磁阀编号 := 2;
END_IF;

(* 2. 系统运行时的核心循环逻辑 *)
IF 系统运行标志 THEN
    (* 2.1 先执行当前有效电磁阀的输出控制(保证两路供水) *)
    (* 根据当前编号,开启对应的两路电磁阀(仅启用状态为TRUE的才输出) *)
    CASE 当前前电磁阀编号 OF
        1: 电磁阀1输出 := 电磁阀1启用;
        2: 电磁阀2输出 := 电磁阀2启用;
        3: 电磁阀3输出 := 电磁阀3启用;
        4: 电磁阀4输出 := 电磁阀4启用;
        5: 电磁阀5输出 := 电磁阀5启用;
        6: 电磁阀6输出 := 电磁阀6启用;
        7: 电磁阀7输出 := 电磁阀7启用;
    END_CASE;
    
    CASE 当前后电磁阀编号 OF
        1: 电磁阀1输出 := 电磁阀1启用;
        2: 电磁阀2输出 := 电磁阀2启用;
        3: 电磁阀3输出 := 电磁阀3启用;
        4: 电磁阀4输出 := 电磁阀4启用;
        5: 电磁阀5输出 := 电磁阀5启用;
        6: 电磁阀6输出 := 电磁阀6启用;
        7: 电磁阀7输出 := 电磁阀7启用;
    END_CASE;
    
    (* 2.2 启动切换延时定时器(达到延时后进行下一步切换) *)
    切换延时定时器(IN := TRUE, PT := 切换延时时间);
    
    (* 2.3 延时到达后,查找下一组有效电磁阀并更新状态 *)
    IF 切换延时定时器.Q THEN
        (* 定义临时变量,用于查找下一组有效电磁阀 *)
        VAR_TEMP
            临时下一个前编号 : INT;
            临时下一个后编号 : INT;
            查找计数器 : INT;  (* 防止死循环,最多查找7次(对应7个电磁阀) *)
        END_VAR
        
        (* 初始化临时变量和查找计数器 *)
        临时下一个前编号 := 当前前电磁阀编号 + 1;
        临时下一个后编号 := 当前后电磁阀编号 + 1;
        查找计数器 := 0;
        
        (* 循环查找:直到找到两组都启用的电磁阀,或查找完7次(保证循环) *)
        REPEAT
            (* 编号越界处理(7之后回到1,实现循环) *)
            IF 临时下一个前编号 > 7 THEN
                临时下一个前编号 := 1;
            END_IF;
            IF 临时下一个后编号 > 7 THEN
                临时下一个后编号 := 1;
            END_IF;
            
            (* 判断当前临时编号对应的电磁阀是否都启用(核心:跳过关闭管路) *)
            (* 先获取临时编号对应的启用状态 *)
            VAR_TEMP
                临时前启用 : BOOL;
                临时后启用 : BOOL;
            END_VAR
            
            (* 赋值临时前电磁阀启用状态 *)
            CASE 临时下一个前编号 OF
                1: 临时前启用 := 电磁阀1启用;
                2: 临时前启用 := 电磁阀2启用;
                3: 临时前启用 := 电磁阀3启用;
                4: 临时前启用 := 电磁阀4启用;
                5: 临时前启用 := 电磁阀5启用;
                6: 临时前启用 := 电磁阀6启用;
                7: 临时前启用 := 电磁阀7启用;
            END_CASE;
            
            (* 赋值临时后电磁阀启用状态 *)
            CASE 临时下一个后编号 OF
                1: 临时后启用 := 电磁阀1启用;
                2: 临时后启用 := 电磁阀2启用;
                3: 临时后启用 := 电磁阀3启用;
                4: 临时后启用 := 电磁阀4启用;
                5: 临时后启用 := 电磁阀5启用;
                6: 临时后启用 := 电磁阀6启用;
                7: 临时后启用 := 电磁阀7启用;
            END_CASE;
            
            (* 如果当前临时组合都启用,或查找次数达7次(强制循环,避免卡死),则退出查找 *)
            IF (临时前启用 AND 临时后启用) OR (查找计数器 >= 7) THEN
                EXIT;
            ELSE
                (* 否则,顺延查找下一个组合 *)
                临时下一个前编号 := 临时下一个前编号 + 1;
                临时下一个后编号 := 临时下一个后编号 + 1;
                查找计数器 := 查找计数器 + 1;
            END_IF;
        UNTIL (临时前启用 AND 临时后启用) OR (查找计数器 >= 7)
        END_REPEAT;
        
        (* 2.4 更新当前电磁阀编号为找到的有效组合 *)
        当前前电磁阀编号 := 临时下一个前编号;
        当前后电磁阀编号 := 临时下一个后编号;
        
        (* 2.5 复位定时器,准备下一次延时 *)
        切换延时定时器(IN := FALSE, PT := 0);
    END_IF;
END_IF;
三、代码关键部分解释
1.  变量定义部分 ◦ 「电磁阀 X 启用」:用于标记管路是否可用(可关联外部故障信号、手动关闭开关),FALSE则跳过该管路。 ◦ 「电磁阀 X 输出」:直接关联 PLC 的输出点(Y 点),控制电磁阀物理通电。 ◦ 「切换延时时间」:可根据现场需求修改,比如改为 10000(10 秒),避免供水切换过快导致水压波动。 ◦ 「切换延时定时器」:使用三菱 ST 内置的TON(通电延时定时器),IN为启动信号,PT为延时时间,Q为延时到位输出。  
2.  系统停止复位逻辑 ◦ 停止时直接关闭所有电磁阀输出,复位状态变量和定时器,保证下次启动从初始状态(1-2)开始。  
3.  有效电磁阀输出控制 ◦ 使用CASE语句根据当前编号匹配对应的电磁阀,仅当「启用状态」为TRUE时才输出TRUE,避免向关闭的管路供水。  
4.  跳过关闭管路的核心查找逻辑 ◦ 采用REPEAT...UNTIL循环查找下一组有效组合,顺延编号并处理越界(7→1),保证循环性。 ◦ 增加「查找计数器」(最多 7 次),防止所有电磁阀都关闭时出现死循环,提升程序健壮性。 ◦ 仅当两组电磁阀都启用时,才更新当前编号,确保任意时刻有两路有效供水。  
5.  循环切换逻辑 ◦ 延时到位后更新编号,然后复位定时器,进入下一个延时周期,实现「1-2→2-3→…→7-1→1-2」的无限循环。    
四、实际运行注意事项
1.  PLC 硬件关联 ◦ 将「电磁阀 X 输出」变量关联到 PLC 的实际输出点(Y 点),例如电磁阀1输出对应Y0,电磁阀2输出对应Y1,以此类推。 ◦ 将「系统运行标志」关联到外部启动按钮(X 点),例如X0为启动,X1为停止(可增加互锁逻辑)。 ◦ 将「电磁阀 X 启用」可关联外部故障检测信号(如压力开关、行程开关),或手动选择开关(X 点),实现管路关闭的自动识别。  
2.  参数调整 ◦ 「切换延时时间」根据现场供水需求调整,单位为ms(三菱 ST 中TON的PT参数,FX5U/Q 系列支持 ms 级延时)。 ◦ 若需加快切换速度,可减小该值(如 1000=1 秒);若需稳定供水,可增大该值(如 30000=30 秒)。  
3.  容错性补充 ◦ 若现场可能出现「超过 2 个电磁阀关闭」的情况,当前代码已能自动顺延跳过,无需额外修改。 ◦ 若需增加「电磁阀故障报警」,可在「电磁阀 X 启用」为FALSE时,触发对应的报警输出(如Y10)。  
4.  三菱 PLC 兼容性 ◦ 该代码使用标准 ST 语言,兼容FX5U(需升级到最新固件)、Q 系列(Q03UDE 及以上),直接导入 PLC 的程序块即可运行。 ◦ 若使用 FX3U(仅支持部分 ST 语言),需将TON定时器改为传统的T定时器(如T0),并调整延时参数(单位为 100ms,如 50=5 秒)。    
五、运行效果示例
1. 正常情况(所有电磁阀启用):按「1-2→2-3→3-4→…→7-1→1-2」循环,每 5 秒切换一次,始终两路供水。
2. 异常情况(电磁阀 3 关闭):切换到「2-3」时,检测到 3 禁用,自动顺延查找「3-4」→「4-5」,直接切换到「4-5」,跳过关闭的 3,保持两路供水。
3. 系统停止:所有电磁阀断电,复位初始状态,再次启动从「1-2」开始(若 1-2 可用)。 
 总结
1. 核心逻辑通过「编号顺延 + 循环查找」实现关闭管路的跳过,保证任意时刻两路有效供水。
2. 中文变量命名贴合现场需求,直接关联 PLC 硬件即可实际运行,无需复杂修改。
3. 程序包含复位、延时、容错等功能,满足工业现场的稳定性要求,兼容三菱主流 PLC 型号。如何在代码中添加故障诊断功能? 如何优化代码以提高运行效率? 如何将代码移植到其他型号的三菱PLC上?
三人行必有我师焉,择其善者而从之 ,学而不思则罔,思而不学则殆
  • «
  • 1
  • 2
  • »
  • Pages: 2/2     Go