• 
    <ul id="auswy"><sup id="auswy"></sup></ul>
  • <ul id="auswy"></ul>
    ABB
    關注中國自動化產業發展的先行者!
    CAIAC 2025
    2025工業安全大會
    OICT公益講堂
    當前位置:首頁 >> 案例 >> 案例首頁

    案例頻道

    計算機控制系統的二種控制方式
    • 企業:     領域:電源    
    • 點擊數:2370     發布時間:2005-03-29 16:06:51
    • 分享到:
    介紹了編寫計算機控制系統二種控制器程序的思路、算式和需要考慮的問題。

     

    1  引言

        在控制理論中,所謂"控制系統的設計"是指把負反饋控制的原理應用到實際的計算機測控系統中去,不是指計算機測控系統的工程設計。應用控制理論討論控制系統的設計問題有一個隱含的前提,就是該計算機測控系統已經正常運行,起碼也要設計就緒。關于這一點,許多人都缺乏應有的認識。

        于是在控制理論中,"設計控制系統"就是"設計控制器"。這個控制器,其實是指控制系統框圖中控制器方框的算式,和測控系統中的控制器部件含義不同。而計算機控制理論的"設計控制器"就是首先推導出合乎要求的控制器算式,然后按照該控制器算式編寫一段程序模塊,插入到計算機測控系統的運行程序中,以便使該計算機測控系統在正常運行的基礎上,實現滿意的負反饋自動控制,充分發揮計算機測控系統的潛在能力,實現真正意義上的自動控制。

    2  關于G(z)與D(z)的分子分母階差的搭配

        在計算機控制系統中,被控設備模型G(z)的分子分母階次差只有兩種(如圖1所示):(1) 同階(同拍)模型就是用當前的控制量u(k)和以前的數據,算出當前的輸出量y(k)。(2) 差一階(一拍延遲)模型就是用前一拍的控制量u(k-1)和已有的數據,算出當前的輸出量y(k)。

        沒必要建立多拍延遲的模型。例如二拍延遲設備模型:
        y(k)=-a1y(k-1)-a2y(k-2)-any(k-n)+b2u(k-2)+bnu(k-n)

        就是說,用前二拍的控制量u(k-2)和已有的數據,算出當前的輸出量y(k)。這意味著沒有及時利用最新情報。因為計算機測控系統可以做到每個測控周期測一對數據,就是說,在k時刻,已經知道了u(k-1),為什么不利用呢?至于那些具有延遲性能的設備,也可以本著充分利用最新情報的原則,仍然建立同階或差一階的模型,盡管可能其b0,b1,b2等很小或者為0。


    圖1  被控對象的二種模型


    圖2  二種控制器

        設計的控制器D(z)的分子分母階次差也只有兩種(如圖2所示):(1) 同階(現時)控制器就是讀入y(k)后,馬上計算u(k)并發出,這用于計算時間遠小于測控周期的情況。(2) 差一階(一步預報)控制器就是發出u(k)并讀入y(k),然后計算出u(k+1)以備下一節拍發出。當計算時間不容忽視時,一定要用預報控制器。

        本著利用最新情報的原則,沒有必要設計二步三步預報控制器。

        于是設備模型G(z)與控制器D(z)的搭配也只有兩種(如圖3所示):(1) G(z)差一階配D(z)同階,叫"現時控制系統",這時,設備在上次的控制量和已知的數據的作用下產生了本次輸出y(k),計算機測得y(k)之后,立即計算并發出本次的控制量u(k)。(2) G(z)同階配D(z)差一階,叫"預報控制系統",這時,計算機把上次算好的控制量u(k)發出,立即測量設備輸出y(k)(認為這是由于本次及以前控制量作用的結果),由此算出u(k+1)以備下次發出。這二者,在設計時千萬不要搞錯。

        不可能或沒必要設計其他類型控制。如圖4上圖的"同階-同階"搭配,是不可行的。這就是說計算機發出本次的控制量u(k),立即讀回來本次的輸出y(k),又馬上計算本次的控制量u(k),那么還能再發出嗎?這樣的運行程序就自相矛盾了,以此編寫的程序俗稱"死循環"。

        再有,如圖4下圖的"差一階-差一階"搭配,這就是說,計算機發出本次的控制量u(k)和立即讀回來本次的輸出y(k)無關,讀回來的本次輸出y(k)是由上次的控制量u(k-1)和已知的數據決定的,然后根據這個y(k)計算下次的控制量u(k+1),等待下次發出。這種控制方式沒有及時利用本次的控制量u(k),所以這是不合理的,即沒有利用最新信息。


    圖3  二種正確的搭配


    圖4  二種錯誤的搭配

        在基于狀態方程的控制系統中,也存在被控對象和控制器的階差搭配問題,也只有"預報控制系統"和"現時控制系統"二種,其道理是一樣的。

    3  控制器程序中用的算式
    3.1  串聯現時控制器
        串聯現時控制器的z傳遞函數(不失一般性,以三階來列寫):
       
        然而,在程序中的算式不用z傳遞函數,而用它所對應的差分方程:
       

    3.2  串聯預報控制器
        它的輸入輸出z傳遞函數關系如下(不失一般性,以三階來列寫):
       
        它的算式如下:
       
    3.3  前反饋現時控制器
        它的輸入輸出z傳遞函數關系如下(不失一般性,以二階來列寫):
       
        它的算式如下:
       

    3.4  前反饋預報控制器

        它的輸入輸出傳遞函數關系如下(不失一般性,設為二階):
       
        它的算式如下:  
       

    3.5  被控設備模型
        在控制系統的實際運行中,雖然被控設備的輸入(即控制量)是由計算機發出的,被控設備的輸出是由計算機讀入的,但是為了核實所建立的設備模型(它是控制器設計的根據)是否精確,需要在每個控制節拍,用控制量u和設備模型G(z)來計算輸出y,以便與測量的輸出y比較。同樣的,程序中的算式不用z傳遞函數,而用它所對應的差分方程,就是說,應該把
       
        改寫為差分方程的形式:
       
     
        這是同節拍的設備模型;如果是一拍延遲的設備模型,就令上式中b0=0。為了與測量的y(k)相區別,不妨稱之為yg(k)。

    3.6  系統模型
        如果在程序中還要用整個系統的模型H(z)和預定值r(k)來計算系統輸出y(k),核實控制系統的控制性能;那么它的算法和上述用設備模型G(z)來計算的道理一樣。為了與y(k)和yg(k)相區別,不妨稱之為yh(k)。

        一個滿意的控制系統,其y(k)、yg(k)和yh(k)應該是相等的,或者相差在允許范圍之內,否則,就要查找原因,修改該控制系統,或者設計成自適應控制器。

    4  編寫控制器程序要考慮的問題


    圖5  計算機控制系統的簡圖

        控制器程序只是計算機測控系統的整個運行程序的一部分而已。當控制工程(計算機測控系統的建造)完工投產時,當然至少包含了一個運行程序和執行開關、調節、測量和狀態監控等基本操作功能。編寫控制器程序就是在這樣的運行程序的基礎上,用同樣的編程語言,編寫一段程序,實現根據控制理論設計出來的讀入y(k)和寫出u(k)關系算式(即所設計的控制器),達到良好控制或者優化控制的目的。在控制器框圖中,往往又細分為好多的"器"(方框),其實它們只是一些相互關聯的算式或算法而已。再多的"器"和方框在程序中就是一些相互關聯的一段程序。它們可以歸納為一個大方框-"計算機系統",如圖5所示。

        關于讀寫操作的具體化,就是根據具體測控系統,編寫讀寫操作語句(或者子程序、函數)。讀操作和寫操作,在編寫控制器程序時只需從現有的測控系統運行程序中復制。

        開關動作是在開機、關機或者換檔時才用的,一般在控制器程序中不考慮。至于運行狀況檢測或者定期巡檢以及中斷服務子程序,最好能包含在控制器程序中,從現有的運行程序中搬過來就行了。程序暫停和終止的設定,通常也是原來的運行程序已經考慮過的問題。

        控制器程序的"出口"條件有:(1) 連續多次,測量的輸出值y(k)和計算的輸出值相差太大。(2) 設備故障,跳到中斷服務子程序,或者由人工干預。(3) 從控制臺上由操作工發出暫停或退出的命令。(4) 工作完成,如預定時間到,或出產的產品達到預定的數量,或生產過程完畢。

        其它要考慮的實際問題還有:(1) 反饋濾波器,即測量信號的濾波,現在有數字信號處理DSP軟件工具可用。(2) 對于測量"野點"(過分偏離回歸線的數據),用電路限幅或用程序剔除。(3) 注意"負載效應",因為設備在空載時和帶各種大小負載時,性能不同,數學模型也不同。(4) 注意非線性現象,如飽和、準飽和、自振蕩等。(5) 在同一個控制系統中,往往根據幾種不同情況設計幾個控制器,以便在操作時"分擋選擇"。

        在編寫控制器程序時,根據實際情況,可能還需要考慮其它輔助操作。

    5  編程思路

    (1)  計算機測控系統運行就緒:系統狀態的初始化、開機、正常運行等。

    (2)  數組設定:例如r(10000)、u(10000)、y(10000)、u1(10000)、u2(10000),其中預定值r(k)事先定好了,數組的維數由設計者根據實際情況設定,其中10000是隨意數值。

    (3)  預置數據(初始化):例如for(i=0;i<n;i++),預置r(i)、u(i)、y(i)、u1(i)、u2(i)等。注意r(i)、u(i)、y(i)與r(k)、u(k)、y(k)的關系是k=i-n(n是設備階次)。

    (4)  在每個控制節拍(測控周期)中,如果是現時控制器,編程思路:
        for(i=n;i<10000;i++)           或用 while()句
        用讀指令測y(k);
        計算u(k);
        用寫指令發出u(k);
        其他計算操作和等待下一時刻;
        如果是預報控制器,編程思路:
        for(i=n;i<10000;i++)            或用 while()句
        用寫指令發出u(k);
        用讀指令測y(k);
        計算u(k+1);
        其他計算操作和等待下一時刻;

    (5)  在每個控制節拍(測控周期)中,即在for(i=n;i<10000;i++)之內,還要做的操作有:① 用設備模型G(z)計算輸出yg(k),用系統模型H(z)計算輸出yh(k),以便比較,監測控制狀況。② 控制系統運行狀況的定期檢測及其處理。③ 其他控制運行所必須的操作。④ 數組用到頭時要"周而復始",例如:設置if(k=10000-n),在數組快到頭時,要把末幾個數據移到頭幾個位置去,以便數組重頭使用。⑤ 用等待函數delay(T)或wait(T),T是測控周期,單位ms,必要時,還要減去計算時間。

    (6) 出口或結束:見上述的"程序出口條件"。
        以上所述,是從事計算機控制的人員在編寫控制器程序時必須考慮的問題。至于基于狀態方程的控制器設計與編程,讀者可以觸類旁通。

    熱點新聞

    推薦產品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細的需求:
    姓名:
    單位:
    電話:
    郵件: