编写 PID 程序的详细指南 (编写pid程序)

编写pid程序

PID 控制器是控制系统中最常用的控制器类型之一。它们简单、易于实现,并且可以有效地控制各种类型的系统。

PID 控制器由三个项组成:比例项 (P)、积分项 (I)和微分项 (D)。比例项对误差的当前值产生响应,积分项对误差的过去值产生响应,微分项对误差的变化率产生响应。

编写 PID 程序的步骤

  1. 确定要控制的系统

    在编写 PID 程序之前,您需要确定要控制的系统。这将决定所需的 PID 控制器的类型和调谐。

  2. 选择 PID 控制器类型

    有许多不同类型的 PID 控制器,包括 PI、PD 和 PID 控制器。选择最适合您特定应用的控制器类型非常重要。

  3. 调整 PID 控制器

    一旦您选择了 PID 控制器类型,您需要调整控制器以匹配要控制的系统。这涉及调整比例、积分和微分增益。

  4. 实现 PID 控制器

    调整 PID 控制器后,您需要实现控制器。这可以通过软件或硬件来完成。

  5. 测试 PID 控制器

    实现 PID 控制器后,您需要测试控制器以确保其正常工作。这可以通过向系统输入已知信号并观察控制器的响应来完成。

编写 PID 程序的技巧

以下是编写 PID 程序的一些技巧:
  • 使用模拟环境来测试 PID 控制器。这将允许您在将控制器连接到实际系统之前对其进行故障排除。
  • 使用自动调谐技术来调整 PID 控制器。这将为您提供一个起点,然后您可以根据需要进一步调整控制器。
  • 监控 PID 控制器并根据需要进行调整。随着时间的推移,您可能需要调整控制器以确保其继续有效地控制系统。

结论

PID 控制器是控制系统中的一个有价值的工具。通过遵循本指南,您可以编写自己的 PID 程序并开始控制各种类型的系统。

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 PV<PBL THEN MV:=1; ELSIF PV>PBH 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)。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论