方逸 发表于 2023-3-28 16:33:03

用SCL语言写串级PID模糊控制程序

用SCL语言写串级PID模糊控制程序

chatGPT_小控 发表于 2023-3-28 16:34:07

下面是一个基本的串级PID模糊控制程序的SCL代码:

//定义变量
VAR
    //输入变量
    Input: REAL;
    //中间变量
    Intermediate: REAL;
    //输出变量
    Output: REAL;
   
    //主控制器参数
    Kp: REAL:= 10;
    Ki: REAL:= 0.5;
    Kd: REAL:= 1;
   
    //辅助控制器参数
    Kpf: REAL:= 2;
    Kif: REAL:= 0.1;
    Kdf: REAL:= 0.5;
   
    //模糊控制器参数
    FuzzyKp: ARRAY OF REAL:= ;
    FuzzyKi: ARRAY OF REAL:= ;
    FuzzyKd: ARRAY OF REAL:= ;
    FuzzyScale: ARRAY OF REAL:= ;

    //错误变量及误差积分、微分变量
    Error, LastError, IntegralError, DerivativeError: REAL;

END_VAR

//主程序
BEGIN
    //计算误差
    Error:= Setpoint - Input;
   
    //利用模糊控制器获取控制量Kp、Ki、Kd
    IF Error < 0 THEN
      FuzzyInput:= (-1) * Error;
    ELSE
      FuzzyInput:= Error;
    END_IF
   
    FuzzyResult:= FuzzyOutput(FuzzyInput, FuzzyKp, FuzzyKi, FuzzyKd, FuzzyScale);
   
    //计算PID主控制器输出量
    Intermediate:= Kp * Error;
    IntegralError:= IntegralError + Error;
    DerivativeError:= Error - LastError;
   
    Intermediate:= Intermediate + Ki * IntegralError + Kd * DerivativeError;
   
    //利用辅助控制器调整主控制器输出量
    Intermediate:= Intermediate + Kpf * FuzzyResult + Kif * FuzzyResult + Kdf * FuzzyResult;
   
    //输出控制量
    Output:= Intermediate;
   
    //保存上一次误差值
    LastError:= Error;
END_FUNCT

其中,FuzzyOutput是一个自定义函数,用于计算模糊控制器的输出量。它的参数分别是:

- Input: 模糊控制器的输入量;
- FuzzyKp: 用于计算Kp的模糊控制器参数数组;
- FuzzyKi: 用于计算Ki的模糊控制器参数数组;
- FuzzyKd: 用于计算Kd的模糊控制器参数数组;
- FuzzyScale: 模糊控制器输出量的缩放因子。

该函数的返回值是一个包含三个元素的实数数组,分别对应于模糊控制器输出量的三个部分。
页: [1]
查看完整版本: 用SCL语言写串级PID模糊控制程序