weng 发表于 2023-3-29 01:31:19

PID程序

要求:
1.西门子1200PLC
2.SCL语言编程
3.偏差控制
4.模拟量输入
5.模拟量输
6输出上线限制

chatGPT_小控 发表于 2023-3-29 01:32:06

下面是一个简单的PID控制程序,满足你的要求:


FUNCTION_BLOCK PID_Control
VAR_INPUT
    Setpoint: REAL;    // 设定值
    ProcessValue: REAL; // 过程量值
END_VAR
VAR_OUTPUT
    Output: REAL; // 控制器输出
END_VAR
VAR_IN_OUT
    Kp: REAL := 1.0;// 比例常数
    Ki: REAL := 0.5;// 积分常数
    Kd: REAL := 0.2;// 微分常数
    Integral: REAL := 0.0; // 积分部分
    Derivative: REAL := 0.0; // 微分部分
    LastError: REAL := 0.0; // 上次偏差
    OutputMin: REAL := -10.0; // 控制器输出下限
    OutputMax: REAL := 10.0; // 控制器输出上限
END_VAR

// 计算本次偏差和累计偏差
LastError := Setpoint - ProcessValue;
Integral := Integral + LastError;
Derivative := LastError - Derivative;

// 计算控制器输出
Output := Kp * LastError + Ki * Integral + Kd * Derivative;

// 控制器输出上下限限制
IF Output < OutputMin THEN
    Output := OutputMin;
ELSIF Output > OutputMax THEN
    Output := OutputMax;
END_IF;
END_FUNCTION_BLOCK


在程序中,我们定义了一个函数块`PID_Control`,以设定值`Setpoint`和过程量值`ProcessValue`为输入,以控制器输出`Output`为输出。在函数块内部,我们采用了PID控制的基本公式进行计算,其中包括比例、积分、微分三个部分。

需要注意的是,为了防止控制器输出超出上下限,我们在程序中加入了限幅处理。具体地,在计算结束后,我们检查输出是否超出了`OutputMin`和`OutputMax`的范围,并根据情况进行上下限限制。

weng 发表于 2023-3-29 01:33:40

用PI控制即可

chatGPT_小控 发表于 2023-3-29 01:34:15

如果只需要使用PI控制,那么可以在上面的程序中去掉微分部分,即将代码中的`Kd`设为0。如下所示:

FUNCTION_BLOCK PI_ControlVAR_INPUT
    Setpoint: REAL;   // 设定值
    ProcessValue: REAL; // 过程量值END_VARVAR_OUTPUT
    Output: REAL;       // 控制器输出END_VARVAR_IN_OUT
    Kp: REAL := 1.0;    // 比例常数
    Ki: REAL := 0.5;    // 积分常数
    Integral: REAL := 0.0; // 积分部分
    OutputMin: REAL := -10.0; // 控制器输出下限
    OutputMax: REAL := 10.0;// 控制器输出上限END_VAR
// 计算本次偏差和累计偏差
LastError := Setpoint - ProcessValue;
Integral := Integral + LastError;
// 计算控制器输出,并进行上下限限制
Output := Kp * LastError + Ki * Integral;
IF Output < OutputMin THEN
    Output := OutputMin;
ELSIF Output > OutputMax THEN
    Output := OutputMax;
END_IF;
END_FUNCTION_BLOCK

整个程序的主体结构和上一个程序大致相同,只是在计算部分去掉了微分项。需要注意的是,在使用PI控制时,由于没有加入微分项,控制器输出可能会出现一定的超调现象。因此,需要针对实际场景进行调试,以获得最好的控制效果。
页: [1]
查看完整版本: PID程序