怎樣實現不同控制演算法的切換?
如何實現控制系統中,不同階段,不同控制演算法的切換,比如開始階段採用模糊控制,之後採用PID。以及怎樣在simulink中實現。
謝邀。
看來提問者在工作中遇到了十分困難的問題。
本人在實際工作中確實使用過演算法切換,但是並沒有提問中的那麼高大上(神經網路,模糊控制等等演算法的切換)。
這裡答主舉出一個最普通的演算法切換的例子,相信你也知道,積分分離:
在普通PID控制中引入積分的目的,主要是為了消除靜態誤差,提高控制精度。但在過程的啟動、結束或大幅度增減設定值時,短時間內系統輸出很大的偏差,會造成PID運算的積分積累,致使控制量超過執行機構可能允許的最大動作範圍所對應的極限控制量,引起系統較大的超調,甚至引起系統較大的振蕩。
為了克服這一問題,引入了積分分離的概念,其基本思路是當被控量與設定值偏差較大時,取消積分作用;當被控量接近給定值時,引入積分控制,以消除靜差,提高精度。
其實答主認為,談到控制演算法控制,積分分離不可不談。
在PD控制與PID控制之間切換,看起來改動小,實際效果明顯。
至於其他的高大上演算法,答主確實沒有在實際工作上運用過,所以也不好作答。
最後,至於simulink,看答主什麼時候有時間做一個積分分離的simulink吧。
=================20171102================
增加一個簡單的simulink模擬吧。

這就是一個簡單的simulink的積分分離的模擬(答主simulink功底不好,請不要吐槽)。
上面的輸入輸出是積分分離,當輸入輸出誤差在20%以內有積分,以外的話是只有PD。
下面的輸入輸出是正常的PID。
上下的參數完全一樣,從示波器上可以看出兩道輸入輸出的區別。

備註:
(1)使用積分分離最重要的是要注意分離的區域大小(上圖中是20%)。如果太大,那麼超調還是會比較嚴重,如果太小,有可能在只有PD的情況下可能一直無法達到積分區域。
(2)對於某一些情況下,可能要考慮退出積分區域之後積分清零(上圖中沒有清零)。
如果覺得好,為什麼不點個贊呢?
簡單邏用simulunk里的邏輯模塊結合switch就行了,複雜邏輯用stateflow。實際工程中切換時還要考慮bumpless切
在做simulink模擬時正好遇到這個問題,簡單寫下我的思路。
如果是在simulink模擬中做控制演算法切換,有回答提到通過switch做個簡單切換,但僅僅做切換會產生一些問題。
比如用兩套PID參數(設為PID1和PID2)控制一個系統,當系統處於某種狀態或者輸入改變的時候需要切換到另一套參數(即由PID1切換到PID2),直接通過switch可能會輸出很差的控制量,導致系統失控。這是由於當PID1控制系統的時候,誤差量也輸入到了PID2,即PID2的輸出量也會隨著時間變化,當switch到PID2的時候,它之前的輸出量可能會對現在的量造成影響(主要是積分環節)。因此,在PID2切換到系統之前,需要將輸入到PID2的量屏蔽掉。
當然如果控制演算法的輸出與之前時間的輸入無關,那麼通過簡單切換即可。
而對於實際問題來說,當控制演算法沒有作用時,誤差量肯定沒有輸入到演算法中,所以只需要程序上的簡單切換。
推薦閱讀:
※用 simulink 模擬電機,電機的原理已經了解,但是之前沒用過 simulink 有什麼好的推薦快速上手 simulink 的?
※使用simulink代碼生成,硬體底層函數自己寫更好,還是應該直接生成到目標晶元中?
※怎樣提高simulink建模能力?
※Interpreted matlab function與matlab function兩個模塊區別?
TAG:控制演算法 | simulink | PIDControllerPID控制 |
