找回密码
 注册

QQ登录

只需一步,快速开始

搜索

位置式PID源代码

[复制链接]
hsc2857 发表于 2018-10-23 16:49:40 | 显示全部楼层 |阅读模式
位置式PID源代码,本程序来源于网络
  1. FUNCTION FC1 : VOID

  2.     VAR_INPUT
  3.         Run:BOOL;    //True-运行,False-停止
  4.         Auto:BOOL;    //True-自动,False-手动
  5.         ISW:BOOL;    //True-积分有效,False-积分无效
  6.         DSW:BOOL;    //True-微分有效,False-微分无效
  7.         SetMV:REAL;    //手动时的开度设定值
  8.         SVSW:REAL;    //当设定值低于SVSW时,开度为零
  9.         PV:REAL;    //测量值
  10.         SV:REAL;    //设定值
  11.         DeadBand:REAL;    //死区大小
  12.         PBW:REAL;    //比例带大小
  13.         IW:REAL;    //积分带大小
  14.         DW:REAL;    //微分带大小
  15.         dErr_IN:REAL;    //误差累积
  16.         LastPV_IN:REAL;    //上一控制周期的测量值
  17.     END_VAR

  18.     VAR_OUTPUT
  19.         MV:REAL;    //输出开度
  20.         dErr_OUT:REAL;    //误差累积
  21.         LastPV_OUT:REAL;//上一控制周期的测量值
  22.     END_VAR

  23.     VAR
  24.         Err:REAL;    //误差
  25.         dErr:REAL;    //误差累积
  26.         PBH:REAL;    //比例带上限
  27.         PBL:REAL;    //比例带下限
  28.         PVC:REAL;    //测量值在一个控制周期内的变化率,即测量值变化速率
  29.         P:REAL;        //比例项
  30.         I:REAL;        //积分项
  31.         D:REAL;        //微分项
  32.     END_VAR

  33.     IF Run THEN
  34.         IF Auto THEN
  35.             IF SV>=SVSW THEN
  36.                 Err:=SV-PV;
  37.                 PBH:=SV+PBW;
  38.                 PBL:=SV-PBW;
  39.                 IF PV<PBL THEN
  40.                     MV:=1;
  41.                 ELSIF PV>PBH THEN
  42.                     MV:=0;
  43.                 ELSE
  44.                     P:=(PBH-PV)/(PBH-PBL);    //计算比例项
  45. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. /////////////////////////////////////////////以下为积分项的计算//////////////////////////////////////////////////////////////
  47.                     IF ISW  THEN
  48.                         dErr:=dErr_IN;
  49.                         IF (PV<(SV-DeadBand)) OR (PV>(SV+DeadBand)) THEN
  50.                             IF (dErr+Err)<(0-IW) THEN
  51.                                 dErr:=0-IW;
  52.                             ELSIF (dErr+Err)>IW THEN
  53.                                 dErr:=IW;
  54.                             ELSE
  55.                                 dErr:=dErr+Err;
  56.                             END_IF;
  57.                         END_IF;
  58.                         I:=dErr/IW;
  59.                         dErr_OUT:=dErr;
  60.                     ELSE
  61.                         I:=0;
  62.                     END_IF;
  63. /////////////////////////////////////////////以上为积分项的计算//////////////////////////////////////////////////////////////
  64. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. /////////////////////////////////////////////以下为微分项的计算//////////////////////////////////////////////////////////////
  66.                     IF DSW=1 THEN
  67.                         PVC:=LastPV_IN-PV;
  68.                         D:=PVC/DW;
  69.                         LastPV_OUT:=PV;
  70.                     ELSE
  71.                         D:=0;
  72.                     END_IF;
  73. /////////////////////////////////////////////以上为微分项的计算//////////////////////////////////////////////////////////////
  74. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  75.                     IF (P+I+D)>1 THEN
  76.                         MV:=1;
  77.                     ELSIF (P+I+D)<0 THEN
  78.                         MV:=0;
  79.                     ELSE
  80.                         MV:=P+I+D;
  81.                     END_IF;
  82.                 END_IF;
  83.             ELSE
  84.                 MV:=0;
  85.             END_IF;
  86.         ELSE
  87.             MV:=SetMV;
  88.         END_IF;
  89.     ELSE
  90.         MV:=0;
  91.     END_IF;

  92. END_FUNCTION
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-20 20:52

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表