1. 程式人生 > >4步教你學會使用matlab模糊控制工具箱

4步教你學會使用matlab模糊控制工具箱

======================================================================================

MATLAB功能強大,很多同學用其做控制演算法的模擬 

但是其中的fuzzy logic controller剛開始用常常容易出錯 

常見報錯: 

1MinMax blocks do not accept 'boolean' signals. The input signal(s) of block 'mkkzq1/Subsystem/Fuzzy Logic Controller with Ruleviewer/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Max (COA)' must be one of the MATLAB 'uint8', 'uint16', 'uint32', 'int8', 'int16', 'int32', 'single', or 'double' data types

2An error occurred while propagating data type 'boolean' from block 'mkkzq1/Subsystem/Fuzzy Logic Controller with Ruleviewer/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Zero Strength (COA)', output port 1。 

以下是解決方案: 

1fis編輯器(MATLABcommand window中鍵入fuzzy開啟)中,建立好規則後,file-export-to workspace 

2、對於

7.0版本,simulink模型視窗選單中,Simulation-Configuration Parameters-Implement logic signals as boolean data前面預設的勾選去掉 

3.而對於6.5及以前版本,則是在SIMULATION -SIMULATION PARAMETERS-ADVANCED將boolean logic signals選為off,強烈推薦用這個

用FIS(Mamdani)設計完模糊控制器之後,連線到控制系統中進行模擬,每次總出現這兩個錯誤:1)Block error Max(coa): MinMax blocks do not accept'boolean'signals.

2)block error Zero strength(coa):An error occurred while propagating data type'boolean'from block'....',outport 1

解決方案:

在simulink parameter中,找到advance選項卡,把第一二個選項設為off。

====================================================================================

matlab/simulink模糊控制器應用例項

前面我們已經利用模糊控制工具箱設計好了一個模糊控制器(假定我們存為fuzzy1.fis),下面我們檢驗一下,看看我們的控制器到底怎麼樣。以一個簡單的電機控制為例,我們在Simulink中建立了它的模糊控制系統如下:

在用這個控制器之前,需要用readfis指令將fuzzy1.fis載入到matlab的工作空間,比如我們用這樣的指令:myFLC=readfis(‘fuzzy1.fis’);就建立了一個叫myFLC的結構體到工作空間,並在fuzzy logic controller中引數設為:myFLC。

可以看到,在模糊控制器的輸入和輸出均有一個比例係數,我們叫它量化因子,它反映的是模糊論域範圍與實際範圍之間的比例關係,例如,模糊控制器輸入輸出的論域範圍均為[-3,3],而實際誤差的範圍是[-10,10],誤差變化率範圍是[-100,100],控制量的範圍是[-24,24],那麼我們就可以算出量化因子分別為0.3,0.03,8。量化因子的選取對於模糊控制器的控制效果有很大的影響,因此要根據實際情況認真選取哦。

好,現在我們可以設定模擬步長,比如定步長的10ms,就可以運行了。

執行後,產生這樣一個錯誤:

MinMax blocks do not accept 'boolean' signals. The input signal(s) of block 'test_fuzzy/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Max (COA)' must be one of the MATLAB 'uint8', 'uint16', 'uint32', 'int8', 'int16', 'int32', 'single', or 'double' data types

我想很多朋友做模糊控制的時候都會遇到這個情況。沒關係,這裡提供兩個解決辦法:

1.直接在Defuzzification1這個模組中的那個比較環節後加入資料型別轉換模組,將boolean轉化為double型,或者雙擊那個比較模組,選中show additional parameters,將輸出資料型別改為specify via dialog,然後選uint(8)即可;但是在模擬之後,又會發現很多地方都存在這個問題,因此你不得不一個一個去修改,如果你不怕累的話。

2.第二個方法是最簡單的,直接在simulation parameters->advanced將boolean logic signals選為off,強烈推薦你用這個。

好了,這些都解決了,我們就可以模擬了,例如給個方波訊號,可以得到模擬曲線如下