西门子200PLC如果想要自动控温都有什么方法?PID向导和由比较指令为条件组成的程序哪个好一点?

   发布日期:2024-06-09 06:36:23    
给你个Step 7写的PID控制的FC模块。带"_IN"与带"_OUT"的变量,如果前缀是一样的,要求连接同一个变量。 FUNCTION FC1 : VOID VAR_INPUT Run:BOOL; //True-运行,False-停止

给你个Step 7写的PID控制的FC模块。带"_IN"与带"_OUT"的变量,如果前缀是一样的,要求连接同一个变量。 FUNCTION FC1 : VOID VAR_INPUT Run:BOOL; //True-运行,False-停止 Auto:BOOL; //True-自动,False-手动 ISW:BOOL; //True-积分有效,False-积分无效 DSW:BOOL; //True-微分有效,False-微分无效 SetMV:REAL; //手动时的开度设定值 SVSW:REAL; //当设定值低于SVSW时,开度为零 PV:REAL; //测量值 SV:REAL; //设定值 DeadBand:REAL; //死区大小 PBW:REAL; //比例带大小 IW:REAL; //积分带大小 DW:REAL; //微分带大小 dErr_IN:REAL; //误差累积 LastPV_IN:REAL; //上一控制周期的测量值 END_VAR VAR_OUTPUT MV:REAL; //输出开度 dErr_OUT:REAL; //误差累积 LastPV_OUT:REAL;//上一控制周期的测量值 END_VAR VAR Err:REAL; //误差 dErr:REAL; //误差累积 PBH:REAL; //比例带上限 PBL:REAL; //比例带下限 PVC:REAL; //测量值在一个控制周期内的变化率,即测量值变化速率 P:REAL; //比例项 I:REAL; //积分项 D:REAL; //微分项 END_VAR IF Run=1 THEN IF Auto=1 THEN IF SV>=SVSW THEN Err:=SV-PV; PBH:=SV+PBW; PBL:=SV-PBW; IF PVPBH THEN MV:=0; ELSE P:=(PBH-PV)/(PBH-PBL); //计算比例项 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////以下为积分项的计算////////////////////////////////////////////////////////////// IF ISW=1 THEN dErr:=dErr_IN; IF (PV<(SV-DeadBand)) OR (PV>(SV+DeadBand)) THEN IF (dErr+Err)<(0-IW) THEN dErr:=0-IW; ELSIF (dErr+Err)>IW THEN dErr:=IW; ELSE dErr:=dErr+Err; END_IF; END_IF; I:=dErr/IW; dErr_OUT:=dErr; ELSE I:=0; END_IF; /////////////////////////////////////////////以上为积分项的计算////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////以下为微分项的计算////////////////////////////////////////////////////////////// IF DSW=1 THEN PVC:=LastPV_IN-PV; D:=PVC/DW; LastPV_OUT:=PV; ELSE D:=0; END_IF; /////////////////////////////////////////////以上为微分项的计算////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IF (P+I+D)>1 THEN MV:=1; ELSIF (P+I+D)<0 THEN MV:=0; ELSE MV:=P+I+D; END_IF; END_IF; ELSE MV:=0; END_IF; ELSE MV:=SetMV; END_IF; ELSE MV:=0; END_IF; END_FUNCTION 进行整定时先进行P调节,使I和D作用无效,观察温度变化曲线,若变化曲线多次出现波形则应该放大比例(P)参数,若变化曲线非常平缓,则应该缩小比例(P)参数。比例(P)参数设定好后,设定积分(I)参数,积分(I)正好与P参数相反,曲线平缓则需要放大积分(I),出现多次波形则需要缩小积分(I)。比例(P)和积分(I)都设定好以后设定微分(D)参数,微分(D)参数与比例(P)参数的设定方法是一样的。 当初写这段程序的就是为了使用调功器来控制炉子的温度的,已经在我单位的调功器上运行成功了,还有就是我单位的调功器没有使用微分(D),只是用了比例(P)和积分(I)。

 
 
免责声明: 如果本站所选内容的文章作者及编辑认为其作品涉及版权问题,请及时用电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
本站未注明稿件来源:我爱网的图/文等稿件,均来自于互联网,目的在于传递更多行业信息,并不代表本站的立场和观点,仅供参考。他人从本网转载需自负版权等法律责任。本站部分内容来源于互联网,如有侵犯您的版权,请联系我们及时更正或删除。

推荐知识
点击排行
本站暂时不做友情链接,请勿申请!
友情链接