返回主站|会员中心|保存桌面

西门子(SIEMENS)服务商    

框架断路器、塑壳断路器、隔离开关、软启动、变频器、电机 、PLC、触摸屏

联系方式
  • 联系人:吴经理
  • 电话:18576370666
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > PLC恒压供水带注译恒压供水,是一个很完整的程序!
新闻中心
PLC恒压供水带注译恒压供水,是一个很完整的程序!
发布时间:2025-10-07        浏览次数:1        返回列表

以下是基于西门子 S7-1200/1500 PLC 的恒压供水完整程序(含详细注释),采用 PID 控制算法实现水压稳定,适配单泵 / 多泵切换场景,程序结构清晰,包含压力采集、PID 调节、水泵控制、故障保护等核心功能。

恒压供水 PLC 程序(STL 语言,带注释)

stl

// ************************** 符号表定义 **************************
// 输入信号 (I)
// I0.0: 系统启动按钮
// I0.1: 系统停止按钮
// I0.2: 手动/自动切换 (0=自动,1=手动)
// I0.3: 水泵1故障信号 (常闭)
// I0.4: 水泵2故障信号 (常闭)
// I0.5: 压力传感器故障信号 (常闭)
// AIW0: 压力传感器输入 (4-20mA对应0-10bar)

// 输出信号 (Q)
// Q0.0: 水泵1运行接触器
// Q0.1: 水泵1变频/工频切换 (0=变频,1=工频)
// Q0.2: 水泵2运行接触器
// Q0.3: 水泵2变频/工频切换 (0=变频,1=工频)
// Q0.4: 系统故障报警灯
// Q0.5: 运行指示灯

// 中间变量 (M)
// M0.0: 系统运行标志 (1=运行)
// M0.1: 自动模式标志 (1=自动)
// M0.2: 水泵1运行标志
// M0.3: 水泵2运行标志
// M0.4: 变频泵切换请求
// M1.0: 压力传感器故障标志
// M1.1: 水泵1故障标志
// M1.2: 水泵2故障标志
// MD2: 实际压力值 (bar)
// MD6: 目标压力设定值 (bar,默认3bar)
// MD10: PID输出值 (0-100%,对应0-50Hz)
// MW14: 变频泵当前运行台数
// MW16: 压力偏差值 (目标-实际,bar)
// MW18: 定时切换时间 (秒,默认300s)
// MW20: 计时计数器

// ************************** 主程序 **************************
ORGANIZATION_BLOCK OB1
TITLE = 恒压供水主循环
// 1. 系统启停控制
    L     I0.0                   // 启动按钮
    AN    I0.1                   // 停止按钮未按下
    S     M0.0                   // 置位系统运行标志
    L     I0.1                   // 停止按钮
    R     M0.0                   // 复位系统运行标志

// 2. 模式切换控制
    L     I0.2                   // 手动/自动切换
    FP    M2.0                   // 上升沿检测
    JNB   _001                   // 无上升沿则跳转
    L     I0.2                   // 切换状态
    L     1
    ==I                          // 若切换到手动
    JNB   _002
    R     M0.1                   // 复位自动模式标志
    JMP   _003
_002: S     M0.1                   // 置位自动模式标志(自动模式)
_003: NOP   0
_001: NOP   0

// 3. 压力信号采集与转换(4-20mA转0-10bar)
    L     "AIW0"                 // 读取压力传感器模拟量输入
    L     27648                  // 16位满量程值
    /I                           // 归一化到0-1
    L     10.0                   // 最大压力10bar
    *R                           // 计算实际压力值
    T     "MD2"                  // 存储实际压力

// 4. 故障检测
    // 压力传感器故障(信号断线或超量程)
    L     I0.5                   // 传感器故障信号
    FP    M2.1
    JNB   _004
    L     I0.5
    L     1
    ==I
    JNB   _005
    S     M1.0                   // 置位传感器故障标志
    JMP   _006
_005: R     M1.0                   // 复位故障标志
_006: NOP   0
_004: NOP   0
// 5. 故障报警输出
    L     M1.0                   // 传感器故障
    O     M1.1                   // 水泵1故障
    O     M1.2                   // 水泵2故障
    =     Q0.4                   // 报警灯亮
    L     NOT_Q0.4               // 无故障时
    AN    NOT_M0.0               // 且系统运行
    =     Q0.5                   // 运行灯亮

// 6. 自动模式控制(调用PID与水泵切换逻辑)
    L     M0.0                   // 系统运行
    AN    M1.0                   // 无传感器故障
    A     M0.1                   // 自动模式
    JNB   _011                   // 不满足则跳至手动逻辑
    CALL  "PID控制"              // 调用PID功能块,计算输出频率
    CALL  "水泵切换逻辑"          // 根据PID输出控制水泵启停与变频切换
    JMP   _012
_011: CALL  "手动控制逻辑"        // 手动模式下直接控制水泵
_012: NOP   0
END_ORGANIZATION_BLOCK


// ************************** PID控制功能块 **************************
FUNCTION_BLOCK "PID控制"
TITLE = 压力PID调节
VAR_INPUT
    SP: REAL;                    // 目标压力设定值 (bar)
    PV: REAL;                    // 实际压力值 (bar)
END_VAR
VAR_OUTPUT
    OUT: REAL;                   // PID输出 (0-100%)
END_VAR
VAR
    KP: REAL := 5.0;             // 比例系数(可根据系统调整)
    KI: REAL := 0.2;             // 积分系数
    KD: REAL := 0.1;             // 微分系数
    Err: REAL;                   // 偏差值 (SP-PV)
    ErrSum: REAL := 0.0;         // 偏差积分和
    ErrLast: REAL := 0.0;        // 上一周期偏差
END_VAR

// PID算法实现(增量式PID)
    L     "SP"                   // 目标压力
    L     "PV"                   // 实际压力
    -R                           // 计算偏差 Err = SP - PV
    L     0.0
    T     "ErrSum"
_014: NOP   0

    // 计算PID输出:OUT = KP*Err + KI*ErrSum + KD*(Err-ErrLast)
    L     "KP"
    L     "Err"
    *R                           // 比例项
    L     "KI"
    L     "ErrSum"
    *R                           // 积分项
    +R
    L     "KD"
    L     "Err"
    L     "ErrLast"
    -R
    *R                           // 微分项
    +R
    T     "OUT"                  // 暂存输出

    // 输出限幅(0-100%)
    L     "OUT"
    L     100.0
    >R
    JNB   _015
    L     100.0
    T     "OUT"
END_FUNCTION_BLOCK
// ************************** 水泵切换逻辑 **************************
FUNCTION_BLOCK "水泵切换逻辑"
TITLE = 多泵变频切换控制
// 逻辑说明:1台变频泵调节,当频率达90%时启动第2台工频泵,频率降至30%时停工频泵
// 定时切换变频泵(防止某台泵长期运行)
VAR
    FreqHigh: REAL := 90.0;      // 高频阈值(启动工频泵)
    FreqLow: REAL := 30.0;       // 低频阈值(停止工频泵)
END_VAR

    // 1. 变频泵运行台数判断
    L     "MD10"                 // PID输出频率
    L     "FreqHigh"
    >=R                          // 频率≥90%,需增开工频泵
    JNB   _017
    L     "MW14"                 // 当前运行台数
    L     2

    // 3. 定时切换变频泵(300秒切换一次)
_030: NOP   0
END_FUNCTION_BLOCK

程序说明

  1. 核心逻辑:通过压力传感器采集实际水压,经 PID 算法计算输出频率,控制变频泵转速;当单泵无法满足压力时,自动启动工频泵,实现恒压供水。

  2. 保护功能:包含传感器故障、水泵故障检测,故障时自动报警并切换备用泵(若有)。

  3. 灵活性:支持手动 / 自动切换,自动模式下可定时切换变频泵,均衡泵的运行时间,延长寿命。

  4. 参数调整:PID 的 KP、KI、KD 系数及频率阈值(FreqHigh、FreqLow)需根据实际管网特性调试,建议通过 HMI 在线修改。

可根据实际水泵数量(如 3 台、4 台)扩展 “水泵切换逻辑”,增加更多泵的联动控制。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服