ccmdf
級別: 略有小成
精華主題: 0
發(fā)帖數量: 83 個
工控威望: 232 點
下載積分: 614 分
在線時間: 57(小時)
注冊時間: 2008-12-13
最后登錄: 2024-10-04
查看ccmdf的 主題 / 回貼
36樓  發(fā)表于: 2019-07-17 19:04
謝謝分享,辛苦
湛藍小爾
工控交流 Q703935819
級別: 家園常客

精華主題: 0
發(fā)帖數量: 349 個
工控威望: 642 點
下載積分: 2101 分
在線時間: 80(小時)
注冊時間: 2014-03-03
最后登錄: 2024-07-10
查看湛藍小爾的 主題 / 回貼
37樓  發(fā)表于: 2021-09-24 15:24
謝謝分享,我需要的
專心搞錢
Q群943838323   博圖
Q群703935819   昆侖通態(tài)
liulingmiao
級別: 正式會員
精華主題: 0
發(fā)帖數量: 14 個
工控威望: 82 點
下載積分: 5660 分
在線時間: 59(小時)
注冊時間: 2021-02-23
最后登錄: 2024-11-01
查看liulingmiao的 主題 / 回貼
38樓  發(fā)表于: 2021-09-26 09:01
謝謝分享
hoojjj
級別: 正式會員
精華主題: 0
發(fā)帖數量: 6 個
工控威望: 95 點
下載積分: 534 分
在線時間: 12(小時)
注冊時間: 2010-04-30
最后登錄: 2023-11-27
查看hoojjj的 主題 / 回貼
39樓  發(fā)表于: 2021-09-30 09:10
FUNCTION_BLOCK "塊_1"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      p值 : Real;
      積分 : Real;
      反饋值 : Int;
      設定值 : Real;
      PID死區(qū) : Real;
      PID上限 : Real;
      PID下限 : Real;
   END_VAR

   VAR_OUTPUT
      輸出控制值 : Real;
      反饋過程值 : Real;
      PID輸出 : Int;
   END_VAR

   VAR_TEMP
      當前誤差 : Real;
      上次誤差 : Real;
      計算當前輸出值 : Real;
      計算上次輸出值 : Real;
      反饋過程值臨時存儲 : Real;
      輸出過程值臨時存儲 : Real;
   END_VAR


BEGIN
    
    #反饋過程值臨時存儲 := INT_TO_REAL(#反饋值);//反饋值轉成浮點數存入到臨時存儲區(qū)。
    #反饋過程值 := (#反饋過程值臨時存儲 - 0.0) / 27648.0 * (#PID上限 - #PID下限) + #PID下限;//反饋過程值處理公式。
    #當前誤差 := #設定值 - #反饋過程值;//算出當前誤差值。
    IF  ABS(#當前誤差)<#PID死區(qū) THEN//PID死區(qū)大于當前誤差的絕對值時。(使用絕對值表示無論是整數還是負數都不允許超出比較范圍)。
        #計算當前輸出值 := 0;      //如果上述條件成立,當前輸出值為0.
    ELSIF  ABS(#當前誤差)>=#PID死區(qū) THEN//PID死區(qū)小于等于當前誤差,執(zhí)行下面公式。
        #計算當前輸出值 := #p值 * (#當前誤差 - #上次誤差) + #積分 * #當前誤差;//此公式在S7-200PID課程有講,PID輸出=p值*(當前誤差-上次誤差)+積分*當前誤差。
    END_IF;
    #輸出控制值 := #計算當前輸出值;//將當前值輸出值傳送到輸出控制值,再進行下一步處理。
    IF #輸出控制值 > #PID上限 THEN//如果輸出控制值大于PID上限值。
        #輸出控制值 := #PID上限;//將上限值寫入輸出控制值。
    ELSIF #輸出控制值 < #PID下限 THEN//如果輸出控制值小于PID下限值。
        #輸出控制值 := #PID下限;//將下限值寫入輸出控制值。
    END_IF;
    #上次誤差 := #當前誤差;//處理完成將當前誤差寫入上次誤差。
    #計算上次輸出值 := #輸出控制值;//處理完成將輸出控制值寫入上次輸出值。
    #輸出過程值臨時存儲 := (#輸出控制值 - #PID下限) / (#PID上限 - #PID下限) * 27648.0 + 0.0;//PID輸出處理成0.0--27648.0范圍。
    #PID輸出 := REAL_TO_INT(#輸出過程值臨時存儲);//再小數0.0--27648.0轉換成16位整數0-27648范圍。
END_FUNCTION_BLOCK
cdjszdh
級別: 網絡英雄
精華主題: 0
發(fā)帖數量: 317 個
工控威望: 10104 點
下載積分: 10276 分
在線時間: 543(小時)
注冊時間: 2016-08-27
最后登錄: 2024-11-01
查看cdjszdh的 主題 / 回貼
40樓  發(fā)表于: 2021-09-30 11:39
謝謝分享,研究一下方法。
hoojjj
級別: 正式會員
精華主題: 0
發(fā)帖數量: 6 個
工控威望: 95 點
下載積分: 534 分
在線時間: 12(小時)
注冊時間: 2010-04-30
最后登錄: 2023-11-27
查看hoojjj的 主題 / 回貼
41樓  發(fā)表于: 2021-09-30 11:40
#計算當前輸出值 := #p值 * (#當前誤差 - #上次誤差) + #積分 * #當前誤差;
這PID 有點問題, 好像不是很純正
還是感謝分享
hoojjj
級別: 正式會員
精華主題: 0
發(fā)帖數量: 6 個
工控威望: 95 點
下載積分: 534 分
在線時間: 12(小時)
注冊時間: 2010-04-30
最后登錄: 2023-11-27
查看hoojjj的 主題 / 回貼
42樓  發(fā)表于: 2021-09-30 11:59
正確的PD 控制器如下計算方式

#計算當前輸出值 := #p值 *   #當前誤差+ #微分 * (#當前誤差 - #上次誤差)
f2830565
級別: 探索解密
精華主題: 0
發(fā)帖數量: 73 個
工控威望: 191 點
下載積分: 1192 分
在線時間: 75(小時)
注冊時間: 2012-08-27
最后登錄: 2024-10-30
查看f2830565的 主題 / 回貼
43樓  發(fā)表于: 2021-10-21 21:10
試試效果怎么樣! 謝謝分享
toptron
天生我材必有用
級別: 略有小成
精華主題: 0
發(fā)帖數量: 47 個
工控威望: 205 點
下載積分: 3969 分
在線時間: 143(小時)
注冊時間: 2012-05-12
最后登錄: 2024-11-01
查看toptron的 主題 / 回貼
44樓  發(fā)表于: 2021-10-23 09:15
謝謝分享!
加勒比海帶
級別: 論壇先鋒
精華主題: 0
發(fā)帖數量: 2272 個
工控威望: 1837 點
下載積分: 6902 分
在線時間: 64(小時)
注冊時間: 2021-07-19
最后登錄: 2024-08-05
查看加勒比海帶的 主題 / 回貼
45樓  發(fā)表于: 2021-11-01 19:56
下載學習學習
mimidog111
級別: 探索解密
精華主題: 0
發(fā)帖數量: 50 個
工控威望: 158 點
下載積分: 662 分
在線時間: 49(小時)
注冊時間: 2012-08-28
最后登錄: 2024-10-07
查看mimidog111的 主題 / 回貼
46樓  發(fā)表于: 2022-01-22 19:13
      
15930648543
級別: 略有小成
精華主題: 0
發(fā)帖數量: 40 個
工控威望: 207 點
下載積分: 6279 分
在線時間: 25(小時)
注冊時間: 2021-07-26
最后登錄: 2024-10-23
查看15930648543的 主題 / 回貼
47樓  發(fā)表于: 2022-02-08 10:46
謝謝分享,