国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

位置式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
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 02:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表