一、 说明 通过西门子 1200 控制器,使用博途 V13SP1 的 scl 编程语言实现模糊控制算法,反模糊计算复杂,为了简化算法,将输出功能函数简化为矩形,隶属度只取矩形的中点。 二、 实验测试 通过 matlab7.0 测试模糊控制结果,如下 1、 测试 1,输入 0.5,输出 2、 测试 2,输入 0.85,输出 3、 测试 3,输入 1.1 4、 测试 4,输入‐0.44,输出 5、 测试 5,输入‐1.2 程序代码 Fis 名称 数据类型偏移量默认值可从 HMI 访问 在 HMI 中可见 设置值注释 Input in Real 0.0 0.0 True True False insh Real 4.0 0.0 True True False insl Real 8.0 0.0 True True False outsh Real 12.0 0.0 True True False outsl Real 16.0 0.0 True True False Output out Real 20.0 0.0 True True False InOut Static then Bool 24.0 false True True False clause_type Bool 24.1 false True True False clause_val Byte 25.0 16#0 True True False c lause_val_boll Array[0..7] of Bool 25.0 False False False clause_val_boll[0] Bool 0.0 False False False clause_val_boll[1] Bool 0.1 False False False clause_val_boll[2] Bool 0.2 False False False clause_val_boll[3] Bool 0.3 False False False clause_val_boll[4] Bool 0.4 False False False clause_val_boll[5] Bool 0.5 False False False clause_val_boll[6] Bool 0.6 False False False clause_val_boll[7] Bool 0.7 False False False if_val Byte 26.0 16#0 True True False mu Byte 27.0 16#0 True True False temp Int 28.0 0 True True False label Int 30.0 0 True True False input Byte 32.0 16#0 True True False fuzzy_out Byte 33.0 16#0 True True False clause Int 34.0 0 True True False numerator DInt 36.0 0 True True False denominator DInt 40.0 0 True True False j Int 44.0 0 True True False outputs Array[0..4] of Byte 46.0 True True False outputs[0] Byte 0.0 16#0 True True False outputs[1] Byte 1.0 16#0 True True False outputs[2] Byte 2.0 16#0 True True False outputs[3] Byte 3.0 16#0 True True False outputs[4] Byte 4.0 16#0 True True False output_memf Array[0..4] of Byte 52.0 True True False output_memf[0] Byte 0.0 0 True True False output_memf[1] Byte 1.0 64 True True False output_memf[2] Byte 2.0 128 True True False output_memf[3] Byte 3.0 191 True True False output_memf[4] Byte 4.0 255 True True False input_memf Array[0..4, 0..3] of Byte 58.0 True True False input_memf[0,0] Byte 0.0 16#00 True True False input_memf[0,1] Byte 1.0 16#00 True True False input_memf[0,2] Byte 2.0 16#0D True True False input_memf[0,3] Byte 3.0 16#07 True True False input_memf[1,0] Byte 4.0 16#1A True True False input_memf[1,1] Byte 5.0 16#0A True True False input_memf[1,2] Byte 6.0 16#5E True True False input_memf[1,3] Byte 7.0 16#0F True True False input_memf[2,0] Byte 8.0 16#48 True True False input_memf[2,1] Byte 9.0 16#08 True True False input_memf[2,2] Byte 10.0 16#95 True True False input_memf[2,3] Byte 11.0 16#08 True True False input_memf[3,0] Byte 12.0 16#95 True True False input_memf[3,1] Byte 13.0 16#14 True True False input_memf[3,2] Byte 14.0 16#BF True True False input_memf[3,3] Byte 15.0 16#06 True True False input_memf[4,0] Byte 16.0 16#BF True True False input_memf[4,1] Byte 17.0 16#06 True True False input_memf[4,2] Byte 18.0 16#FF True True False FIS / FIS1 [CPU 1214C AC/DC/Rly] / 程序块 Fis [FB1] Fis 属性 常规 名称 Fis 编号 1 类型 FB 语言 SCL 编号 自动 信息 标题 作者 注释 系列 版本 0.1 用户自定义 ID 名称数据类型偏移量默认值可从 HMI 访问 在 HMI 中可见 设置值注释 input_memf[4,3] Byte 19.0 16#00 True True False rules Array[0..9] of Byte 78.0 True True False rules[0] Byte 0.0 #GAP_ZERO True True False rules[1] Byte 1.0 #TURN_ZERO True True False rules[2] Byte 2.0 #GAP_VSMALL True True False rules[3] Byte 3.0 #TURN_VSMALL True True False rules[4] Byte 4.0 #GAP_SMALL True True False rules[5] Byte 5.0 #TURN_SMALL True True False rules[6] Byte 6.0 #GAP_MEDIUM True True False rules[7] Byte 7.0 #TURN_MEDIUM True True False rules[8] Byte 8.0 #GAP_BIG True True False rules[9] Byte 9.0 #TURN_BIG True True False Temp Constant GAP_ZERO Byte 16#00 GAP_VSMALL Byte 16#01 GAP_SMALL Byte 16#02 GAP_MEDIUM Byte 16#03 GAP_BIG Byte 16#04 TURN_ZERO Byte 16#80 TURN_VSMALL Byte 16#81 TURN_SMALL Byte 16#82 TURN_MEDIUM Byte 16#83 TURN_BIG Byte 16#84 MU_MAX Byte 16#FF IO_NUM Byte 16#07 LABEL_NUM Byte 16#70 DEFAULT_VALUE Byte 16#00 Totally Integrated Automation Portal 0001 //------------------------------初始化-------------------------------------------------- 0002 #label:=0; 0003 #then:=0; 0004 #if_val:=#MU_MAX; 0005 0006 //------------------------------输入值归一化-------------------------------------------- 0007 //#input:=INT_TO_BYTE(REAL_TO_INT((#in-#insl)/(#insh-#insl)*255.0)); 0008 #input := DINT_TO_BYTE(TRUNC((#in - #insl) / (#insh - #insl) * 255.0)); 0009 //#input := 16#c5; 0010 //----------------------------模糊控制算法---------------------------------------------- 0011 FOR #clause := 0 TO 9 DO 0012 #clause_val := #rules[#clause];//存储当前规则 0013 #clause_type := #clause_val_b |
/1
|手机版|免责声明|本站介绍|工控课堂
( 沪ICP备20008691号-1 )
GMT+8, 2025-12-23 02:56 , Processed in 0.086719 second(s), 23 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.