• «
  • 1
  • 2
  • »
  • Pages: 2/2     Go
gmajyqi
只有想不到的,没有做不到的gmaiyqi@163.com
级别: 略有小成
精华主题: 0
发帖数量: 105 个
工控威望: 325 点
下载积分: 1940 分
在线时间: 103(小时)
注册时间: 2007-03-28
最后登录: 2026-01-21
查看gmajyqi的 主题 / 回贴
12楼  发表于: 前天
以下程序只是一个基本框架,实际应用中需要根据具体的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
发帖数量: 1921 个
工控威望: 2100 点
下载积分: 119909 分
在线时间: 2179(小时)
注册时间: 2009-12-08
最后登录: 2026-01-23
查看ljb6688的 主题 / 回贴
13楼  发表于: 前天
引用
引用第8楼梦雨天涯于2026-01-21 10:32发表的  :
FX5U做的   

大佬,讲下编程思路呢。
电气自动化,智能化控制,数据远传采集。工控元件代理,机器人附件    
zhengtiguo
上善若水
级别: 家园常客
精华主题: 0
发帖数量: 572 个
工控威望: 627 点
下载积分: 4623 分
在线时间: 136(小时)
注册时间: 2025-05-29
最后登录: 2026-01-23
查看zhengtiguo的 主题 / 回贴
14楼  发表于: 前天
排队
深耕技术
卓发智能
相互学习,共同进步。
级别: 工控侠客
精华主题: 0
发帖数量: 2503 个
工控威望: 3165 点
下载积分: 13384 分
在线时间: 686(小时)
注册时间: 2008-08-03
最后登录: 2026-01-22
查看卓发智能的 主题 / 回贴
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 分
在线时间: 68(小时)
注册时间: 2011-09-05
最后登录: 2026-01-21
查看奋斗人生的 主题 / 回贴
16楼  发表于: 前天
引用
引用第8楼梦雨天涯于2026-01-21 10:32发表的  :
FX5U做的   

可以
乌喽牛
级别: 家园常客
精华主题: 0
发帖数量: 814 个
工控威望: 951 点
下载积分: 2233 分
在线时间: 265(小时)
注册时间: 2020-06-10
最后登录: 2026-01-23
查看乌喽牛的 主题 / 回贴
17楼  发表于: 前天
围观,挺有意思
胡三001
级别: 正式会员
精华主题: 0
发帖数量: 33 个
工控威望: 64 点
下载积分: 382 分
在线时间: 24(小时)
注册时间: 2023-09-14
最后登录: 2026-01-23
查看胡三001的 主题 / 回贴
18楼  发表于: 昨天
感觉写起来有点绕啊 !
uthman
QQ:3749615
级别: 家园常客
精华主题: 1 篇
发帖数量: 398 个
工控威望: 827 点
下载积分: 2723 分
在线时间: 799(小时)
注册时间: 2007-10-25
最后登录: 2026-01-22
查看uthman的 主题 / 回贴
19楼  发表于: 昨天
  • «
  • 1
  • 2
  • »
  • Pages: 2/2     Go