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

普洛菲斯触摸屏    

普洛菲斯触摸屏、Proface触摸屏

联系方式
  • 联系人:吴经理
  • 电话:18576370666
  • 邮件:18576370666@163.com
  • 传真:散热风扇
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 编写一段利用PID控制算法实现压力精确控制的示例程序!
新闻中心
编写一段利用PID控制算法实现压力精确控制的示例程序!
发布时间:2025-11-04        浏览次数:0        返回列表

以下是基于三菱 FX5 系列 PLC(可通用用于压力控制场景)的 PID 压力控制示例程序,通过模拟量输入采集压力信号,结合 PID 算法调节执行机构(如比例阀)输出,实现压力精确控制。程序包含信号采集、滤波、PID 运算、输出控制及报警逻辑。

控制逻辑说明

  1. 信号采集:通过模拟量输入模块(如 FX5-4AD)采集压力变送器信号(4~20mA 对应 0~1MPa)。

  2. 信号处理:对原始信号进行滤波和量程转换(将数字量转为实际压力值,单位:kPa)。

  3. PID 控制:调用 PLC 内置 PID 指令,根据目标压力与实际压力的偏差计算输出值。

  4. 执行输出:将 PID 输出转换为模拟量信号(4~20mA),控制比例阀开度。

  5. 辅助功能:包含手动 / 自动切换、参数设置、超压报警等逻辑。

程序代码(ST 语言)

st

// 模块定义:模拟量输入(4AD)、模拟量输出(2DA)
VAR_GLOBAL
    // 模拟量输入(4~20mA对应0~1MPa)
    AI_Pressure_Raw: WORD := 0;  // 原始值(5530~27648)
    AI_Pressure_Filtered: WORD := 0;  // 滤波后值
    Pressure_Actual: WORD := 0;  // 实际压力(0~1000kPa)
    
    // 控制参数
    Pressure_Set: WORD := 600;  // 目标压力(默认600kPa=0.6MPa)
    Man_Output: WORD := 0;      // 手动输出值(0~27648)
    Auto_Mode: BOOL := TRUE;    // 自动模式(TRUE=自动,FALSE=手动)
    
    // PID参数(可通过HMI修改)
    PID_Kp: REAL := 8.0;        // 比例增益
    PID_Ki: REAL := 0.2;        // 积分系数(1/秒)
    PID_Kd: REAL := 0.5;        // 微分系数(秒)
    PID_Output: WORD := 0;      // PID输出值(0~27648)
    
    // 报警信号
    Alarm_High: BOOL := FALSE;  // 高压报警(>1100kPa)
    Alarm_Low: BOOL := FALSE;   // 低压报警(<100kPa)
    Alarm_Filter: BOOL := FALSE;// 传感器故障报警
END_VAR

// 主程序:周期执行(100ms)
PROGRAM Main
VAR
    // 临时变量
    Filter_Buffer: ARRAY[0..2] OF WORD := [0,0,0];  // 滤波缓冲区
    Filter_Sum: DWORD := 0;                         // 滤波总和
    Error: WORD := 0;                               // 偏差值
    Error_Abs: WORD := 0;                           // 偏差绝对值
    Deadband: WORD := 5;                            // 死区(±5kPa)
END_VAR

// 1. 读取模拟量原始值(4AD模块通道0)
AI_Pressure_Raw := FX5_4AD.Read(Channel := 0);  // 读取4AD通道0

// 2. 滑动平均滤波(抑制干扰)
Filter_Buffer[2] := Filter_Buffer[1];
Filter_Buffer[1] := Filter_Buffer[0];
Filter_Buffer[0] := AI_Pressure_Raw;
Filter_Sum := DWORD#Filter_Buffer[0] + Filter_Buffer[1] + Filter_Buffer[2];
AI_Pressure_Filtered := WORD#(Filter_Sum / 3);  // 取3次平均值

// 3. 传感器故障检测(信号超出量程)
IF (AI_Pressure_Filtered < 5000) OR (AI_Pressure_Filtered > 28000) THEN
    Alarm_Filter := TRUE;
ELSE
    Alarm_Filter := FALSE;
END_IF;

// 4. 量程转换(4~20mA → 0~1000kPa)
// 公式:Pressure_Actual = (Filtered - 5530) * 1000 / (27648 - 5530)
Pressure_Actual := WORD#(
    INT#(AI_Pressure_Filtered) - 5530
) * 1000 / 22118;  // 22118 = 27648 - 5530

// 5. 压力报警逻辑
IF Pressure_Actual > 1100 THEN
    Alarm_High := TRUE;
ELSE
    Alarm_High := FALSE;
END_IF;

IF Pressure_Actual < 100 THEN
    Alarm_Low := TRUE;
ELSE
    Alarm_Low := FALSE;
END_IF;

// 6. PID控制(自动模式)
IF Auto_Mode AND NOT Alarm_Filter THEN
    // 计算偏差
    Error := WORD#(INT#(Pressure_Set) - INT#(Pressure_Actual));
    Error_Abs := ABS(Error);
    
    // 死区处理:偏差小于5kPa时不调节
    IF Error_Abs <= Deadband THEN
        // 保持当前输出
    ELSE
        // 调用PID指令(三菱PID_LIB库)
        PID_Output := PID_LIB.Execute(
            Setpoint := Pressure_Set,
            ProcessValue := Pressure_Actual,
            Kp := PID_Kp,
            Ki := PID_Ki,
            Kd := PID_Kd,
            OutputMin := 0,
            OutputMax := 27648,
            Cycle := 100  // 控制周期100ms
        );
    END_IF;
END_IF;

// 7. 手动/自动输出切换
IF Auto_Mode THEN
    // 自动模式:输出PID计算值
    FX5_2DA.Write(Channel := 0, Value := PID_Output);  // 写入2DA通道0
ELSE
    // 手动模式:输出手动设定值
    FX5_2DA.Write(Channel := 0, Value := Man_Output);
END_IF;
END_PROGRAM

程序关键说明

  1. 信号滤波:采用滑动平均滤波(取最近 3 次采样值的平均值),减少传感器信号波动对控制的影响。

  2. 量程转换:将 4~20mA 对应的数字量(5530~27648)线性转换为实际压力值(0~1000kPa),公式参考工业标准模拟量转换逻辑。

  3. PID 参数

    • Kp(比例增益):初始建议 5~10,增大可提高响应速度,但过大会导致超调;

    • Ki(积分系数):初始建议 0.1~0.5,用于消除静态偏差,过大会导致震荡;

    • Kd(微分系数):初始建议 0~1,用于抑制超调,滞后系统可适当增大。

  4. 死区控制:当压力偏差小于 5kPa 时停止调节,避免执行机构频繁动作(延长寿命)。

  5. 故障处理:检测传感器信号是否超出正常范围(4~20mA 对应 5530~27648),异常时触发报警并停止 PID 调节。

调试建议

  1. 参数整定步骤

    • 先关闭积分(Ki=0)和微分(Kd=0),逐步增大Kp至压力出现轻微震荡;

    • 减小Kp至震荡消失,再逐步增大Ki至静态偏差消除;

    • 若超调严重,适当增加Kd抑制。

  2. 输出限制:根据执行机构(如比例阀)的有效量程,限制PID_Output的范围(如最小 10% 输出对应 5530,避免阀卡涩)。

  3. HMI 关联:将Pressure_SetPID_KpAuto_Mode等变量关联到 HMI,方便实时修改参数和监控状态。

通过以上程序,可实现压力的闭环控制,精度通常可达 ±1% FS(满量程),适用于供水系统、气动设备等压力控制场景。

收缩
  • QQ咨询

  • 电话咨询

  • 18576370666
  • 添加微信客服