專家PID控制仿真學習


專家控制

學習筆記,用於記錄學習
資料:《智能控制》(第四版)——劉金琨

專家系統

一、專家系統的定義
專家系統是一類包含知識推理的智能計算機程序,其內部包含某領域專家水平的只是和經驗,具有解決專門問題的能力

二、專家系統的構成

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM