有关错误解决办法MATLAB 功能强大,很多同学用其做控制算法的仿真但是其中的 fuzzy logic controller 刚开始用常常容易出错 常见报错:1、MinMax 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 types2、An error occurred while propagating data type 'boolean' from block 'mkkzq1/Subsystem/Fuzzy Logic Controller with Ruleviewer/Fuzzy Logic Controller/FISWizard/Defuzzification1/Zero Strength (COA)', output port 1。
以下是解决方案:1、fis 编辑器(MATLAB 的 comma nd wi ndow 中键入 fuzzy 打开) 中,建立好规贝U后,file-exp or t-to wor kspace2、对于7.0版本,simulink模型窗口菜单中,Simulation-Configuration Parameters-Implement logic signals as boolean data 前面默认的勾选去掉3•而对于6.5及以前版本,则是在SIMULATION -SIMULATIONPARAMETERS-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 whilepropagating data type'boolean'from block' ',outport 1解决方案:在simulink parameter中,找到advance选项卡,把第一二个选项 设为 off。
4 步教你学会使用 matlab 模糊控制工具箱Matlab 模糊控制工具箱为模糊控制器的设计提供了一种非常便 捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊 化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器 而且修改也非常方便下面将根据模糊控制器设计步骤,一步步利用 Matlab 工具箱设计模糊控制器首先我们在Matlab的命令窗口 (command window)中输入fuzzy, 回车就会出来这样一个窗口心d methodCursenl VariablemmT叩m1011ISjsten " Untitled': 1 inpii.. 1 tnlptS. and 0 idesJ FIS Ediln匚;nut n LedFile Eli t ViUntrtled脚自mdanijoutputFIS hlamG'U破tiedNameOk 'inelticid(nnplicatioriAg§i 屯 gahciiiOeluzaifcabonCWllJOid面我们都是在这样一个窗口中进行模糊控制器的设计1.确定模糊控制器结构:即根据具体的系统确定输入、输出量这里我们可以选取标准的二维控制结构,即输入为误差e和误差 变化ec,输出为控制量u。
注意这里的变量还都是精确量相应的模 糊量为E,EC和U,我们可以选择增加输入(Add Variable)来实现双 入单出控制结构marntfani)Zl口叵区I-J FT? Editor: UntlTlEClFileEdit ViewR Bnsrsrg wlpu t vaai^tfe 1 ta,BUQ i methc-dimplit^ionAggregalioriDehjssficatancer^roidFIS Mane:UriftkSdFIS Ijfie.nfismdanAnd methodCunenlVsiJbJprj^me I [[Dl]2.输入输出变量的模糊化:即把输入输出的精确量转化为对应语言变量的模糊集合首先我们要确定描述输入输出变量语言值的模糊子集,如{NB, NM, NS,ZO,PS, PM, PB},并设置输入输出变量的论域,例如我们 可以设置误差E (此时为模糊量)、误差变化EC、控制量U的论域均 为{-3, -2, -1, 0, 1, 2, 3};然后我们为模糊语言变量选取相应的 隶属度函数在模糊控制工具箱中,我们在 Member Function Edit 中即可完 成这些步骤。
首先我们打开Member Function Edit窗口.1&1a.5oD.2 D=3 QJ 0.5 B.S 0.7 0.3 D.9inpLrt variate 'f匚回区]-J Jf^Bbersrhip Fimct i nn Sdito^ ■ Ont it Led7iU Edri Vl fiWFIS Variablesktembership funzdion plots &0时$匚 ijrentVaiiAhf?Name ET 删 inputRang亡 | 0l|C-uirerv Memoer?hip Function Icick ori MF『沃4炊]Mane | mf1~刊呼 | himf 匕£P.mians | [-Q^OO.4]Dispia^ Range | ® 卄Help匚加m然后分别对输入输出变量定义论域范围,添加隶属函数,以E为例,设置论域范围为[-3 3],添加隶属函数的个数为 7MF typeCur^n! VanMarneTjipeRanjeNumber c?t H FsWJI L3 3]Disj邮 Ftartgb | [.33]Selected t碱 T1然后根据设计要求分别对这些隶属函数进行修改,包括对应的语言变量,隶属函数类型。
3.模糊推理决策算法设计:即根据模糊控制规则进行模糊推理,并决策出模糊输出量首先要确定模糊规则,即专家经验对于我们这个二维控制结构 以及相应的输入模糊集,我们可以制定49 条模糊控制规则(一般来 说,这些规则都是现成的,很多教科书上都有),如图1. ||吃 i 汀用;and [EC is 酗 Mmn 也嵯 PSFils Edk t 吩州 OptionsOW«) and (ECOMH&P & 画 P)3 H|EisNBlar>d(ECisNS1 Jken(UnPM](H4 If DE is ND] and (EC bZ) then |U is FM] (115 llOEhNBjand(ECisP5jlhehjU 咏価 ? I! IE isNB)and(E匚 it FW] l囲〔U 詠己 口] 7 11 (E is MB) and (EC is FSUhtn 1U is ZJI1T fcWw NM| and (EC is 礪then (U is PB] (|j9 Ift if NM应 UK 战 NMjthen 皿 k P的⑴ 10. IF[E liNMjand [EC is NSUhm (Lf sFM)(11Weight:Defel&iule mJditfe | Chaoaenjfe 'FlS Name: fu?^1制定完之后,会形成一个模糊控制规则矩阵,然后根据模糊输入量按照相应的模糊推理算法完成计算,并决策出模糊输出量。
4.对输出模糊量的解模糊:模糊控制器的输出量是一个模糊集合, 通过反模糊化方法判决出一个确切的精确量,凡模糊化方法很多,我 们这里选取重心法And methodOr methodImplicationAggregationDefuzziJi 匚少 bn5.然后Export to disk,即可得到一个.fis文件,这就是你所设计的模糊控制器matlab/simulink模糊控制器应用实例前面我们已经利用模糊控制工具箱设计好了一个模糊控制器(假 定我们存为fuzzyl.fis),下面我们检验一下,看看我们的控制器 到底怎么样以一个简单的电机控制为例,我们在Simulink中建立 了它的模糊控制系统如下:在用这个控制器之前,需要用 readfis 指令将 fuzzy1.fis 加载 到matlab的工作空间,比如我们用这样的指令:myFLC二readfis (‘fuzzyl.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 add it ional parame ters,将输出数据类型改为 specify via dialog,然后选uint(8)即可;但。