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 編寫控制器程序要考慮的問題
控制器程序只是計算機測控系統的整個運行程序的一部分而已。當控制工程(計算機測控系統的建造)完工投產時,當然至少包含了一個運行程序和執行開關、調節、測量和狀態監控等基本操作功能。編寫控制器程序就是在這樣的運行程序的基礎上,用同樣的編程語言,編寫一段程序,實現根據控制理論設計出來的讀入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) 出口或結束:見上述的"程序出口條件"。
以上所述,是從事計算機控制的人員在編寫控制器程序時必須考慮的問題。至于基于狀態方程的控制器設計與編程,讀者可以觸類旁通。