自動控制的故事 - R9 L- v. M* W0 t% r6 O
說明:轉載文章,一直想找出原作者,可惜網上搜索不到,應該是一位大師級人物! a6 F3 f* c6 D7 b! ^. i _
; k9 o! x# v6 S
; |# |8 N4 U' ]0 A y2 b) c 自動控制的科普綜述文章少之又少,這一篇是難得好文章。甚至高于科普了。自動化專業的學生,能夠把自己學的道理理解到這種程度的,又能占到多少比例呢?
& o+ e- w, q/ \
: T- N/ H: H: @( l/ V
7 L, t8 F/ O5 r8 p$ M7 N! e9 f 寫完聚乙烯的故事,就有寫自動控制的故事的念頭,但一直沒有動筆。這個題目太大了,大得都不知道從何說起。既然大家看聚乙烯的故事還有一點意思,四一在催,馬鹿要“一”什么的,那就接著寫自動控制的故事吧。反正是故事,別太當真,看著好玩就接著看,看著枯燥就拍桌子,看著有錯就提個醒,看著糊涂的盡管問,看著不耐煩了呢,也言語一聲,我好閉上嘴不再煩人。哈哈。% C3 J7 P9 m) J
- {4 t. p$ _4 Y$ {( [( S
# _2 Z/ n% G+ g* \4 {% U E (一)
: k/ I# u2 {$ t; s0 b M4 ~/ ?
" P7 p; B% y3 [ p/ P- k; \" s
, ~6 M* L8 x. `, } 小時候喜歡看雜書,沒什么東西看,不正在文化大革命嘛?不過看進去了兩個“化”:機械化和自動化。打小就沒有弄明白,這機械化和自動化到底有什么差別,機器不是自己就會動的嗎?長大了,總算稍微明白了一點,這機械化是力氣活,用機器代替人的體力勞動,但還是要人管著的,不然機器是不知道該干什么不該干什么的;這自動化嘛,就是代替人的重復腦力勞動,是用來管機器的。也就是說,自動化是管著機械化的,或者說學自動化的是管著學機械的……啊,不對,不對,哪是哪啊!
1 }- s6 ^6 p% j5 \1 N5 ~) V, A8 h( i( u3 `+ T5 S! L+ M# u
! k7 q9 p3 g5 t t. P: f 有人考證古代就有自動化的實例,但現代意義上的自動控制開始于瓦特的蒸汽機。據說紐考門比瓦特先發明蒸汽機,但是蒸汽機的轉速控制問題沒有解決,弄不好轉速飛升,機器損壞不說,還可能說大事故。瓦特在蒸汽機的轉軸上安了一個小棍,棍的一端和放汽閥連著,放氣閥松開來就關閉,轉速增加;按下去閥就打開,轉速降低;棍的另一端是一個小重錘,棍中間某個地方通過支點和轉軸連接。轉軸轉起來的時候,小棍由于離心力的緣故揮起來。轉速太高了,小棍揮會揮得很高,放汽閥就被按下去打開,轉速下降;轉速太低了,小棍揮不起來,放汽閥就被松開來關閉,轉速回升。這樣,蒸汽機可以自動保持穩定的轉速,即保證安全,又方便使用。也就是因為這個小小的轉速調節器,瓦特的名字和工業革命連在一起,而紐考門的名字就要到歷史書里去找了。/ v3 ^4 w- l9 e5 ~2 r$ G" t
. f8 B0 u* u; u3 P2 F" E7 u
. m" H, B% T( ~ 類似的例子在機械系統里很多,家居必備的抽水馬桶是另一個例子。放水沖刷后,水箱里水位降低,浮子隨水面下降,進水閥打開。隨著水位的升高,進水閥逐漸關閉,直到水位達到規定高度,進水閥完全關閉,水箱的水正好準備下一次使用。這是一個非常簡單但非常巧妙的水位控制系統,是一個經典的設計,但不容易用經典的控制理論來分析,不過這是題外話了。+ `4 \6 K# q; \- ]
$ V) k* _1 `/ r& [8 Z, Z5 F( E; u, Y 6 d( g" \3 w* y |5 A
這些機械系統設計巧妙,工作可靠,實在是巧奪天工。但是在實用中,如果每次都需要這樣的創造性思維,那太累,最好有一個系統的方法,可以解決“所有”的自動控制問題,這就是控制理論的由來。7 c9 @# J& X- F
6 K+ J" K* o5 j5 m
6 W# U3 C3 U6 d" b3 J
從小大人就教我們,走路要看路。為什么呢?要是不看著路,走路走歪了也不知道,結果就是東撞西撞的。要是看著路呢?走歪了,馬上就看到,趕緊調整腳步,走回到正道上來。這里有自動控制里的第一個重要概念:反饋(feedback)。7 i: [- c, a+ O/ m( i2 `- k
: A; a: Q1 a& T
, p3 K, |# T( h' O
反饋是一個過程:
. k3 U& i z- F1 j5 v/ a
7 }5 o3 w, j, s , O9 _: a+ B" Q4 {# z3 r. D( U
1、設定目標,對小朋友走路的例子來說,就是前進的路線。 , l, @' t0 D2 w
2、測量狀態,小朋友的眼睛看著路,就是在測量自己的前進方向。
- g( _5 B/ x( e 3、將測量到的狀態和設定的目標比較,把眼睛看到的前進方向和心里想的前進方向作比較,判斷前進方向是否正確;如果不正確,相差有多少。
( O/ I+ K" K+ e- d" L0 X5 l% W 4、調整行動,在心里根據實際前進方向和設定目標的偏差,決定調整的量。
2 i+ {1 O' G7 f) k" I 5、實際執行,也就是實際挪動腳步,重回正確的前進方向。. l) Q) H; X3 Q9 t) Y1 y, c( n. p
) k. S, H; w5 H
7 `/ a# o A( | 0 `1 M6 H/ P0 |2 o% t4 i- J8 ^
在整個走路的過程中,這個反饋過程周而復始,不斷進行,這樣,小朋友就不會走得東倒西歪了。但是,這里有一個問題:如果所有的事情都是在瞬時里同時發生的,那這個反饋過程就無法工作。要使反饋工作,一定要有一定的反應時間。還好,世上之事,都有一個過程,這就為反饋贏得了所需要的時間。
: |) B) G0 n% A. B) D2 m9 w- M7 e! H
! F; F5 o4 W: }. W4 p
小時候,媽媽在鍋里蒸東西,蒸好了,從鍋里拿出來總是一個麻煩,需要抹布什么的墊著,免得燙手。但是碗和鍋的間隙不大,連手帶抹布伸進去頗麻煩,我常常不知天高地厚,自告奮勇地徒手把熱的碗拿出來。只要動作快,手起碗落,可以不燙手。當然嘍,要是捧著熱碗再東晃晃,西蕩蕩,那手上感覺的溫度最終會和熱碗一樣,肯定要把手心、手指燙熟不可的。在從接觸碗到皮膚溫度和碗表面一樣,這里面有一個逐漸升溫的過程,這就是動態過程(dynamic process)。這里面有兩個東西要注意:一個是升溫的過程有多快,另一個是最終的溫度可以升到多少。要是知道了這兩個參數,同時知道自己的手可以耐受多少溫度,理論上可以計算出熱的碗在手里可以停留多少時間而不至于燙手。! t( ^0 c) O# @1 L4 }# ~
0 p9 l/ q& |6 E# v8 y, ^. R; j
, b3 [' G+ N r. I. F 反饋過程也叫閉環(closed loop)過程。既然有閉環,那就有開環(open loop)。開環就是沒有反饋的控制過程,設定一個控制作用,然后就執行,不根據實際測量值進行校正。開環控制只有對簡單的過程有效,比如洗衣機和烘干機按定時控制,到底衣服洗得怎么樣,烘得干不干,完全取決于開始時的設定。對于洗衣機、烘干機這樣的問題,多設一點時間就是了,稍微浪費一點,但可以保證效果。對于空調機,就不能不顧房間溫度,簡單地設一個開10分鐘、關5分鐘的循環,而應該根據實際溫度作閉環控制,否則房間里的溫度天知道到底會達到多少。記得80年代時,報告文學很流行。徐遲寫了一個《哥德巴赫猜想》,于是全國人民都爭當科學家。小說家也爭著寫科學家,成就太小不行,所以來一個語不驚人死不休,某大家寫了一個《無反饋快速跟蹤》。那時正在大學啃磚頭,對這個科學新發現大感興趣,從頭看到尾,也沒有看明白到底是怎么無反饋快速跟蹤的。現在想想,小說就是小說,不過這無良作家也太扯,無反饋還要跟蹤,不看著目標,不看著自己跑哪了,這跟的什么蹤啊,這和永動機差不多了,怎么不挑一個好一點的題目,冷聚變什么的,至少在理論上還是可能的。題外話了。2 D, x( `* g6 E
* |$ S* A/ R( ^* l7 c8 y+ j' \& Y7 {" C* E5 b* C9 N
9 g* \$ d/ \: B( [4 K
在數學上,動態過程用微分方程描述,反饋過程就是在描述動態過程的微分方程的輸入項和輸出項之間建立一個關聯,這樣改變了微分方程本來的性質。自動控制就是在這個反饋和動態過程里做文章的。; ]1 E. x7 `9 |# d# f' |; e
3 y9 L) f4 I8 ~' ?$ C
9 k* Y Q0 M( `3 J0 o3 q6 G
9 v' ^0 ^6 d2 Y7 A5 Q6 j# Z, i5 u 房間內的空調是一個簡單的控制問題。不過這只是指單一房間,整個高層大樓所有房間的中央空調問題實際上是一個相當復雜的問題,不在這里討論的范圍。夏天了,室內溫度設在28度,實際溫度高于28度了,空調機啟動致冷,把房間的溫度降下來;實際溫度低于28度了,空調機關閉,讓房間溫度受環境氣溫自然升上去。通過這樣簡單的開關控制,室內溫度應該就控制在28度。不過這里有一個問題,如果溫度高于28度一點點,空調機就啟動;低于28度一點點,空調機就關閉;那如果溫度傳感器和空調機的開關足夠靈敏的話,空調機的開關頻率可以無窮高,空調機不斷地開開關關,要發神經病了,這對機器不好,在實際上也沒有必要。解決的辦法是設立一個“死區”(dead band),溫度高于29度時開機,低于27度時關機。注意不要搞反了,否則控制單元要發神經了。
# \8 t1 |. t3 C$ s" t! z' t9 i
! A4 D$ e, Y o+ S r$ o r
% [; Y8 {. h- G1 x [; e/ f5 ~ , r' |' G9 Q% j8 x. W! M0 S
有了一個死區后,室內溫度不再可能嚴格控制在28度,而是在27到29度之間“晃蕩”。如果環境溫度一定,空調機的制冷量一定,室內的升溫/降溫動態模型已知,可以計算溫度“晃蕩”的周期。不過既然是講故事,我們就不去費那個事了。
, d1 n! n$ j" q z( w0 l: y3 E! }. f+ o# O4 T( r- ~1 X1 h
* w5 V' ~; s: l/ L; \; `
這種開關控制看起來“土”,其實好處不少。對于大部分過程來說,開關控制的精度不高但可以保證穩定,或者說系統輸出是“有界”的,也就是說實際測量值一定會被限制在一定的范圍,而不可能無限制地發散出去。這種穩定性和一般控制理論里強調的所謂漸進穩定性不同,而是所謂BIBO穩定性,前者要求輸出最終趨向設定值,后者只要求在有界的輸入作用下輸出是有界的,BIBO指bounded input bounded output。# T: V E+ E3 o% o1 k$ Q
9 q6 C0 p" v) ?) @
- b2 C! ~% v. e$ E y/ Y! Y. t 對于簡單的精 度要求不高的過程,這種開關控制(或者稱繼電器控制,relay control,因為最早這種控制方式是用繼電器或電磁開關來實現的)就足夠了。但是很多時候,這種“毛估估”的控制滿足不了要求。汽車在高速公路上行駛,速度設在定速巡航控制,速度飄下去幾公里,心里覺得吃虧了,但要是飄上去幾公里,被警察抓下來吃一個罰單,這算誰的?
/ ~# K! n6 q8 N$ ~& ] Q! G8 C, q# y% Z: B5 \* y" d3 S
5 y# I6 x" l! ^2 R# ^' W
開關控制是不連續控制,控制作用一加就是“全劑量”的,一減也是“全劑量”的,沒有中間的過渡。如果空調機的制冷量有三個設定,:小、中、大,根據室溫和設定的差別來決定到底是用小還是中還是大,那室溫的控制精度就可以大大提高,換句話說,溫度的“晃蕩”幅度將大幅度減小。那么,如果空調機有更多的設定,從小小到小中到……到大大,那控制精度是不是更高呢?是的。既然如此,何不用無級可調的空調機呢?那豈不可以更精確地控制室溫了嗎?是的。: Y, U. u; H! N: L$ c3 ~, T
- ?* {: Q6 B7 G0 h! J+ {3 D6 w
2 r! a+ n& a# r( B4 W
無級可調或連續可調的空調機可以精確控制溫度,但開關控制不能再用了。家用空調機中,連續可調的不占多數,但沖熱水淋浴是一個典型的連續控制問題,因為水龍頭可以連續調節水的流量。沖淋浴時,假定冷水龍頭不變,只調節熱水。那溫度高了,熱水關小一點;溫度低了,熱水開打一點。換句話說,控制作用應該向減少控制偏差的方向變化,也就是所謂負負反饋。控制方向對了,還有一個控制量的問題。溫度高了1度,熱水該關小多少呢?9 n$ p( {: x ]
" b2 n o3 y, c$ g 9 k; `9 I9 i1 `* Q, P2 ^9 O1 F
經驗告訴我們,根據具體的龍頭和水壓,溫度高1度,熱水需要關小一定的量,比如說,關小一格。換句話說,控制量和控制偏差成比例關系,這就是經典的比例控制規律:控制量=比例控制增益* 控制偏差,偏差越大,控制量越大。控制偏差就是實際測量值和設定值或目標值之差。在比例控制規律下,偏差反向,控制量也反向。也就是說,如果淋浴水溫要求為40度,實際水溫高于40度時,熱水龍頭向關閉的方向變化;實際水溫低于40度時,熱水龍頭向開啟的方向變化。
% Q* V/ Z8 \ s( [' O
9 z; ?5 J! | ~1 v1 v2 F, b; l: S, T6 e+ l% M* B) U
: s1 ]6 L* Y+ R- U 但是比例控制規律并不能 保證水溫能夠精確達到 40度。在實際生活中,人們這時對熱水龍頭作微調,只要水溫還不合適,就一點一點地調節,直到水溫合適為止。這種只要控制偏差不消失就漸進微調的控制規律,在控制里叫積分控制規律,因為控制量和控制偏差在時間上的累積成正比,其比例因子就稱為積分控制增益。工業上常用積分控制增益的倒數,稱其為積分時間常數,其物理意義是偏差恒定時,控制量加倍所需的時間。這里要注意的是,控制偏差有正有負,全看實際測量值是大于還是小于設定值,所以只要控制系統是穩定的,也就是實際測量值最終會穩定在設定值上,控制偏差的累積不會是無窮大的。這里再啰嗦一遍,積分控制的基本作用是消除控制偏差的余差(也叫殘差)。
8 I( \9 z" l ^- Y# E& L/ H) ~2 p/ ^: n$ y* U! c3 }
" Q, I0 X! |+ n/ ?3 F
比例和積分控制規律可以應付很大一類控制問題,但不是沒有改進余地的。如果水管水溫快速變化,人們會根據水溫的變化調節熱水龍頭:水溫升高,熱水龍頭向關閉方向變化,升溫越快,開啟越多;水溫降低,熱水龍頭向開啟方向變化,降溫越快,關閉越多。這就是所謂的微分控制規律,因為控制量和實際測量值的變化率成正比,其比例因子就稱為比例控制增益,工業上也稱微分時間常數。微分時間常數沒有太特定的物理意義,只是積分叫時間常數,微分也跟著叫了。微分控制的重點不在實際測量值的具體數值,而在其變化方向和變化速度。微分控制在理論上和實用中有很多優越性,但局限也是明顯的。如果測量信號不是很“干凈”,時不時有那么一點不大不小的“毛刺”或擾動,微分控制就會被這些風吹草動搞得方寸大亂,產生很多不必要甚至錯誤的控制信號。所以工業上對微分控制的使用是很謹慎的。! p! g. V7 h/ x, T
. U$ Y' n# |, ?1 a( Z
* w6 u# v& I( x# h9 f5 S' S
9 i7 E* {$ S% R' Q- w" G 比例-積分-微分控制規律是工業上最常用的控制規律。人們一般根據比例-積分-微分的英文縮寫,將其簡稱為PID控制。即使在更為先進的控制規律廣泛應用的今天,各種形式的PID控制仍然在所有控制回路中占85%以上。 _- z, l( `, C- \
2 {: g8 ~; H: X6 T
1 A& ]; i5 y1 k( C7 c 在PID 控制中,積分控制的特點是:只要還有余差(即殘余的控制偏差)存在,積分控制就按部就班地逐漸增加控制作用,直到余差消失。所以積分的效果比較緩慢,除特殊情況外,作為基本控制作用,緩不救急。微分控制的特點是:盡管實際測量值還比設定值低,但其快速上揚的沖勢需要及早加以抑制,否則,等到實際值超過設定值再作反應就晚了,這就是微分控制施展身手的地方了。作為基本控制使用,微分控制只看趨勢,不看具體數值所在,所以最理想的情況也就是把實際值穩定下來,但穩定在什么地方就要看你的運氣了,所以微分控制也不能作為基本控制作用。比例控制沒有這些問題,比例控制的反應快,穩定性好,是最基本的控制作用,是“皮”,積分、微分控制是對比例控制起增強作用的,極少單獨使用,所以是“毛”。在實際使用中比例和積分一般一起使用,比例承擔主要的控制作用,積分幫助消除余差。微分只有在被控對象反應遲緩,需要在開始有所反應時,及早補償,才予以采用。只用比例和微分的情況很少見。' }3 j6 Z; M; p9 O/ B/ p
) N& E; {# @; y
( C4 l2 y0 Q) J( A
連續控制的精度是開關控制所不可比擬的,但連續控制的高精度也是有代價的,這就是穩定性問題。控制增益決定了控制作用對偏差的靈敏度。既然增益決定了控制的靈敏度,那么越靈敏豈不越好?非也。還是用汽車的定速巡航控制做例子。速度低一點,油門加一點,速度低更多,油門加更多,速度高上去當然就反過來。但是如果速度低一點,油門就加很多,速度更低,油門狂加,這樣速度不但不能穩定在要求的設定值上,還可能失控。這就是不穩定。所以控制增益的設定是有講究的。在生活中也有類似的例子。國民經濟過熱,需要經濟調整,但調整過火,就要造成“硬著陸”,引起衰退;衰退時需要刺激,同樣,刺激過火,會造成“虛假繁榮”。要達成“軟著陸”,經濟調整的措施需要恰到好處。這也是一個經濟動態系統的穩定性問題。
8 k0 J0 n; j% i/ h Z. @0 z$ s, v0 F7 X7 ~
2 E: Y7 u' r! Z/ \" i2 M! ^! i 實際中到底多少增益才是最合適的,理論上有很多計算方法,但實用中一般是靠經驗和調試來摸索最佳增益,業內行話叫參數整定。如果系統響應在控制作用后面拖拖沓沓,大幅度振蕩的話,那一般是積分太過;如果系統響應非常神經質,動不動就打擺子,呈現高頻小幅度振蕩的話,那一般是微分有點過分。中頻振蕩當然就是比例的問題了。不過各個系統的頻率都是不一樣的,到底什么算高頻,什么算低頻,這個幾句話說不清楚,應了毛主席那句話:“具體情況具體分析”,所以就打一個哈哈了。, w6 q5 l* \4 A# Z
6 i, F' ?+ N- |1 N
# [" J6 W' e4 R' j Z! W
再具體說起來,參數整定有兩個路子。一是首先調試比例增益以保證基本的穩定性,然后加必要的積分以消除余差,只有在最必要的情況下,比如反映遲緩的溫度過程或容量極大的液位過程,測量噪聲很低,才加一點微分。這是“學院派”的路子,在大部分情況下很有效。但是工業界有一個“歪路子”:用非常小的比例作用,但大大強化積分作用。這個方法是完全違背控制理論的分析的,但在實際中卻是行之有效,原因在于測量噪聲嚴重,或系統反應過敏時,積分為主的控制規律動作比較緩和,不易激勵出不穩定的因素,尤其是不確定性比較高的高頻部分,這也是鄧小平“穩定壓倒一切”的初衷吧。! a4 q! Q/ ^/ w1 G, Y5 A
0 `/ l1 ^5 o5 b
0 s b! e; i: p0 U
# ^1 T+ }/ R# Z% E# K 在很多情況下,在初始PID參數整定之后,只要系統沒有出現不穩定或性能顯著退化,一般不會去重新整定。但是要是系統不穩定了怎么辦呢?由于大部分實際系統都是開環穩定的,也就是說,只要控制作用恒定不變,系統響應最終應該穩定在一個數值,盡管可能不是設定值,所以對付不穩定的第一個動作都是把比例增益減小,根據實際情況,減小1/3、1/2甚至更多,同時加大積分時間常數,常常成倍地加,再就是減小甚至取消微分控制作用。如果有前饋控制,適當減小前饋增益也是有用的。在實際中,系統性能不會莫名其妙地突然變壞,上述“救火”式重新整定常常是臨時性的,等生產過程中的機械或原料問題消除后,參數還是要設回原來的數值,否則系統性能會太過“懶散”。9 \) Q5 Y& J4 |- c1 n7 J* ~
" R: m# d2 l0 f+ ?% |, G
( n8 j+ T1 v+ c7 P- v. l7 L7 G
對于新工廠,系統還沒有投運,沒法根據實際響應來整定,一般先估計一個初始參數,在系統投運的過程中,對控制回路逐個整定。我自己的經驗是,對于一般的流量回路,比例定在 0.5左右,積分大約1分鐘,微分為0,這個組合一般不致于一上來就出大問題。溫度回路可以從2、5、0.05開始,液位回路從5、10、0開始,氣相壓力回路從10、20、0開始。既然這些都是憑經驗的估計,那當然要具體情況具體分析,不可能“放之四海而皆準”。; h) c* J4 C) ~+ V
! `% m% r6 }) m! P- F0 g4 I; f$ g$ B1 I
/ M P* t) I& L+ T/ G
微分一般用于反應遲緩的系統,但是事情總有一些例外。我就遇到過一個小小的冷凝液罐,直徑才兩英尺,長不過5英尺,但是流量倒要8-12噸/小時,一有風吹草動,液位變化非常迅速,不管比例、積分怎么調,液位很難穩定下來,常常是控制閥剛開始反應,液位已經到頂或到底了。最后加了0.05的微分,液位一開始變化,控制閥就開始抑制,反而穩定下來了。這和常規的參數整定的路子背道而馳,但在這個情況下,反而是“唯一”的選擇,因為測量值和控制閥的飽和變成穩定性主要的問題了。9 Q6 O' F- C$ A- |( R! }* t
) T* p" o& h4 v7 I; X
2 f, `8 Q, f* F. z' h 對工業界以積分為主導控制作用的做法再啰嗦幾句。學術上,控制的穩定性基本就是漸近穩定性,BIBO穩定性是沒有辦法證明漸近穩定性時的“退而求其次”的東西,不怎么上臺面的。但是工業界里的穩定性有兩個看起來相似、實質上不盡相同的方面:一個當然是漸近穩定性,另一個則是穩定性,但不一定向設定值收斂,或者說穩定性比收斂性優先這樣一個情況。具體來說,就是需要系統穩定在一個值上,不要動來動去,但是不是在設定值并不是太重要,只要不是太離譜就行。例子有很多,比如反應器的壓力是一個重要參數,反應器不穩定,原料進料比例就亂套,催化劑進料也不穩定,反應就不穩定,但是反應器的壓力到底是10個大氣壓還是 12個大氣壓,并沒有太大的關系,只要慢慢地但是穩定地向設定值移動就足夠了。這是控制理論里比較少涉及的一個情況,這也是工業上時常采用積分主導的控制的一個重要原因。
% X1 |! t; M( A' ~) L
$ d* y4 Q8 W' v* I+ G. C
/ Z. k) |/ L8 t) i& N9 ?$ U" y
" C+ y3 F/ l! {2 G- f1 A 前面說到系統的頻率,本來也就是系統響應持續振蕩時的頻率,但是控制領域里有三撥人在搗騰:一撥是以機電類動力學系統為特色的電工出身,包括航空、機器人等,一撥是以連續過程為特色的化工出身的,包冶金、造紙等,還有一撥是以微分方程穩定性為特色的應用數學出身的。在瓦特和抽水馬桶的年代里,各打各的山頭,井水不犯河水,倒也太平。但控制從藝術上升為理論后,總有人喜歡“統一”,電工幫搶了先,好端端的控制理論里被塞進了電工里的頻率。童子們哪,那哪是頻率啊,那是……復頻率。既然那些變態的電工幫(啊耶,這下鹿踹真的要來了)能折騰出虛功率,那他們也能折騰出復頻率來,他們自虐倒也算了,只是苦了我等無辜之眾,被迫受此精神折磨。
2 P% e& R, ]' ]7 G4 p) n7 Q/ J4 v+ t- o( W; X/ e* P( T$ h
8 \8 Q; Y1 f9 f8 M3 o
* C! @2 W( J- C$ G( u+ U
事情的緣由是系統的穩定性。前面提到,PID的參數如果設得不好,系統可能不穩定。除了摸索,有沒有辦法從理論上計算出合適的PID參數呢?前面也提到,動態過程可以用微分方程描述,其實在PID的階段,這只是微分方程中很狹窄的一支:單變量線性常微分方程。要是還記得大一高數,一定還記得線形常微的解,除了分離變量法什么的,如果自變量時間用t表示的話,最常用的求解還是把 exp(λt)代入微分方程,然后解已經變成λ的代數方程的特征方程,解出來的解可以是實數,也可以是復數,是復數的話,就要用三角函數展開了(怎么樣,大一噩夢的感覺找回來一點沒有?)。只要實根為負,那微分方程就是穩定的,因為負的指數項最終向零收斂,復根到底多少就無所謂了,對穩定性沒有影響。但是,這么求解分析起來還是不容易,還是超不出“具體情況具體分析”,難以得出一般的結論。
; c: {; k0 v* V& r/ K! {. ?6 \& e' u$ d8 z$ t- G$ [! f
% k" G' ]! O& e7 S " V$ W$ ?4 n; M, M
法國人以好色、好吃出名,但是他們食色性也之后,還不老實,其中一個叫拉普拉斯的家伙,搗鼓出什么拉普拉斯變換,把常微分方程變成s的多項式。然后那幫電工的家伙們,喜歡自虐,往s里塞jω,就是那個復頻率,整出一個變態的頻率分析,用來分析系統的穩定性。不過說變態,也不完全公平,在沒有計算機的年代,各種圖表是最有效的分析方法,還美其名曰“幾何分析”。頻率分析也不例外。美國佬Evans搞出一個根軌跡(root locus),思路倒是滿有意思的。他用增益作自變量,將系統的根(不管實的虛的)在復平面上畫出軌跡來,要是軌跡在左半平面打轉轉,那就是實根為負,就是穩定的。再深究下去,系統響應的臨界頻率之類也可以計算出來。最大的好處是,對于常見的系統,可以給出一套作圖規則來,熟練的大牛、小牛、公牛、母牛們,眼睛一瞄,隨手就可以畫出根軌跡來,然后就可以告訴你,增益變化多多少,系統開始振蕩,再增加多少,系統會不穩定,云云。
" u( m4 b; J0 v( y : Q q' E+ h1 r* g' L% P* e
根軌跡還是比較客氣的,還有更變態的奈奎斯特、伯德和尼科爾斯法,想想腦子都大。都是叫那幫電工分子害的。時至今日,計算機分析已經很普及了,但是古典的圖示分析還是有經久不衰的魅力,就是因為圖示分析不光告訴你系統是穩定還是不穩定,以及其他一些動態響應的參數,圖示分析還可以定性地告訴你增益變化甚至系統參數變化引起的閉環性能變化。咦,剛才還不是在說人家變態嗎?呃,變態也有變態的魅力不是?哈哈。) K8 Y! v( N$ X# i2 ~
1 [! }* |5 c" p7 i) B
, _. Q e7 w" } 以頻率分析(也稱頻域分析)為特色的控制理論稱為經典控制理論。經典控制理論可以把系統的穩定性分析得天花亂墜,但有兩個前提:一、要已知被控對象的數學模型,這在實際中不容易得到;二、被控對象的數學模型不會改變或漂移,這在實際中更難做到。對簡單過程建立微分方程是可能的,但簡單過程的控制不麻煩,經驗法參數整定就搞定了,不需要費那個麻煩,而真正需要理論計算幫忙的回路,建立模型太困難,或者模型本身的不確定性很高,使得理論分析失去意義。經典控制理論在機械、航空、電機中還是有成功的應用,畢竟從F=ma出發,可以建立“所有”的機械系統的動力學模型,鐵疙瘩的重量又不會莫名其妙地改變,主要環境參數都可以測量,但是經典控制理論至少在化工控制中實用成功的例子實在是鳳毛麟角,給你一個50塊塔板的精餾塔,一個氣相進料,一個液相進料,塔頂、塔底出料加一個側線出料,塔頂風冷冷凝器,塔底再沸器加一個中間再沸器,你就慢慢建模去吧,等九牛二虎把模型建立起來了,風冷冷凝器受風霜雨雪的影響,再沸器的高壓蒸汽的壓力受友鄰裝置的影響,氣相進料的溫度和飽和度受上游裝置的影響而改變,液相進料的混合組分受上游裝置的影響而改變,但組分無法及時測量(在線氣相色譜分析結果要45 分鐘才能出來),動態特性全變了。
/ v* y" s5 d" H2 D4 j7 f( o& B5 M
5 C# ]' s0 s5 v5 I6 Y% f* p8 }8 k! W
4 [6 t- q. g* D% d 老家伙歌德兩百年前就說了,理論是灰色的,生命之樹常青。我們知道馬鹿喜歡金光的或者銀光的,至少也要紅的,不過只好將就啦,青綠地干活。在實用中,PID有很多表兄弟,幫著大表哥一塊打天下。* z7 |0 q3 h; ~
8 N, M) e& A2 t- ~! U
6 s& h" D- P* ^9 d 比例控制的特點是:偏差大,控制作用就大。但在實際中有時還嫌不夠,最好偏差大的時候,比例增益也大,進一步加強對大偏差的矯正作用,及早把系統拉回到設定值附近;偏差小的時候,當然就不用那么急吼吼,慢慢來就行,所以增益小一點,加強穩定性。這就是雙增益PID(也叫雙模式PID)的起源。想想也對,高射炮瞄準敵機是一個控制問題。如果炮管還指向離目標很遠的角度,那應該先盡快地把炮管轉到目標角度附近,動作猛一點才好;但炮管指向已經目標很近了,就要再慢慢地精細瞄準。工業上也有很多類似的問題。雙增益PID的一個特例是死區PID(PIDwith dead band),小偏差時的增益為零,也就是說,測量值和設定值相差不大的時候,就隨他去,不用控制。這在大型緩沖容器的液位控制里用得很多。本來緩沖容器就是緩沖流量變化的,液位到底控制在什么地方并不緊要,只要不是太高或太低就行。但是,從緩沖容器流向下游裝置的流量要盡可能穩定,否則下游裝置會受到不必要的擾動。死區PID對這樣的控制問題是最合適的。但是天下沒有免費的午餐。死區PID的前提是液位在一般情況下會“自動”穩定在死區內,如果死區設置不當,或系統經常受到大幅度的擾動,死區內的“無控”狀態會導致液位不受限制地向死區邊界“挺進”,最后進入“受控”區時,控制作用過火,液位向相反方向不受限制地“挺進”,最后的結果是液位永遠在死區的兩端振蕩,而永遠不會穩定下來,業內叫hunting(打獵?打什么?打鹿?)。雙增益PID也有同樣的問題,只是比死區PID好一些,畢竟只有“強控制”和“弱控制”的差別,而沒有“無控區”。在實用中,雙增益的內外增益差別小于2:1沒有多大意義,大于 5:1就要注意上述的持續振蕩或hunting的問題。+ H+ m) }/ A5 x6 K# y( V/ e3 f3 ?8 [7 \
2 A7 `1 h6 `. ^; q' p0 g+ a! j* a6 w9 N" F; e& H7 s' P( j. I" A
8 D2 U- c* n" j+ W5 [5 k
雙增益或死區PID的問題在于增益的變化是不連續的,控制作用在死區邊界上有一個突然的變化,容易誘發系統的不利響應,平方誤差PID就沒有這個問題。誤差一經平方,控制量對誤差的曲線就成了拋物線,同樣達到“小偏差小增益、大偏差大增益”的效果,還沒有和突然的不連續的增益變化。但是誤差平方有兩個問題:一是誤差接近于零的時候,增益也接近于零,回到上面死區PID的問題;二是很難控制拋物線的具體形狀,或者說,很難制定增益在什么地方拐彎。對于第一個問題,可以在誤差平方PID上加一個基本的線性PID,是零誤差是增益不為零;對于后一個問題,就要用另外的模塊計算一個連續變化的增益了。具體細節比較瑣碎,將偏差送入一個分段線性化(也就是折線啦)的計算單元,然后將計算結果作為比例增益輸出到PID控制器,折線的水平段就對應予不同的增益,而連接不同的水平段的斜線就對應于增益的連續變化。通過設置水平段和斜線段的折點,可以任意調整變增益的曲線。要是“野心”大一點,再加幾個計算單元,可以做出不對稱的增益,也就是升溫時增益低一點,降溫時增益高一點,以處理加熱過程中常見的升溫快、降溫慢的問題。
' J. y1 s% ~+ L9 F5 V( d2 `- D; o2 k6 j3 k
4 _# A$ ?5 J( A t0 F9 J : f' i0 d1 Q1 A& |' l \$ y
雙增益或誤差平方都是在比例增益上作文章,同樣的勾當也可以用在積分和微分上。更極端的一種PID規律叫積分分離 PID,其思路是這樣的:比例控制的穩定性好,響應快,所以偏差大的時候,把PID中的積分關閉掉;偏差小的時候,精細調整、消除余差是主要問題,所以減弱甚至關閉比例作用,而積分作用切入控制。概念是好的,但具體實施的時候,有很多無擾動切換的問題。
" @) C: L! c! f( w2 S' P) c2 K
* i/ o+ n1 X% \! `
: @/ e3 G$ V7 y. W) K% n8 H 這些變態的PID在理論上很難分析系統的穩定性,但在實用中解決了很多困難的問題。大言不慚一句,這些PID本人在實際中都用過。
" v: \2 V9 b) Y9 P4 W
" Y6 I: e( \9 g' l0 o" ?7 h$ Y
8 l4 @; ^1 B4 u. E- j2 ] 復雜結構PID6 e- g% T/ |/ H1 o" x5 n& C% B
9 ~7 ~) F/ E; `9 i
% a) B3 y+ Q# m$ o* ]8 n# R 打仗時,如果敵人太頑固,要么換更大的炮,把敵人轟倒;要么采用更巧妙的戰術,把敵人暈倒。控制也是一樣,單回路PID難以解決的問題,常常可以通過更巧妙的回路結構來解決。3 e! I4 C3 S8 s% {* w4 y7 p7 e4 H" [
' @5 z5 l. w- e8 ~$ l
2 u& o- E, A! T9 T. `
單一的PID回路當然可以實現擾動抑制,但要是主要擾動在回路中,而且是明確的,加一個內回路作幫手是一個很不錯的主意。還記得洗熱水澡的例子嗎?要是熱水壓力不穩定,老是要為這個而調整熱水龍頭,那很麻煩。要是有一個人專門負責根據熱水壓力調節熱水流量,把熱水壓力穩定下來,而且穩定在標定值,那洗澡的時候,水溫就容易控制多了,只要告訴那個人現在需要多少熱水流量,而不必煩心熱水壓力對熱水流量的影響。這個負責熱水流量的控制回路就是內回路,也叫副回路,而洗澡的溫度就是外回路,也叫主回路,當然是主回路指揮副回路,就像自動化指揮機械化、學自控的人指揮學機電的人……打住打住,再扯遠了要挨鹿踹了,或者馬踹、牛踹、驢踹……。這種主回路套副回路的結構叫串級控制(cascade control),曾經是單回路PID后工業上第一種“先進過程控制”,現在串級已經用得很多了,也不再有人叫它“先進過程控制”了。串級控制最主要的功用是抑制回路內的擾動,增強總體控制性能。不過串級也不能亂用。如果主回路和副回路的相應速度差不多,或者主回路的相應速度甚至慢于副回路(通過變態的調試是可以做到的),這樣的串級要出問題。理論上可以用共振頻率什么的分析,但是不用費那個事,用膝蓋想想就知道,一個急性子的頭兒把一個溫吞水的下屬指揮得團團轉,結果只能是大家都精疲力竭,事情還辦砸了。相反,一個鎮定自若的頭兒指揮一個手腳麻利的下屬,那事情肯定辦得好。
/ @& {+ Q/ ]! e+ I- H, V+ ~! q9 h- H5 j% r
- ~# S5 R( s1 Y: G3 B5 {5 Y0 M7 ^
; ^% P6 W$ ^$ E; l0 V 如果主要擾動在回路以外,但是可以預知,那就要用另一個辦法,就是馬鹿前面說到的前饋了。還是用洗熱水澡的例子。如果冷水管和同一個水房的抽水馬桶功用,你在洗澡,別人一抽水,那你就變煮熟的龍蝦了(本想說猴子PP的,但是那個不雅,我們要五講四美不是?)。這個時候,要使那個人在抽水的同時告訴你一聲,你算好時間,算好量,猛減熱水,那溫度還是可以大體不變的。這就是所謂前饋控制(feed-forward control)。前饋控制有兩個要緊的東西:一是定量的擾動對被控變量的影響,也就是所謂前饋增益;二是擾動的動態,別人抽水到洗澡龍頭的水溫變熱,這里面有一個過程,不是立時三刻的。如果可以精確知道這兩樣東西,那前饋補償可以把可測擾動完全補償掉。但實際上沒有精確知道的事情,要是指望前饋來完全補償,弄巧成拙是肯定的。所以前饋通常和反饋一起用,也就是在PID回路上再加一個前饋。一般也只用靜態前饋,也就是只補償擾動對被控變量的靜態影響,而忽略擾動的動態因素,主要是為了靜態前饋已經把前饋80%的好處發掘出來了,動態前饋既復雜又不可靠,在PID回路里很少有人用。理論上的前饋都是在PID 的控制作用上再加一個前饋作用,實際上也可以乘一個控制作用。乘法前饋的作用太猛,我從來沒有用過,一般都是用加法。在實施中,前饋是和擾動的變化(也就是增量)成比例的,所以擾動變量不變了,前饋作用就消失,否則,整定前饋控制增益會對PID主回路造成擾動。前饋增益可以根據粗略計算得到,比如說,抽水的量會造成溫度下降多少、需要調整多少熱水流量才能維持溫度,這不難從熱量平衡算出來。不想費這個事的話,也可以從歷史數據中推算。一般算出來一個前饋增益后,打上7折甚至5折再用,保險一點,不要矯枉過正。! i; f6 M1 O% f! _8 ^0 v
2 c+ o0 j% k1 ^5 Q2 C) }% }
1 W" n& S z* ` " t) B2 s8 l# n. Y, v- R
前饋作用一般是用作輔助控制作用的,但是在特殊情況下,前饋也可以作為“預加載” (pre-loading)作為基準控制作用。比如說,在一個高壓系統的啟動過程中,壓力可以從靜止狀態的常壓很快地什到很高的壓力。高壓系統不容許閥門大幅度運動,所以控制增益都比較低,但是這樣一來,啟動升壓過程中,壓力控制的反應就十分遲緩,容易造成壓力過高。這時用壓縮機的轉速或高壓進料的流量作前饋,將壓力控制閥“預先”放到大概的位置,然后再用反饋慢慢調節,就可以解決這個問題。
0 [! @6 z& m. t; o5 B0 V# @" k0 k T( {+ I
?6 p) S1 ?7 o
; T. I. Y# m0 l% o
有點搞笑兄在前面提到用單個閥門有時難以控制大 范圍變化的流量,這是一個很實際的問題。工業閥門一般turndown只有10:1,也就是說,如果這個閥門的最大流量是100噸/小時的話,低于10噸/小時就難以控制了,當然,高于90噸/小時也幾近失去控制。所以,要真的保證0-100的精確控制,需要將一個大閥和一個小閥并列,小閥負責小流量時的精確控制,大閥負責大流量時的精確控制,這就是所謂的分程控制(split range control)。分程控制時,小閥首先打開,超過小閥最大流量是小閥就固定在全開位置,大閥開始打開,接過控制。這是開-開型分程控制。也有關-開型分程控制,比如反應器夾套溫度控制,隨溫度逐漸上升,冷卻水逐漸關閉,直到冷卻水全關,加熱蒸氣開始打開。分程控制當然不一定只有兩截,三截甚至更多都是可以的,道理都一樣。分程控制的問題在于不同閥門的交接點。閥門在特別小的開度時,控制非常不靈敏,前面說到的10:1也是這個道理。所以實用中,開-開型分程控制常常在交接點附近有一段重疊,也就是小閥快要全開但還沒有全開時,大閥已經開始動作,這樣,到小閥全開、不能再動彈時,大閥已經進入有效控制范圍。關-開型分程控制常常在交接點設置一個死區,避免出現兩個閥都有一點點開度的情況。分程控制的交接點的設置有一點講究,應該根據閥的大小。比如A閥比 B閥大一倍,那分程點應該設在1/3先開B閥,而不是懶漢做法的1/2。+ K" Z/ H! [9 @* B3 W
+ Q/ {: m' @8 N7 U4 c' I
( j$ J! L, P% ~) B1 q
3 z' {# w2 U$ ~; L/ f 很多過程參數都是可以測量的,但也有很多參數是沒法直接測量的,這時,如果能夠通過別的可以測量的過程參數來間接計算真正需要控制的參數,這就是所謂的推斷控制(inferential control)。比如精餾塔頂的產品純度可以用氣相色譜(gaschromatograph,GC)來測量,但結果要等40分鐘才能出來,用來做實時控制,黃花菜都涼了。推斷控制是和“軟傳感器”(soft sensor)的概念緊密相連的。對精餾塔塔頂純度這個例子來說,可以用純度和塔頂溫度、壓力作一個數學模型,用可以測量的溫度和壓力,間接計算出純度。在計算機控制普及的今天,這是很容易實現的,但是在很多地方,推斷控制仍然被看成很神秘的東西,悲哀。0 j' G; n( y0 R0 g* x
; J9 C+ r+ r, W
" H& o y6 U* `
有的時候,對同一個變量有不止一個控制手段。比如說,風冷器有風扇的轉速可以調節,也有百葉窗的開度可以調節。風扇轉速的效果快,控制精確;百葉窗開度的效果猛,不容易掌握,但有利于節能。所以,可以用風扇的快速響應來控制溫度,但是用百葉窗開度來通過溫度間接地緩慢地影響風扇的轉速,使風扇轉速回到最經濟的設定。當然百葉窗開度的控制回路必須要比風扇轉速的控制回路整定得慢得多,一般是緩慢的純積分控制,否則兩人要打架。由于這相當于控制風扇轉速的“閥位”,工業上稱其為閥位控制(valve position control)。這個閥位控制也可以變一變,風扇轉速高于某一數值(比如80%的最大轉速)時,把百葉窗開大一格,還是高就繼續開大;風扇轉速低于某一數值(比如低于20%最大轉速)時,把百葉窗關小一格。這實際上是一個單向的積分作用,不同的地方有兩點:
! A$ ~5 w4 c8 P. b0 Q. L- R* G' x' [- l4 b! S$ r
; Q. B$ d8 d7 m; r' ~ 一、有兩個設定值,由風扇轉速是高還是低而定 ) M: G: D, \4 Y2 T( h
# T7 m$ p) X9 l4 A- x
' S# J: t1 F% J; [1 K 二、積分作用只有在風扇轉速在這兩個“極限”的外面起作用,在里面時,百葉窗的開度不變。: j. s- U+ h! A$ E5 e. ]- L
% i* n v- K& t7 t
! h" D' _0 E4 C4 Z3 l W: ]2 d
這樣,風扇轉速不必回到一個特定值,而是可以在一個范圍內浮動。
9 w( u1 w# g2 @+ \ @! w7 R+ C2 a; _, y9 ]6 r* @
7 p( `- i2 h1 Q0 T1 K, t 另 外一個兩個控制器“競爭”一個控制閥的情況是選擇性控制(override control或selective control)。舉個例子,鍋爐的溫度由燃料流量控制,溫度高了,燃料流量就減下來,但是燃料流量低到燃料管路壓力低于爐膛壓力,那要出現危險的回火,所以,這時,燃料管路壓力就要接管控制,而犧牲爐膛溫度。換句話說,正常時候,爐膛溫度控制起作用,燃料管路壓力低于一定數值時,燃料管路壓力控制器作用。在實施時,就是爐膛溫度控制器和燃料管路壓力控制器的輸出都接到一個高選器,然后搞選器的輸出接到實際的燃料閥。這個概念很清楚,但是初次接觸選擇性控制的人,常常容易被高選還是低選搞糊涂,明明是壓力太低,怎么是高選呢?其實,只要記住高選還是低選是從閥門這一頭看的,和溫度、壓力的高度沒有關系。如果“非常”變量超過界限了,你要閥門打開,那就是高選;你要閥門關閉,那就是低選。4 s# D4 E# {" J
* W. e+ [, G H
* `- X5 Y( J% @+ q0 _+ p PID從二、三十年到開始在工業界廣泛應用,戲法變了幾十年,也該換換花樣了。PID說一千道一萬,還是經典控制理論的產物。50-60年代時,什么都要現代派,建筑從經典的柱式、比例、細節的象征意義,變到“形式服從功能”的鋼架玻璃盒子;汽車從用機器牽引的馬車,變到流線型的鋼鐵的藝術;控制理論也要緊跟形勢,要現代化。這不,美國佬卡爾曼隆重推出……現代控制理論。
2 H. g( ~% ~; W4 O7 t |