0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

西门子PID控制算法-FB块封装

工控论坛 来源:工控论坛 2024-12-30 11:01 次阅读

西门子PID控制算法-FB(功能块)封装主要应用于工业自动化和过程控制系统中,用于实现闭环控制。具体来说,它广泛应用于需要维持某一设定值的过程变量,如温度、压力、流量、速度等的精确控制。

01主要应用场合

制造业:在制造过程中,许多参数如温度、湿度、压力等都需要被严格控制以确保产品质量。例如,在食品加工、化工生产、制药等行业中,PID控制可以用来保持反应釜内的温度稳定。能源管理:在电力、燃气等能源供应系统中,通过PID控制可以有效地调节发电机组的输出功率或供气系统的压力,以响应需求变化并减少能源浪费。暖通空调(HVAC):楼宇自动化的温控系统中,PID控制器能够根据室内温度传感器反馈的信息调整加热器或冷却器的工作状态,从而达到节能的目的。水处理:污水处理厂利用PID控制来监控和调整各种水质参数,如pH值、溶解氧浓度等,确保排放标准达标。机器人威廉希尔官方网站 :在机械臂的位置控制或者移动机器人的速度控制上,PID控制同样扮演着重要角色。

02意义

高精度:相较于开环控制系统,PID控制能够更准确地跟踪设定点,减少误差。

增强稳定性:通过对比例、积分、微分三个参数的适当调整,可以使控制系统更加稳定,避免过调或震荡现象。

适应性强:即使面对负载变动或外部干扰,良好的PID调节也能保证系统快速恢复到期望的工作状态。

简化编程与维护:使用预封装的功能块进行开发,可以大大缩短编程时间,并且由于其模块化特性,便于后期维护和调试。

综上所述,西门子提供的PID控制算法-FB块封装为工程师提供了一种高效、可靠的方法来构建复杂的自动化控制系统,对于提升生产效率和产品质量有着重要意义。

03FB块

56be69ac-c2c1-11ef-9310-92fbcf53809c.png

56d3360c-c2c1-11ef-9310-92fbcf53809c.png

56dbe716-c2c1-11ef-9310-92fbcf53809c.png

56ee26a6-c2c1-11ef-9310-92fbcf53809c.png

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; #sRestlnt := 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; #sRestlnt := 0.0; ELSIF #MAN_ON THEN //手动值输入时的积分量计算,用于手动切换自动无扰切换 #Ianteil := #sLmn - #Panteil - #DISV; #sRestlnt := 0.0; ELSE //积分计算 #Iant := (#rCYcle / #rTi) * (#ErKp + #sInvAlt) * 0.5 + #sRestlnt; IF ((#Iant>0.0 AND #sbArwHLmOn) OR #INT_HOLD) OR (#Iant<0.0 AND #sbArwLLmOn)  THEN                 #Iant := 0.0;             END_IF;             #Ianteil := #sIanteilAlt + #Iant;//当前积分值:=上时刻积分值+本次积分量             #sRestlnt := #sIanteilAlt - #Ianteil + #Iant;         END_IF;     ELSE         #Ianteil := 0.0;         #sRestlnt := 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;         #Verstaerk := 0.0;         #RueckAlt := 0.0;         #RueckDiff := 0.0;         #sRueck := 0.0;     END_IF;     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_HLM 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;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    126

    文章

    7924

    浏览量

    143028
  • 西门子
    +关注

    关注

    94

    文章

    3041

    浏览量

    115947
  • PID控制算法
    +关注

    关注

    1

    文章

    21

    浏览量

    10725

原文标题:西门子PID控制算法-FB块封装

文章出处:【微信号:gkongbbs,微信公众号:工控论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    西门子PTO运动控制教程

    西门子PLC运动控制的3种控制方式。
    发表于 04-11 09:45 4832次阅读

    西门子PLC编程中FB和FC的区别

    西门子PLC编程时,可以用到功能FB和功能FC(FB、FC都是组织)资料上说FB与FC都可
    发表于 06-20 10:54 1.6w次阅读

    西门子PLC教程之PID编程资料

    西门子PLC关于PID编程资料
    发表于 12-20 10:30 77次下载

    西门子PLC的结构和编辑的教程详细说明

    本文档的主要内容详细介绍的是西门子PLC的结构和编辑的教程详细说明
    发表于 03-19 14:52 21次下载
    <b class='flag-5'>西门子</b>PLC的<b class='flag-5'>块</b>结构和<b class='flag-5'>块</b>编辑的教程详细说明

    如何用一个FB在使用西门子1200PLC时候实现堆栈功能

    1.在使用西门子1200PLC时候需要堆栈功能,实现数据的先进先出后进后出功能,于是自己用SCL语言开发了一个FB来实现该功能。 2.该具有入栈,出栈,清空堆栈,显示当前堆栈总数,
    的头像 发表于 09-22 17:31 9405次阅读
    如何用一个<b class='flag-5'>FB</b><b class='flag-5'>块</b>在使用<b class='flag-5'>西门子</b>1200PLC时候实现堆栈功能

    西门子PLC的功能和功能

    本文档的主要内容详细介绍的是西门子PLC的功能和功能
    发表于 11-09 17:49 64次下载
    <b class='flag-5'>西门子</b>PLC的功能和功能<b class='flag-5'>块</b>

    西门子S7-300实现PID控制

    西门子S7-300实现PID控制说明。
    发表于 04-22 11:21 30次下载

    西门子PLC FB41中PID功能说明和调整方法

    西门子PLC FB41中PID功能说明和调整方法说明。
    发表于 04-22 11:48 13次下载

    西门子SCL语言编程系列-写立方根FB

    由于西门子PLC本身并没有带求立方根的指令,我们用SCL来写一个求立方根的FB
    的头像 发表于 02-06 15:17 1959次阅读
    <b class='flag-5'>西门子</b>SCL语言编程系列-写立方根<b class='flag-5'>FB</b><b class='flag-5'>块</b>

    西门子PLC S7-200 SMART PID控制功能分享

    S7-200 SMART采用了新型的设计方法,信号板可以扩展通讯接口,数字量接口,模拟量接口,并且能合理的分配空间。西门子PLC S7-200 SMART具有PID控制功能,为用户在自动化驱动
    的头像 发表于 04-06 14:46 9713次阅读

    PLC编程中OB、FCFB、DB的使用原则

    西门子新加中包含组织(OB)、函数FB)、函数(FC)、数据(DB)
    发表于 05-24 15:01 1.6w次阅读
    PLC编程中OB<b class='flag-5'>块</b>、FC<b class='flag-5'>块</b>、<b class='flag-5'>FB</b><b class='flag-5'>块</b>、DB<b class='flag-5'>块</b>的使用原则

    西门子S7-300(CPU315)做整流系统的PID控制

    电子发烧友网站提供《西门子S7-300(CPU315)做整流系统的PID控制.pdf》资料免费下载
    发表于 01-14 09:43 0次下载

    西门子PLC中OB的功能详解

    西门子PLC(Programmable Logic Controller)作为工业自动化领域的核心设备,其内部功能强大、应用广泛。在西门子PLC中,OB(Organization Block,组织
    的头像 发表于 06-15 11:27 4818次阅读

    西门子增量式PID算法带积分分离

    西门子增量式带积分分离PID控制器是一种改进的PID控制算法,它结合了增量式
    的头像 发表于 12-07 09:34 248次阅读
    <b class='flag-5'>西门子</b>增量式<b class='flag-5'>PID</b><b class='flag-5'>算法</b>带积分分离

    西门子流量累计FB介绍

    西门子流量累计FB(Function Block)是一种专门为处理和计算流量数据而设计的功能,它通常在博途(TIA Portal)软件中被创建和使用。该功能
    的头像 发表于 12-19 10:28 193次阅读
    <b class='flag-5'>西门子</b>流量累计<b class='flag-5'>FB</b><b class='flag-5'>块</b>介绍