app开发者平台在数字化时代的重要性与发展趋势解析
1122
2022-09-07
PLC单参数模糊控制(含代码)
JZGKCHINA
工控技术分享平台
一、 说明
通过西门子 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_boll[7];//条件分支0;结果分支1
0014 IF NOT #clause_type THEN //当前为调节分支
0015 IF #then THEN //是否分析结果
0016 #then := 0; //
0017 #if_val := #MU_MAX; //复位mu
0018 END_IF;
0019 IF BYTE_TO_INT(#input) < BYTE_TO_INT(#input_memf[#label,0]) THEN //如果输入在点1 左边
0020 #mu:=0; //隶属度为0
0021 ELSE //输入在点1 右边
0022 IF BYTE_TO_INT(#input) < BYTE_TO_INT(#input_memf[#label,2]) THEN //输入在点1,3 之间
0023 #temp:=#input; //用斜率1 计算隶属度
0024 #temp:=#temp-BYTE_TO_INT(#input_memf[#label,0]);
0025 IF #input_memf[#label,1]=0 THEN //斜率1 为0
0026 #temp:=#MU_MAX; //隶属度为最大值
0027 ELSE
0028 //斜率1 不为0
0029 #temp:=#temp*BYTE_TO_INT(#input_memf[#label,1]); //根据斜率1 计算隶属度
0030 END_IF;
0031 IF #temp < 16#100 THEN //隶属度未超限
0032 #mu:=INT_TO_BYTE(#temp);
0033 ELSE
0034 //隶属度超限
0035 #mu := #MU_MAX;
0036 END_IF;
0037 ELSE //输入在点3 右边,即第二天斜线上
0038 #temp:=#input;
0039 #temp:=#temp-BYTE_TO_INT(#input_memf[#label,2]);
0040 #temp:=#temp*BYTE_TO_INT(#input_memf[#label,3]);
0041 #temp:=BYTE_TO_INT(#MU_MAX)-#temp;
0042 IF #temp < 0 THEN //隶属度小于0
0043 #mu:=0;
0044 ELSE
0045 // 隶属度不小于0
0046 #mu := INT_TO_BYTE(#temp);
0047 END_IF;
0048 END_IF;
0049 END_IF;
0050 #if_val:=#mu;
0051 #label:=#label+1;
0052
0053 ELSE //当前为结果分支
0054 #then := 1; //开始计算结果
0055 IF BYTE_TO_INT(#outputs[BYTE_TO_INT(#clause_valIO_NUM)]) < BYTE_TO_INT(#if_val) THEN
0056 #outputs[BYTE_TO_INT(#clause_valIO_NUM)] := #if_val;
符号地址类型注释
#clause Int
#clause_type Bool
#clause_val Byte
#clause_val_boll A rray
#DEFAULT_VALUE 16#00 Byte
#denominator DInt
#fuzzy_out Byte
#if_val Byte
#in Real
#input Byte
#input_memf A rray
#insh Real
#insl Real
#IO_NUM 16#07 Byte
#j Int
#label Int
#mu Byte
#MU_MAX 16#FF Byte
#numerator DInt
#out Real
#output_memf A rray
#outputs A rray
#outsh Real
#outsl Real
#rules A rray
#temp Int
#then Bool
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~