ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

专家PID控制仿真学习

2021-05-20 11:03:56  阅读:214  来源: 互联网

标签:仿真 误差 end PID 学习 abs 绝对值 专家系统 kp


目录

专家控制

学习笔记,用于记录学习
资料:《智能控制》(第四版)——刘金琨

专家系统

一、专家系统的定义
专家系统是一类包含知识推理的智能计算机程序,其内部包含某领域专家水平的只是和经验,具有解决专门问题的能力

二、专家系统的构成

image

三、专家系统的建立

知识库包含三类知识:

  1. 基于专家经验的判断性规则
  2. 用于推理、问题求解的控制性规则
  3. 用于说明问题的状态、事实和概念及当前的条件和常识等的数据

推理机包括三种推理方式:

  1. 正向推理:从原始数据和已知条件得出结论
  2. 反向推理:现提出假设的理论,然后寻找支持的证据,若证据存在,则假设成立
  3. 双向推理:运用正向推理提出假设的结论,运用反向推理来证实假设

产生式规则的表达方式为
IF E THEN H WITH CF(E,H)

E 为规则前提条件,即证据,H 为规则的结论部分,即假设,CF为规则的强度,即可信度

四、专家控制的基本原理

专家控制的基本结构:
image

与专家系统的区别

  1. 专家系统能完成专门领域的功能,辅助用户决策,专家控制能进行独立的、实时的自动决策。专家控制比专家系统对可靠性和抗干扰性有着更高的要求
  2. 专家系统处于离线工作方式,而专家控制要求在线获取反馈信息,即要求在线工作方式

五、 分析典型二阶系统

image

使用simulink做一个典型二阶系统的图
image

书上有五个分析,分别对应例子中的规则

  1. |e(k)|>M1时,误差绝对值很大,应无视误差变化趋势,定值输出,是误差绝对值快速减小,同时避免超调,相当开环控制
  2. e(k)Δe(k)>0 或 Δe(k) = 0时,误差绝对值正在增大,或误差为定值。
    a. |e(k)| ≥ M2时,误差较大,控制器输出为:
    image
    b. |e(k)| < M2 时,误差绝对值不大,但正在增大,此时控制器输出为:
    image
  3. e(k)Δe(k) < 0,e(k)Δe(k-1) > 0或e(k) = 0时,误差绝对值正在减少,或达到平衡
  4. e(k)Δe(k) < 0,Δe(k)Δ(k-1) < 0时,误差处于极值,此时看误差绝对值,绝对值大(|e(k)| ≥ M2),就实施强控制,绝对值小(|e(k)| ≤ M2),就实施弱控制
  5. |e(k)| ≤ ε(精度)时,误差绝对值很小,应加入积分环节,减小稳态误差

六、仿真实例

求三阶传递函数的阶跃响应:
image

仿真程序:(chap2_1.m)

%专家PID控制仿真程序

clear all;
close all;

ts=0.001; %采样时间

sys=tf(5.235e005,[1,87.35,1.047e004,0]);  %传递函数
dsys=c2d(sys,ts,'z'); %转化为离散系统
[num,den]=tfdata(dsys,'v'); %获取系数

u_1=0;u_2=0;u_3=0;
y_1=0;y_2=0;y_3=0;

x=[0,0,0]';
x2_1=0;

kp=0.6;
ki=0.03;
kd=0.01;

error_1=0;
for k=1:1:500
    time(k)=k*ts;
    
    r(k)=1.0;
    u(k)=kp * x(1) + kd * x(2) + ki * x(3);

    %规则1,当绝对值过大时定值输出小数值(强控制)
    if abs(x(1))> 0.8
        u(k)=0.45;
    elseif abs(x(1))> 0.40
        u(k)=0.40;
    elseif abs(x(1))> 0.20
        u(k)=0.12;
    elseif abs(x(1))> 0.01
        u(k)=0.10;
    end
    
    %误差绝对值正在增大,或误差为定值
    if x(1) * x(2)> 0| (x(2) ==0)
        if abs(x(1))>=0.05
            u(k)=u_1 + 2*kp*x(1);
        else
            u(k)=u_1+ 0.4*kp*x(1);
        end
    end
    
    %误差绝对值正在减小,货已经平衡
    if (x(1)* x(2)<0&x(2)* x2_1>0)|(x(1)==0)
        u(k) = u(k);
    end
    
    %误差处于极值
    if x(1)*x(2)< 0&x(2)*x2_1< 0
        if abs(x(1))>=0.05
            u(k)=u_1 +2* kp* error_1;
        else
            u(k)=u_1 +0.6* kp* error_1;
        end
    end
    
    %误差绝对值很小
    if abs(x(1))<=0.001
        u(k)=0.5* x(1)+ 0.010* x(3);
    end
    
    
    if u(k) >= 10
        u(k) = 10;
    end
    if u(k) <= -10
        u(k) = -10;
    end
    
    y(k) = -den(2)* y_1- den(3)* y_2- den(4)* y_3+ num(1)* u(k)+ num(2)* u_1+ num(3)* u_2+ num(4)* u_3;
    error(k) = r(k)- y(k);
    
    u_3 = u_2;u_2 = u_1;u_1 = u(k);
    y_3 = y_2;y_2 = y_1;y_1 = y(k);
    
    x(1) = error(k);               %P
    x2_1 = x(2);
    x(2) = (error(k)- error_1)/ts; %D
    x(3) = x(3)+ error(k)* ts;     %I
    
    error_1 = error(k);
end
figure(1);
plot(time,r,'b',time,y,'r');
xlabel('time(s)'); ylabel('r,y');
figure(2);
plot(time,r- y,'r');
xlabel('time(s)');ylabel('error');
    
    

输出结果:
image
image

标签:仿真,误差,end,PID,学习,abs,绝对值,专家系统,kp
来源: https://www.cnblogs.com/dragonet-Z/p/14788861.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有