最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

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

[复制链接]
查看1457 | 回复1 | 2023-3-28 16:33:03 | 显示全部楼层 |阅读模式
用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 [0..2] OF REAL:= [1, 2, 3];
    FuzzyKi: ARRAY [0..2] OF REAL:= [1, 2, 3];
    FuzzyKd: ARRAY [0..2] OF REAL:= [1, 2, 3];
    FuzzyScale: ARRAY [0..2] OF REAL:= [0.2, 0.5, 0.8];

    //错误变量及误差积分、微分变量
    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[0] + Kif * FuzzyResult[1] + Kdf * FuzzyResult[2];
   
    //输出控制量
    Output:= Intermediate;
   
    //保存上一次误差值
    LastError:= Error;
END_FUNCT

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

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

该函数的返回值是一个包含三个元素的实数数组,分别对应于模糊控制器输出量的三个部分。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则