西门子PID之FB41
剑指工控微信技术群,很多人都在问PID的复杂的微积分算法如何形成程序的?我在这里把STEP7 里FB41源代码和注释给大家贴出来,让大家学习一下,FB41是积分PID。另外如果大家习惯了STEP7的PID也可以通过这个源代码移植到别的控制器上。
FUNCTION_BLOCK "CONT_C"
TITLE ="continuous PID controller"
AUTHOR : Jiansiting
FAMILY : JZGK
NAME : CONT_C
VERSION : "2.0"
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 ;
ELSIF 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 < rCycle * 0.5 THEN //积分时间必须 >= 采样时间的0.5倍
rTi := rCycle * 0.5 ;
END_IF;
IF rTd < rCycle THEN //微分时间必须 >= 采样时间
rTd := rCycle ;
END_IF;
IF rTmLag < rCycle * 0.5 THEN //微分作用延时时间必须 >= 采样时间的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 < 0.0 AND sbArwLLmOn )THEN //抗积分饱和
Iant := 0.0 ;
END_IF;
Ianteil := sIanteilAlt + Iant ; //当前积分值 := 上时刻积分值 + 本次积分量
sRestInt := sIanteilAlt - Ianteil + Iant ;
END_IF;
ELSE
Ianteil := 0.0 ;
sRestInt := 0.0 ;
END_IF;
Diff := ErKp ;
IF NOT MAN_ON AND D_SEL THEN //微分作用投入
Verstaerk := rTd / ( rCycle * 0.5 + rTmLag ) ;
Danteil := ( Diff - sRueck ) * Verstaerk ;
RueckAlt := sRueck ;
RueckDiff := rCycle / rTd * Danteil + sRestDif ;
sRueck := RueckDiff + RueckAlt ;
sRestDif := RueckAlt - sRueck + RueckDiff ; //同积分一样计算微分误差量
ELSE //
Danteil := 0.0 ;
sRestDif := 0.0 ;
sRueck := Diff ;
END_IF;
dLmn := Panteil + Ianteil + Danteil + DISV ; //PID输出
IF MAN_ON THEN //PID手动之打开
dLmn := MAN ;
ELSE
IF NOT I_ITL_ON AND I_SEL THEN //干扰量处理
IF Ianteil > 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_LLM AND dLmn - LMN_D < LMN_LLM THEN
rVal := LMN_LLM - DISV ;
gf := dLmn - LMN_LLM ;
rVal := Ianteil - rVal ;
IF rVal < gf THEN
rVal := gf ;
END_IF;
Ianteil := Ianteil - rVal ;
END_IF;
END_IF;
END_IF;
LMN_P := Panteil ;
LMN_I := Ianteil ;
LMN_D := Danteil ;
sInvAlt := Erkp ;
sIanteilAlt := Ianteil ;
sbArwHLmOn := FALSE ;
sbArwLLmOn := FALSE ;
IF dlmn >= LMN_HLM THEN //调节辆限幅(上限)
QLMN_HLM := TRUE ;
QLMN_LLM := FALSE ;
dlmn := LMN_HLM ;
sbArwHLmOn := TRUE ;
ELSE
QLMN_HLM := FALSE ;
IF dLmn <= LMN_LLM THEN //调节辆限幅(下限)
QLMN_LLM := TRUE ;
dlmn := LMN_LLM ;
sbArwLLmOn := TRUE ;
ELSE
QLMN_LLM := FALSE ;
END_IF;
END_IF;
sLmn := dLmn ;
dLmn := dLmn * LMN_FAC + LMN_OFF ;
LMN := dLmn ;
dLmn := dLmn* 276.48 ;
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_BLOCK
A股开门红,恒指重新站上十年新高,2018年全球市场投资点在哪里2018已经扬帆起航,大家新的一年,事业顺遂,平安喜乐。2017年美股屡创新高,三大股指均刷新近几年记录,标普500涨19。4道指涨25。1纳指涨28。2,前文简单总结过了。随着2
5000元左右有什么相机值得买?昨天给大家推荐了万元左右的全画幅相机,但很多人还是觉得贵了。今天给大家推荐5000元左右的相机,这个价位应该是很多普通摄影爱好者的选择了。但是吧一分钱一分货,既然预算就只有那么一点
注重隐私!Flyme9正式发布变化真的很大今天下午两点半,魅族正式发布了Flyme9,同时还专门为未来即将发布的魅族智能手表做了一套专属的FlymeForWatch。Flyme9依旧延续了AliveDesign理念,将设计
一加9正式官宣3月24日见,哈苏相机加持昨天下午,一加正式举办了一加影像沟通会,此次沟通会的最终目的,就是官宣了一加和哈苏在影像方面的联合,同时还推出了不少新的影像相关技术。当然,这个还不是咱们最关注的,上一款顶级旗舰一
那些手机上已经消失的东西,你最怀念哪个?自从智能手机称霸互联网后,手机早已不再是一个只用来接打电话接收短信的通讯工具,在现在来看,它更像是一把钥匙,不管你进哪,都不能少了它的存在。而智能手机发展了这么多年,可不是大家所看
电脑安装迅雷极简绿色版图文教程不用安装运行库,不解压到系统C盘根目录也能运行,此程序为绿色自解压程序,可解压到桌面或系统磁盘根目录或非系统磁盘任意目录(默认为dProgramFilesThunder),点击桌面
2810日报秒杀GOPro!大疆推出小型防抖相机DJIAction2等大疆推出小型防抖相机DJIAction210月27日,大疆公司通过线上发布会公布了小型防抖相机新品DJIAction2,Action2拥有4K120fps的影片拍摄能力,低畸变超广
2021苹果部分新机预测SummaryofsomeAppleproductsexpectedtobereleasedin2021(writtenonFebruary19,2021)iPadPro2021i
每周摄影作品展的第四十期,人像三要素这是每周摄影作品展的第四十期,这一期也收到了非常多优秀的摄影作品,比如旅行向日葵地隧道街头光与影等等。因为篇幅有限,没有将所有作品放上来,后面会逐渐放上来。欢迎摄友们投稿参与周展,
如果只选一个摄影配件,那一定是它如果只让选一个摄影配件,那么我一定会选三脚架,在我的摄影生活中三脚架是除相机外使用最频繁的器材。一三脚架材质选择三脚架的材质有很多,比如镁合金铝合金炭纤维等等,我还用过纯塑料和纯铁
银杏拍摄技巧分享,银杏这么拍才美银杏作为秋天的必拍题材之一,这段时间正是拍摄的好时机今天给大家分享一下如何拍摄银杏,希望对大家有帮助。一器材选择严格意义上来说银杏属于森林景观,需要一只中长焦镜头来拍特别是要对银杏
认清货币的本质,也就看清了虚拟货币的价值前言昨天中午吃饭的时候一个朋友说他的朋友BTC爆仓了,有点失去理智准备梭哈。这两天我妈和我通电话时也主动讲起了虚拟货币,列举周围有哪些人赚了多少钱。还记得12年黄金牛市终结的信号吗
20多万预算SUV车型选哪款?探岳给你答案最近很多买车的朋友向我咨询,探岳这款中型SUV车型怎么样?探岳的驾驶性能是非常不错的,内部的座椅和格局的设计也都是十分可观舒适的,在各个方面的表现都非常出色,适合现在年轻人。下面我
投资随笔跳着踢踏舞去上班最近的市场我在文章里分析过很多次了,感觉没什么可以讲的了,今天讲讲思想。有点投资经验的人,都听过七亏二平一赚这句老话。也就是说,在投资市场中的人,大部分人都是亏损的,真正挣钱的都是
适合普通人的定投前言之前的文章说过会写一篇上投摩根生物医药,最近医药我也提得比较多,这个月一定把这篇文章写出来。这篇文章主要讲讲普通人应该采取的定投策略,建议把两篇文章再结合起来看看。一定投的方法
沪指强势拉升,我为什么要从医药转战光伏?今日上证指数在大金融顺周期的带领下领涨两市,创业板科创板探底回升。板块轮动很健康,以沪深300为代表的大市值股差不多都快跌回这波下跌的最低点了,不涨涨都说不过去。不过今天这种强拉沪
顺周期的高潮还能持续吗?前言最近大宗商品的涨价潮让顺周期这一概念再度走上了风口浪尖。广发价值领先混合广发多因子混合大成新锐产业混合广发睿毅领先混合成了天天基金上热门基金,很多人私信问我该怎么操作,今天统一
追我吧首播,范丞丞竞速5G成亮点,vivoX305G手机意外曝光对于浙江卫视,相信它产出的很多节目都让大家留下了深刻的印象。比如中国好声音奔跑吧兄弟演员的诞生等节目,让国内的综艺节目水平走向了新的高度。近日,浙江卫视再度集结平台之力,邀请了范丞
NAS远程访问轻松解决,蒲公英X5路由器使用体验远程办公成本太高,小微企业出于节约成本考虑,一般都会采用内部局域网办公,不过现在远程办公越来越方便了,但是昂贵的内网专线服务对中小企业来说负担太重。那么有什么方法用更少的成本去组建
追光是一种信仰,不是高富帅的专利,拨草灵蛇P98最近将键鼠全升级为RGB光效,唯独剩下桌面垫没有换掉,但是每次开启键鼠光效的时候总觉得有点美中不足,知道应该把鼠标垫也换了。市面上专业游戏发光垫还是蛮贵的,对于笔者这种不是发烧级别
暗影精灵兄弟版,惠普光影精灵5代锋芒再起爱电竞的朋友看到光影精灵5会燃烧起你的游戏血液,极具机械感的设计已经表明这是一本很有料的游戏本,看到它你有种忍不住想发挥一下自己的游戏天赋。官方宣传光影精灵5是一款锋芒再现的游戏本
一白遮三丑,狂风烈日出行一把荣获双料金奖的不老伞就够了一白遮三丑,一胖毁所有,这是句每个小姐姐都要执行的金玉良言。毁灭骨感形象的方法有很多,毁掉白晰的肌肤不外几种,杀伤力最大的莫过于太阳发出的紫外线。所以哪一个惜白如命的小姐姐的收纳架