




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近在论坛看到好多网友寻找西门子PLC FB41的SCL源码,现在就将我从网上搜集(因原始出处好像不能访问了,时间久了我也忘记了,)的源码贴出来,此源程序来源于网络,不保证编译后与原版一致,仅供参考。源码我粗略看了一遍,好象是不完全微分PID,但由于使用的是位置式PID,所以里面还做了手自动的无扰动切换,但个人感觉无扰动切换还是增量PID好,无需做任何处理就直接支持。源码可以通过编译,内容如下:FUNCTION_BLOCK CONT_CTITLE =continuous PID controllerAUTHOR : MTFAMILY : ICONTNAME : CONT_CVERSION : 1.5KNOW_HOW_PROTECTVAR_INPUT COM_RST : BOOL := FALSE;/完全重启动 MAN_ON : BOOL := TRUE; /手动值打开 PVPER_ON : BOOL := FALSE;/外设过程变量打开 P_SEL : BOOL := TRUE; /比例作用打开 I_SEL : BOOL := TRUE; /积分作用打开 INT_HOLD : BOOL := FALSE;/积分作用保持 I_ITL_ON : BOOL := FALSE;/积分作用初始化 D_SEL : BOOL := FALSE;/微分作用打开 CYCLE : TIME := T#1S; /采样时间 SP_INT : REAL := 0.0; /内部设定值 PV_IN : REAL := 0.0; /过程变量输入 PV_PER : WORD := W#16#0; /外设过程变量 MAN : REAL := 0.0; /手动值 GAIN : REAL := 2.0; /比例增益 TI : TIME := T#20S;/积分复位时间 TD : TIME := T#10S;/微分时间 TM_LAG : TIME := T#2S; /微分作用时间延时 DEADB_W : REAL := 0.0; /死区带宽 LMN_HLM : REAL := 100.0;/积分值上限 LMN_LLM : REAL := 0.0; /积分值下限 PV_FAC : REAL := 1.0; /过程变量因子 PV_OFF : REAL := 0.0; /过程变量偏移量 LMN_FAC : REAL := 1.0; /调节值因子 LMN_OFF : REAL := 0.0; /调节值偏移量 I_ITLVAL : REAL := 0.0; /积分作用的初始化值 DISV : REAL := 0.0; /干扰变量END_VARVAR_OUTPUT LMN : REAL := 0.0; /调节值 LMN_PER : WORD := W#16#0; /外设调节值 QLMN_HLM : BOOL := FALSE;/达到调节值上限 QLMN_LLM : BOOL := FALSE;/达到调节值下限 LMN_P : REAL := 0.0; /比例分量 LMN_I : REAL := 0.0; /积分分量 LMN_D : REAL := 0.0; /微分分量 PV : REAL := 0.0; / ER : REAL := 0.0; /误差信号END_VARVAR sInvAlt : REAL := 0.0; /上周期比例偏差值 sIanteilAlt : REAL := 0.0; /上周期积分值 sRestInt : REAL := 0.0; /上周期积分偏差量(浮点数计算偏差) sRestDif : REAL := 0.0; /上周期微分偏差量(浮点数计算偏差) sRueck : REAL := 0.0; / sLmn : REAL := 0.0; /上周期调节值 sbArwHLmOn : BOOL := FALSE;/上周期达到调节值上限 sbArwLLmOn : BOOL := FALSE;/上周期达到调节值下限 sbILimOn : BOOL := TRUE; /备用-本程序没有使用该变量END_VARVAR_TEMP rCycle : REAL ; /采样时间浮点值 Iant : REAL ; /积分增量 Diff : REAL ; /积分量 Istwert : REAL ; /过程变量浮点值 ErKp : REAL ; /偏差比例值 rTi : REAL ; /积分时间浮点值 rTd : REAL ; /微分时间浮点值 rTmLag : REAL ; /微分作用时间延时浮点值 Panteil : REAL ; /比例值 Ianteil : REAL ; /积分值 Danteil : REAL ; /微分值 Verstaerk : REAL ; / RueckDiff : REAL ; / RueckAlt : REAL ; /上周期积分量 dLmn : REAL ; /调节量 gf : REAL ; /Hilfwert rVal : REAL ; /Real HilfsvariableEND_VAR IF COM_RST THEN /PID初始化 sIanteilAlt := I_ITLVAL ; LMN := 0.0 ; QLMN_HLM := FALSE ; QLMN_LLM := FALSE ; LMN_P := 0.0 ; LMN_I := 0.0 ; LMN_D := 0.0 ; LMN_PER := W#16#0 ; PV := 0.0 ; ER := 0.0 ; sInvAlt := 0.0 ; sRestInt := 0.0 ; SRestDif := 0.0 ; sRueck := 0.0 ; sLmn := 0.0 ; sbArwHLmOn := FALSE ; sbArwLLmOn := FALSE ; ELSE rCycle := DINT_TO_REAL( TIME_TO_DINT( CYCLE ) ) / 1000.0 ; /采样时间转换为浮点数值 Istwert := DINT_TO_REAL( INT_TO_DINT( WORD_TO_INT ( PV_PER ) ) ) * 0.003616898 ; Istwert := Istwert * PV_FAC + PV_OFF ; /外设输入转换为浮点数值 IF NOT PVPER_ON THEN /过程变量选择 Istwert := PV_IN ; END_IF; PV := Istwert ; ErKp := SP_INT - PV ; /计算偏差 IF ErKp DEADB_W THEN ER := ErKp - DEADB_W ; ELSE ER := 0.0 ; END_IF; ErKp := ER * GAIN ; /偏差比例增益 rTi := DINT_TO_REAL( TIME_TO_DINT( TI ) ) / 1000.0 ; rTd := DINT_TO_REAL( TIME_TO_DINT( TD ) ) / 1000.0 ; rTmLag := DINT_TO_REAL( TIME_TO_DINT( TM_LAG ) ) / 1000.0 ; IF rTi = 采样时间的0.5倍 rTi := rCycle * 0.5 ; END_IF; IF rTd = 采样时间 rTd := rCycle ; END_IF; IF rTmLag = 采样时间的0.5倍 rTmLag := rCycle * 0.5 ; END_IF; IF P_SEL THEN /比例作用投入 Panteil := ErKp ; ELSE Panteil := 0.0 ; END_IF; IF I_SEL THEN /积分作用投入 IF I_ITL_ON THEN /积分初始化 Ianteil := I_ITLVAL ; sRestInt := 0.0 ; ELSIF MAN_ON THEN /手动值输入时的积分量计算,用于用于手动切换自动无扰切换 Ianteil := sLmn - Panteil - DISV ; sRestInt := 0.0 ; ELSE /积分计算 Iant := ( rCycle / rTi ) * ( ErKp + sInvAlt ) * 0.5 + sRestInt ; IF ( ( Iant 0.0 AND sbArwHLmOn ) OR INT_HOLD ) OR ( Iant LMN_HLM - DISV AND dLmn LMN_HLM AND dLmn - LMN_D LMN_HLM THEN rVal := LMN_HLM - DISV ; gf := dLmn - LMN_HLM ; rVal := Ianteil - rVal ; IF rVal gf THEN rVal := gf ; END_IF; Ianteil := Ianteil - rVal ; ELSIF Ianteil LMN_LLM - DISV AND dLmn LMN_LLMAND dLmn - LMN_D LMN_LLMTHEN rVal := LMN_LLM - DISV ; gf := dLmn - LMN_LLM ; rVal := Ianteil - rVal ; IF rVal = LMN_HLMTHEN /调节辆限幅(上限) QLMN_HLM := TRUE ; QLMN_LLM := FALSE ; dlmn := LMN_HLM ; sbArwHLmOn := TRUE ; ELSE QLMN_HLM := FALSE ; IF dLmn = 32512.0 THEN dLmn := 32512.0 ; ELSIF dLmn = -32512.0 THEN dLmn := -32512.0 ; END_IF; LMN_PER := INT_TO_WORD( DINT_TO_INT( REAL_TO_DINT( dLmn) ) ) ; END_IF;END_FUNCTION_BLOCKyanyan pid块 FB41 SCL 源代码 查看日志列表 发表于01月26日 15:08 FUNCTION_BLOCK CONT_C TITLE =continuous PID controller AUTHOR : MT FAMILY : ICONT NAME : CONT_C VERSION : 1.5 KNOW_HOW_PROTECT VAR_INPUT COM_RST : BOOL := FALSE; /完全重启动 MAN_ON : BOOL := TRUE; /手动值打开 PVPER_ON : BOOL := FALSE; /外设过程变量打开 P_SEL : BOOL := TRUE; /比例作用打开 I_SEL : BOOL := TRUE; /积分作用打开 INT_HOLD : BOOL := FALSE; /积分作用保持 I_ITL_ON : BOOL := FALSE; /积分作用初始化 D_SEL : BOOL := FALSE; /微分作用打开 CYCLE : TIME := T#1S; /采样时间 SP_INT : REAL := 0.0; /内部设定值 PV_IN : REAL := 0.0; /过程变量输入 PV_PER : WORD := W#16#0; /外设过程变量 MAN : REAL := 0.0; /手动值 GAIN : REAL := 2.0; /比例增益 TI : TIME := T#20S; /积分复位时间 TD : TIME := T#10S; /微分时间 TM_LAG : TIME := T#2S; /微分作用时间延时 DEADB_W : REAL := 0.0; /死区带宽 LMN_HLM : REAL := 100.0; /积分值上限 LMN_LLM : REAL := 0.0; /积分值下限 PV_FAC : REAL := 1.0; /过程变量因子 PV_OFF : REAL := 0.0; /过程变量偏移量 LMN_FAC : REAL := 1.0; /调节值因子 LMN_OFF : REAL := 0.0; /调节值偏移量 I_ITLVAL : REAL := 0.0; /积分作用的初始化值 DISV : REAL := 0.0; /干扰变量 END_VAR VAR_OUTPUT LMN : REAL := 0.0; /调节值 LMN_PER : WORD := W#16#0; /外设调节值 QLMN_HLM : BOOL := FALSE; /达到调节值上限 QLMN_LLM : BOOL := FALSE; /达到调节值下限 LMN_P : REAL := 0.0; /比例分量 LMN_I : REAL := 0.0; /积分分量 LMN_D : REAL := 0.0; /微分分量 PV : REAL := 0.0; / ER : REAL := 0.0; /误差信号 END_VAR VAR sInvAlt : REAL := 0.0; /上周期比例偏差值 sIanteilAlt : REAL := 0.0; /上周期积分值 sRestInt : REAL := 0.0; /上周期积分偏差量(浮点数计算偏差) sRestDif : REAL := 0.0; /上周期微分偏差量(浮点数计算偏差) sRueck : REAL := 0.0; / sLmn : REAL := 0.0; /上周期调节值 sbArwHLmOn : BOOL := FALSE; /上周期达到调节值上限 sbArwLLmOn : BOOL := FALSE; /上周期达到调节值下限 sbILimOn : BOOL := TRUE; /备用-本程序没有使用该变量 END_VAR VAR_TEMP rCycle : REAL ; /采样时间浮点值 Iant : REAL ; /积分增量 Diff : REAL ; /积分量 Istwert : REAL ; /过程变量浮点值 ErKp : REAL ; /偏差比例值 rTi : REAL ; /积分时间浮点值 rTd : REAL ; /微分时间浮点值 rTmLag : REAL ; /微分作用时间延时浮点值 Panteil : REAL ; /比例值 Ianteil : REAL ; /积分值 Danteil : REAL ; /微分值 Verstaerk : REAL ; / RueckDiff : REAL ; / RueckAlt : REAL ; /上周期积分量 dLmn : REAL ; /调节量 gf : REAL ; /Hilfwert rVal : REAL ; /Real Hilfsvariable END_VAR IF COM_RST THEN /PID初始化 sIanteilAlt := I_ITLVAL ; LMN := 0.0 ; QLMN_HLM := FALSE ; QLMN_LLM := FALSE ; LMN_P := 0.0 ; LMN_I := 0.0 ; LMN_D := 0.0 ; LMN_PER := W#16#0 ; PV := 0.0 ; ER := 0.0 ; sInvAlt := 0.0 ; sRestInt := 0.0 ; SRestDif := 0.0 ; sRueck := 0.0 ; sLmn := 0.0 ; sbArwHLmOn := FALSE ; sbArwLLmOn := FALSE ; ELSE rCycle := DINT_TO_REAL( TIME_TO_DINT( CYCLE ) ) / 1000.0 ; /采样时间转换为浮点数值 Istwert := DINT_TO_REAL( INT_TO_DINT( WORD_TO_INT ( PV_PER ) ) ) * 0.003616898 ; Istwert := Istwert * PV_FAC + PV_OFF ; /外设输入转换为浮点数值 IF NOT PVPER_ON THEN /过程变量选择 Istwert := PV_IN ; END_IF; PV := Istwert ; ErKp := SP_INT - PV ; /计算偏差 IF ErKp DEADB_W THEN ER := ErKp - DEADB_W ; ELSE ER := 0.0 ; END_IF; ErKp := ER * GAIN ; /偏差比例增益 rTi := DINT_TO_REAL( TIME_TO_DINT( TI ) ) / 1000.0 ; rTd := DINT_TO_REAL( TIME_TO_DINT( TD ) ) / 1000.0 ; rTmLag := DINT_TO_REAL( TIME_TO_DINT( TM_LAG ) ) / 1000.0 ; IF rTi = 采样时间的0.5倍 rTi := rCycle * 0.5 ; END_IF; IF rTd = 采样时间 rTd := rCycle ; END_IF; IF rTmLag = 采样时间的0.5倍 rTmLag := rCycle * 0.5 ; END_IF; IF P_SEL THEN /比例作用投入 Panteil := ErKp ; ELSE Panteil := 0.0 ; END_IF; IF I_SEL THEN /积分作用投入 IF I_ITL_ON THEN /积分初始化 Ianteil := I_ITLVAL ; sRestInt := 0.0 ; ELSIF MAN_ON THEN /手动值输入时的积分量计算,用于用于手动切换自动无扰切换 Ianteil := sLmn - Panteil - DISV ; sRestInt := 0.0 ; ELSE /积分计算 Iant := ( rCycle / rTi )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- “山东大学2025年土木工程硕士入学复试试题及答案”
- 八年级生物上册 第6单元 第19章 第2节 动物的生殖和发育说课稿 (新版)北师大版
- 三、发布GIF图像说课稿小学信息技术粤教版B版六年级上册-粤教版(B版)
- 深海养殖风险评估与控制研究-洞察及研究
- 系统性能优化策略-洞察及研究
- 生物入侵对本土物种多样性影响-洞察及研究
- 药效学评价方法优化-洞察及研究
- 2025军用仿真技术试题及答案
- 二氧化碳敏感通路-洞察及研究
- 解除租赁合同范本模板(3篇)
- 汽车行业中的环境保护与可持续发展
- 打起手鼓唱起歌混声合唱简谱
- 空调安装免责协议
- QGW 201175-2019-金风陆上风力发电机组 塔架通用防腐技术规范
- 老友记第一季字幕
- 输电线路风偏计算基本方法
- 骨科概论课件
- 第5章光电成像系统
- GB/T 9117-2010带颈承插焊钢制管法兰
- GB/T 5455-2014纺织品燃烧性能垂直方向损毁长度、阴燃和续燃时间的测定
- GB/T 30475.2-2013压缩空气过滤器试验方法第2部分:油蒸气
评论
0/150
提交评论