-
增量式PID:增量式PID控制器計算的是輸出的變化量,而不是絕對值。這使得控制器更加穩定,特別是在系統受到擾動時。增量式PID通過以下公式計算:
-
積分分離:積分分離是指在誤差較大時關閉積分項,以防止積分飽和。當誤差較小或接近零時,再啟用積分項,以消除穩態誤差。這樣可以提高系統的響應速度,并減少超調。
-
過程控制系統:在化工、制藥、食品加工等行業的溫度、壓力、流量控制中,增量式帶積分分離PID可以提供更好的控制性能。
-
電力系統:在發電機調速、電壓調節等電力系統控制中,可以有效減少超調和振蕩。
-
機器人控制:在機器人關節控制、軌跡跟蹤等應用中,可以提高控制精度和響應速度。
(**************************************************************************
FunctionBlockName: PID-FB塊 * Version: 1.0.0 * Author: 王同學玩工控 * UpdateTime: 2024-11-30 * Comment:
簡單說明:
積分分離:
1、當誤差大于閾值的時候關閉積分項此時只有PD在作用 系統快速動作
2、當誤差小于或等于閾值的時候打開積分項開始累計誤差 系統緩慢調整死區控制:當死區設置為 1 時 目標值為 36 系統在35-36之間進入死區停止PID的運算 且輸出值不變 當系統大于36或小于35的時候系統開始進行PID運算
正動作逆動作:當外部輸入引腳為 1 時 系統為正動作 為 0 時 系統為逆動作
Setpoint 目標設定值 Feedback 實際反饋值 Kp 比例增益 Ti 積分時間ms Td 微分時間ms Max_output 輸出限幅最大值 Min_output 輸出限幅最小值 Dead_Band 死區控制 Control_Mode 正動作逆動作(0/1) Mode 輸出模式選擇(0/1) integral_separate 閥值 PWM_output pwm輸出 Analog_output 模擬量輸出
***************************************************************************)
#error := #Setpoint -#Feedback; //計算誤差 IF #error > ( 0 - #Dead_Band )AND #error < #Dead_Band THEN ? ?? ? ? #data_relay[2] := 1; ? ? #last_error := #error;? ? ?//上次誤差更新 ? ? #prev_error := #last_error;? ? //上上次誤差更新 ? ?? ELSE #data_relay[2] := 0; END_IF;
IF #data_relay[2] = 0 THEN IF ABS(#error) <= #integral_separate THEN ? ? ? ?? ? ? ? ? #data_relay[1] := 1; ? ? END_IF; ? ?? ? ? IF ABS(#error) > #integral_separate THEN #data_relay[1] := 0; END_IF; #P_term := #Kp * (#error - #last_error); //比例系數計算 #I_term := #data_relay[1] * (#Ki * #error); //積分系數計算 #D_term := #Kd * (#error - 2 * #last_error + #prev_error); //微分系數計算 #delta_output := #P_term + #I_term + #D_term; //增量式PID輸出值 #rdata_realy[0] += #delta_output; //最終輸出值
#Max_data_relay := 100.0; //限幅處理最大值 #Min_data_relay := 0.0; //限幅處理最小值 IF #Control_Mode THEN// 正動作 IF #rdata_realy[0] > #Max_data_relay THEN #rdata_realy[0] := #Max_data_relay; END_IF; IF #rdata_realy[0] < #Min_data_relay THEN ? ? ? ? ? ?? ? ? ? ? ? ? #rdata_realy[0] := #Min_data_relay; ? ? ? ? ? ?? ? ? ? ? END_IF; ? ? ? ?? ? ? ELSE? // 逆動作 ? ? ? ?? ? ? ? ? #rdata_realy[0] := 0- #rdata_realy[0];? // 逆動作,反轉輸出范圍 ? ? ? ? IF #rdata_realy[0] > #Max_data_relay THEN #rdata_realy[0] := #Max_data_relay; END_IF; IF #rdata_realy[0] < #Min_data_relay THEN ? ? ? ? ? ?? ? ? ? ? ? ? #rdata_realy[0] := #Min_data_relay; ? ? ? ? ? ?? ? ? ? ? END_IF; ? ? END_IF; ? ? ?? ? ? #Analog_output? := ( #rdata_realy[0]? -#Min_data_relay ) / ( #Max_data_relay - #Min_data_relay)? * (#Max_output-#Min_output)+#Min_output; ? ?? END_IF;
-
西門子
+關注
關注
94文章
3034瀏覽量
115779 -
PID算法
+關注
關注
2文章
172瀏覽量
24301
原文標題:西門子增量式PID算法帶積分分離
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論