呂衛(wèi)陽
男,工學(xué)博士,副教授,現(xiàn)就職于北京科技大學(xué)機(jī)械工程學(xué)院機(jī)械電子工程系,主要研究方向?yàn)楣I(yè)控制及自動(dòng)化和先進(jìn)機(jī)電系統(tǒng)技術(shù)。
摘 要:本文討論了有關(guān)控制系統(tǒng)的基本算法及軟件實(shí)現(xiàn)的若干問題。介紹了線性控制系統(tǒng)的8個(gè)典型環(huán)節(jié),給出了這些典型環(huán)節(jié)的時(shí)間響應(yīng)功能塊。介紹了PID控制的基本原理及離散算法,給出了能夠?qū)崿F(xiàn)PID基本算法的功能塊BasicPID,并舉例說明。
關(guān)鍵詞:典型環(huán)節(jié);PID算法;軟件實(shí)現(xiàn)
Abstract: Some topics on the basic algorithm and software implementation of control system are discussed in this paper. The 8 essential blocks of the linear control system are introduced, and then give the function block of their time response. The basic theory and discrete method of PID control algorithm are introduced, and then give the function block BasicPID to implement the basic PID algorithm with some example.
Key words: Essential Block; PID Algorithm; Software Implementation
1 控制系統(tǒng)典型環(huán)節(jié)的時(shí)間響應(yīng)
控制系統(tǒng)一般由若干元件以一定的形式連接而成,這些元件的物理結(jié)構(gòu)和工作原理可以是多種多樣的。但是從控制理論來看,物理本質(zhì)和工作原理不同的元件,可以有完全相同的數(shù)學(xué)模型,亦即具有相同的動(dòng)態(tài)特性。在控制工程中,常常將具有某種確定信息傳遞關(guān)系的元件、元件組或元件的一部分稱為一個(gè)環(huán)節(jié),經(jīng)常遇到的環(huán)節(jié)則稱為典型環(huán)節(jié)。這樣,任何復(fù)雜的系統(tǒng)總可以歸結(jié)為由一些典型的環(huán)節(jié)組成,從而為建立系統(tǒng)模型和研究系統(tǒng)特性帶來方便,使問題簡化。
在一般情況下,線性控制系統(tǒng)都可以由比例環(huán)節(jié)、積分環(huán)節(jié)、微分環(huán)節(jié)、一階慣性環(huán)節(jié)、二階振蕩環(huán)節(jié)、一階微分環(huán)節(jié)、二階微分環(huán)節(jié)和延遲環(huán)節(jié)等8個(gè)典型環(huán)節(jié)組成。下面分別研究這些典型環(huán)節(jié)所對(duì)應(yīng)的微分方程的數(shù)值解,也即研究其時(shí)間響應(yīng)的離散算法。
以下分別給出這些典型環(huán)節(jié)的時(shí)間響應(yīng)離散算法的迭代公式,采用工業(yè)自動(dòng)化編程標(biāo)準(zhǔn)IEC61131-3支持的ST語言在功能塊中實(shí)現(xiàn)。
1.1 比例環(huán)節(jié)
比例環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:
比例環(huán)節(jié)功能塊ProportionalBlock如圖1.1所示,其變量聲明和程序代碼如下所示。
圖1.1 比例環(huán)節(jié)功能塊ProportionalBlock
FUNCTION_BLOCK ProportionalBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
K: REAL;(*比例環(huán)節(jié)的比例常數(shù),無量綱*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*比例環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=K*IN;(*比例環(huán)節(jié)的迭代公式。*)
END_IF
1.2 積分環(huán)節(jié)
積分環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:
積分環(huán)節(jié)功能塊IntegralBlock如圖1.2所示,其變量聲明和程序代碼如下所示。
圖1.2 積分環(huán)節(jié)功能塊IntegralBlock
FUNCTION_BLOCK IntegralBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
OUT1: REAL;(*前一個(gè)采樣周期的輸出值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*積分環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=OUT1+IN*TS;(*積分環(huán)節(jié)的迭代公式。*)
OUT1:=OUT;(*輸出值替換。*)
END_IF
1.3 微分環(huán)節(jié)
微分環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:
微分環(huán)節(jié)功能塊DifferentialBlock如圖1.3所示,其變量聲明和程序代碼如下所示。
圖1.3 微分環(huán)節(jié)功能塊DifferentialBlock
FUNCTION_BLOCK DifferentialBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
IN1: REAL;(*前一個(gè)采樣周期的輸入值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*微分環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=(IN-IN1)/TS;(*微分環(huán)節(jié)的迭代公式。*)
IN1:=IN;(*輸入值替換。*)
END_IF
1.4 一階慣性環(huán)節(jié)
一階慣性環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:
一階慣性環(huán)節(jié)功能塊FirstOrderLagBlock如圖1.4所示,其變量聲明和程序代碼如下所示。
圖1.4 一階慣性環(huán)節(jié)功能塊FirstOrderLagBlock
FUNCTION_BLOCK FirstOrderLagBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
T: REAL;(*一階慣性環(huán)節(jié)的時(shí)間常數(shù),秒*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
OUT1: REAL;(*前一個(gè)采樣周期的輸出值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*一階慣性環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=(TS*IN+T*OUT1)/(T+TS);(*一階慣性環(huán)節(jié)的迭代公式。*)
OUT1:=OUT;(*輸出值替換。*)
END_IF
1.5 二階振蕩環(huán)節(jié)
二階振蕩環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:
二階振蕩環(huán)節(jié)功能塊SecondOrderLagBlock如圖1.5所示,其變量聲明和程序代碼如下所示。
圖1.5 二階振蕩環(huán)節(jié)功能塊SecondOrderLagBlock
FUNCTION_BLOCK SecondOrderLagBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
T: REAL;(*二階振蕩環(huán)節(jié)的時(shí)間常數(shù),秒*)
Zeta: REAL;(*二階振蕩環(huán)節(jié)的阻尼比*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
OUT1: REAL;(*前一個(gè)采樣周期的輸出值*)
OUT2: REAL;(*前兩個(gè)采樣周期的輸出值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*二階振蕩環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=(TS*TS*IN+2*T*(T+Zeta*TS)*OUT1-T*T*OUT2)/(T*T+2*Zeta*T*TS+TS*TS);(*二階振蕩環(huán)節(jié)的迭代公式。*)
OUT2:=OUT1;(*輸出值替換。*)
OUT1:=OUT;(*輸出值替換。*)
END_IF
1.6 一階微分環(huán)節(jié)
一階微分環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:一階微分環(huán)節(jié)功能塊FirstOrderLeadBlock如圖1.6所示,其變量聲明和程序代碼如下所示。
圖1.6 一階微分環(huán)節(jié)功能塊FirstOrderLeadBlock
FUNCTION_BLOCK FirstOrderLeadBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
T: REAL;(*一階微分環(huán)節(jié)的時(shí)間常數(shù),秒*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
IN1: REAL;(*前一個(gè)采樣周期的輸入值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*一階微分環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=(IN-IN1)*T/TS+IN;(*一階微分環(huán)節(jié)的迭代公式。*)
IN1:=IN;(*輸入值替換。*)
END_IF
1.7 二階微分環(huán)節(jié)
二階微分環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:二階微分環(huán)節(jié)功能塊SecondOrderLeadBlock如圖1.7所示,其變量聲明和程序代碼如下所示。
圖1.7 二階微分環(huán)節(jié)功能塊SecondOrderLeadBlock
FUNCTION_BLOCK SecondOrderLeadBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
T: REAL;(*二階微分環(huán)節(jié)的時(shí)間常數(shù),秒*)
Zeta: REAL;(*二階微分環(huán)節(jié)的阻尼比*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
IN1: REAL;(*前一個(gè)采樣周期的輸入值*)
IN2: REAL;(*前兩個(gè)采樣周期的輸入值*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*二階微分環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
OUT:=(IN-2*IN1+IN2)*T*T/TS/TS+(IN-IN1)*2*Zeta*T/TS+IN;(*二階微分環(huán)節(jié)的迭代公式。*)
IN2:=IN1;(*輸入值替換。*)
IN1:=IN;(*輸入值替換。*)
END_IF
1.8 延遲環(huán)節(jié)
延遲環(huán)節(jié)的傳遞函數(shù):
所對(duì)應(yīng)的微分方程:
以采樣周期TS進(jìn)行采樣,得離散化后的差分方程:延遲環(huán)節(jié)功能塊DelayBlock如圖1.8所示,其變量聲明和程序代碼如下所示。
圖1.8 延遲環(huán)節(jié)功能塊DelayBlock
FUNCTION_BLOCK DelayBlock
VAR_INPUT
IN: REAL;(*輸入值*)
TS: REAL;(*采樣周期,秒*)
Delay: TIME;(*延遲的時(shí)間,秒*)
END_VAR
VAR_OUTPUT
OUT: REAL;(*輸出值*)
END_VAR
VAR
TimePeriod: TP;(*定時(shí)器*)
RisingTrigger: R_TRIG;(*觸發(fā)器*)
TONDelay: TON;(*定時(shí)器*)
END_VAR
(*采樣周期的判斷。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*延遲環(huán)節(jié)的時(shí)間響應(yīng)。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
TONDelay(IN := TRUE, PT := Delay);(*調(diào)用定時(shí)器。*)
IF TONDelay.Q THEN(*如果到達(dá)延遲的時(shí)間,則開始輸出。*)
OUT := IN;
END_IF
END_IF
2 PID控制的基本原理及離散算法
2.1 PID控制的基本概念
PID控制是控制工程中技術(shù)成熟且應(yīng)用廣泛的一種控制策略。經(jīng)過長期的工程實(shí)踐,已經(jīng)形成了一套完整的PID控制方法和典型結(jié)構(gòu),不僅適用于數(shù)學(xué)模型已知的控制系統(tǒng),而且對(duì)于數(shù)學(xué)模型難以確定的工業(yè)過程也可以應(yīng)用。PID控制參數(shù)整定方便,結(jié)構(gòu)改變靈活,在眾多工業(yè)過程控制中取得了滿意的應(yīng)用效果。
在閉環(huán)負(fù)反饋控制系統(tǒng)中,系統(tǒng)的偏差信號(hào)e(t)是系統(tǒng)進(jìn)行控制的最基本的原始信號(hào)。為了提高控制系統(tǒng)的性能指標(biāo),可以對(duì)偏差信號(hào)e(t)進(jìn)行改造,使其按照某種函數(shù)關(guān)系進(jìn)行變化,形成所需要的控制規(guī)律u(t),從而使控制系統(tǒng)達(dá)到所要求的性能指標(biāo),即
所謂PID控制,就是對(duì)偏差信號(hào)e(t)進(jìn)行“比例加積分加微分”形式的改造,形成新的控制規(guī)律u(t)。即
其中:
是比例控制部分,
稱為比例常數(shù);
是積分控制部分,
稱為積分時(shí)間常數(shù);
是微分控制部分,
稱為微分時(shí)間常數(shù)。
在零初始條件下,將上式兩邊取拉普拉斯變換,可得
基于PID控制的閉環(huán)負(fù)反饋控制系統(tǒng)的傳遞函數(shù)方塊圖如圖2.1所示。
圖2.1 基于PID控制的閉環(huán)負(fù)反饋控制系統(tǒng)
2.2 PID控制的離散算法
(1)位置式算法
設(shè)采樣周期為T,將前述PID控制規(guī)律u(t)進(jìn)行離散化處理,可得PID控制的第k個(gè)采樣周期的位置式離散算法u(k)為
其中:
比例控制部分離散化為
。
積分控制部分離散化為
。令
,并稱為積分控制部分的加權(quán)系數(shù)。
微分控制部分離散化為
。令
,并稱為微分控制部分的加權(quán)系數(shù)。
(2)增量式算法
根據(jù)PID控制的位置式離散算法,可得PID控制的第k-1個(gè)采樣周期的位置式輸出為
將上述兩式u(k)與u(k-1)相減,可得PID控制的第k個(gè)采樣周期的增量式離散算法為
于是可得PID控制的第k個(gè)采樣周期的位置式輸出u(k)為
2.3 PID控制的程序?qū)崿F(xiàn)
功能塊BasicPID如圖2.2所示。
在功能塊BasicPID中,采用ST語言實(shí)現(xiàn)了PID控制的基本離散算法,其變量聲明和程序代碼如下所示,可以同時(shí)提供位置式輸出和增量式輸出。
圖2.2 PID控制的基本離散算法功能塊BasicPID
FUNCTION_BLOCK BasicPID
VAR_INPUT
SP: REAL; (* Setpoint/設(shè)定點(diǎn) *)
PV: REAL; (* Process Variable/過程值,或稱Input/輸入值,或稱Feedback/反饋值 *)
TS: REAL := 1; (* Sample Time/采樣間隔,或稱Loop Update Time/計(jì)算周期,秒 *)
KP: REAL := 1; (* ISA Dependent Gains/ISA相關(guān)增益,無量綱 *)
TI: REAL := 1; (* Integral Time/積分時(shí)間常數(shù)>0,秒 *)
TD: REAL := 0; (* Differential Time/微分時(shí)間常數(shù)>=0,秒 *)
END_VAR
VAR_OUTPUT
CV: REAL; (* Control Variable from the Current Sampling Step/當(dāng)前采樣周期的位置式輸出值 *)
dCV: REAL; (* Delta CV or CV Change from the Current Sampling Step/當(dāng)前采樣周期的增量式輸出值 *)
END_VAR
VAR
TimePeriod: TP; (* 定時(shí)器 *)
RisingTrigger: R_TRIG; (* 觸發(fā)器 *)
ki: REAL; (* Integral Gain/積分增益系數(shù) *)
kd: REAL; (* Differential Gain/微分增益系數(shù) *)
ev0: REAL; (* Error Variable or System Deviation from the Current Sampling Step/當(dāng)前采樣周期的偏差值ev(k)=SP(k)-PV(k) *)
ev1: REAL; (* Error Variable or System Deviation from the Previous Sampling Step/前一個(gè)采樣周期的偏差值ev(k-1)=SP(k-1)-PV(k-1) *)
ev2: REAL; (* Error Variable or System Deviation from the Previous before Previous Sampling Step/前兩個(gè)采樣周期的偏差值ev(k-2)=SP(k-2)-PV(k-2) *)
cv1: REAL; (* Control Variable from the Previous Sampling Step/前一個(gè)采樣周期的位置式輸出值 *)
END_VAR
(*參數(shù)的判斷與計(jì)算。*)
IF NOT(TS>0) THEN(*采樣周期必須大于0,否則將其置為1秒。*)
TS:=1;
END_IF
IF NOT(TI>0) THEN(*積分時(shí)間常數(shù)必須大于0,否則將其置為0,表示沒有積分環(huán)節(jié),但是應(yīng)當(dāng)避免被0除。*)
TI:=0;(*如果積分時(shí)間常數(shù)為負(fù)或?yàn)?,則將其置為0,表示沒有積分環(huán)節(jié)。*)
ki:=0;(*此時(shí)將積分增益系數(shù)置為0,表示沒有積分環(huán)節(jié)。*)
ELSE
ki:=KP/TI*TS;(*計(jì)算積分增益系數(shù),無量綱/秒*秒=無量綱,即離散化后此系數(shù)無量綱。*)
END_IF
IF TD<0 THEN(*可以沒有微積分環(huán)節(jié),但是微分時(shí)間常數(shù)不能為負(fù)。*)
TD:=0;(*如果微分時(shí)間常數(shù)為負(fù),則將其置為0,表示沒有微分環(huán)節(jié)。*)
kd:=0;(*此時(shí)將微分增益系數(shù)置為0,表示沒有微分環(huán)節(jié)。*)
ELSE
kd:=KP*TD/TS;(*計(jì)算微分增益系數(shù),無量綱*秒/秒=無量綱,即離散化后此系數(shù)無量綱。*)
END_IF
(*采樣周期的生成。*)
TimePeriod(IN:=NOT(TimePeriod.Q),PT:=REAL_TO_TIME(TS*1000));(*調(diào)用定時(shí)器。*)
RisingTrigger(CLK:=TimePeriod.Q);(*調(diào)用觸發(fā)器。*)
(*PID算法的迭代過程。*)
IF RisingTrigger.Q THEN(*在采樣時(shí)刻進(jìn)行迭代計(jì)算。*)
ev0:=SP-PV;(*計(jì)算偏差值。*)
dCV:=KP*(ev0-ev1)+ki*ev0+kd*(ev0-2*ev1+ev2);(*當(dāng)前采樣周期的增量式輸出值的迭代公式。*)
CV:=cv1+dCV;(*當(dāng)前采樣周期的位置式輸出值的迭代公式。*)
ev2:=ev1;(*偏差值迭代。*)
ev1:=ev0;(*偏差值迭代。*)
cv1:=CV;(*位置式輸出值迭代。*)
END_IF3 算法舉例
【例1】某單位負(fù)反饋控制系統(tǒng)如圖3.1所示,其開環(huán)傳遞函數(shù)為。試在PLC中編程計(jì)算其單位階躍響應(yīng)。
圖3.1 單位負(fù)反饋控制系統(tǒng)
【解】首先將該系統(tǒng)的開環(huán)傳遞函數(shù)分解為典型環(huán)節(jié)的組合:
因此,該系統(tǒng)的開環(huán)傳遞函數(shù)由比例環(huán)節(jié)、積分環(huán)節(jié)
和一階慣性環(huán)節(jié)
的串聯(lián)所組成,其結(jié)構(gòu)分解圖如圖3.2所示,在編程時(shí)可以分別調(diào)用上述典型環(huán)節(jié)所對(duì)應(yīng)的功能塊。
圖3.2 單位負(fù)反饋控制系統(tǒng)的結(jié)構(gòu)分解圖
采用LD語言計(jì)算該系統(tǒng)的單位階躍響應(yīng),變量聲明如下:
PROGRAM PLC_PRG
VAR
Ts1: REAL := 0.1; (* 采樣時(shí)間,秒 *)
SP1: REAL := 1; (* 設(shè)定值 *)
PV1: REAL; (* 過程值 *)
ProportionalBlock1: ProportionalBlock; (* 比例環(huán)節(jié) *)
ProportionalBlock1OUT: REAL; (* 比例環(huán)節(jié)的輸出 *)
IntegralBlock1: IntegralBlock; (* 積分環(huán)節(jié) *)
IntegralBlock1OUT: REAL; (* 積分環(huán)節(jié)的輸出 *)
FirstOrderLagBlock1: FirstOrderLagBlock; (* 一階慣性環(huán)節(jié) *)
FirstOrderLagBlock1OUT: REAL; (* 一階慣性環(huán)節(jié)的輸出 *)
END_VARLD如圖3.3所示,單位階躍響應(yīng)曲線如圖3.4所示。
![]()
圖3.3 采用LD計(jì)算單位階躍響應(yīng)
圖3.4 單位階躍響應(yīng)曲線
【例2】帶有PID控制器的單位負(fù)反饋控制系統(tǒng)如圖3.5所示,已知。試在PLC中編程計(jì)算其單位階躍響應(yīng)。
圖3.5 帶有PID控制器的單位負(fù)反饋控制系統(tǒng)
【解】本例與例1所述的系統(tǒng)基本相同,唯一不同之處是增加了PID控制器。采用CFC語言計(jì)算該系統(tǒng)的單位階躍響應(yīng),變量聲明如下:PROGRAM PLC_PRG
VAR
Ts1: REAL := 0.1; (* 采樣時(shí)間,秒 *)
SP1: REAL := 1; (* 設(shè)定值 *)
PV1: REAL; (* 過程值 *)
BasicPID1: BasicPID; (* PID控制器 *)
KP1: REAL := 2; (* PID控制器的相關(guān)增益常數(shù),無量綱 *)
TI1: REAL := 3; (* PID控制器的積分時(shí)間常數(shù),秒 *)
TD1: REAL := 1; (* PID控制器的微分時(shí)間常數(shù),秒 *)
ProportionalBlock1: ProportionalBlock; (* 比例環(huán)節(jié) *)
IntegralBlock1: IntegralBlock; (* 積分環(huán)節(jié) *)
FirstOrderLagBlock1: FirstOrderLagBlock; (* 一階慣性環(huán)節(jié) *)
END_VAR圖3.6 采用CFC計(jì)算帶有PID控制器的單位階躍響應(yīng)
圖3.7 帶有PID控制器的單位階躍響應(yīng)曲線
CFC如圖3.6所示,單位階躍響應(yīng)曲線如圖3.7所示。比較圖3.4和圖3.7可以看出,采用PID控制后,改善了系統(tǒng)的綜合性能。
——轉(zhuǎn)自《自動(dòng)化博覽》