PLC閉環(huán)控制系統(tǒng)中PID控制器的實(shí)現(xiàn)
1 引言
在工業(yè)生產(chǎn)中,常需要用閉環(huán)控制方式來(lái)實(shí)現(xiàn)溫度、壓力、流量等連續(xù)變化的模擬量控制。無(wú)論使用模擬控制器的模擬控制系統(tǒng),還是使用計(jì)算機(jī)(包括PLC)的數(shù)字控制系統(tǒng),PID控制都得到了廣泛的應(yīng)用。
PID控制器是比例-積分-微分控制的簡(jiǎn)稱,具有
(1) 不需要精確的控制系統(tǒng)數(shù)學(xué)模型;
(2) 有較強(qiáng)的靈活性和適應(yīng)性;
(3) 結(jié)構(gòu)典型、程序設(shè)計(jì)簡(jiǎn)單,工程上易于實(shí)現(xiàn),參數(shù)調(diào)整方便等優(yōu)點(diǎn)。積分控制可以消除系統(tǒng)的靜差,微分控制可以改善系統(tǒng)的動(dòng)態(tài)相應(yīng)速度,比例、積分、微分三者有效地結(jié)合可以滿足不同的控制要求。
2 PLC實(shí)現(xiàn)PID的控制方式
2.1 PID過(guò)程控制模塊
這種模塊的PID控制程序是PLC生產(chǎn)廠家設(shè)計(jì)的,并存放在模塊中,用戶使用時(shí)序要設(shè)置一些參數(shù),使用起來(lái)非常方便,一個(gè)模塊可以控制幾路甚至幾十路閉環(huán)回路。
2.2 PID功能指令
現(xiàn)在很多PLC都有供PID控制用的功能指令,如S7-200的PID指令。它們實(shí)際上是用于PID控制的子程序,與模擬量輸入/輸出模塊一起使用,可以得到類似于使用PID過(guò)程控制模塊的效果。
2.3 用自編的程序?qū)崿F(xiàn)PID閉環(huán)控制
有的PLC沒有PID過(guò)程控制模塊和PID控制用的功能指令,有時(shí)雖然可以使用PID控制指令,但是希望采用某種改進(jìn)的PID控制算法。在上述情況下都需要用戶自己編制PID控制程序。
3 PLC-PID控制器的實(shí)現(xiàn)
本文以西門子S7-200PLC為例,說(shuō)明PID控制的原理及PLC的PID功能指令的使用及控制功能的實(shí)現(xiàn)。
3.1 PID控制器的數(shù)字化
PLC的PID控制器的設(shè)計(jì)是以連續(xù)系統(tǒng)的PID控制規(guī)律為基礎(chǔ),將其數(shù)字化寫成離散形式的PID控制方程,再跟據(jù)離散方程進(jìn)行控制程序設(shè)計(jì)。
在連續(xù)系統(tǒng)中,典型的PID閉環(huán)控制系統(tǒng)如圖1所示。圖1中sp(t)是給定值,pv(t)是反饋量,c(t)是系統(tǒng)的輸出量,PID控制的輸入輸出關(guān)系式為:
M(t)—控制器的輸出量,M0為輸出的初始值;
e(t)=sp(t)-pv(t)-誤差信號(hào);
KC比例系數(shù);
TI-積分時(shí)間常數(shù);
TD-微分時(shí)間常數(shù)。
圖1 連續(xù)閉環(huán)控制系統(tǒng)方框圖
式(1)的右邊前3項(xiàng)分別是比例、積分、微分部分,它們分別與誤差,誤差的積分和微分成正比。如果取其中的一項(xiàng)或兩項(xiàng),可以組成P、PD或PI控制器。
假設(shè)采樣周期為TS,系統(tǒng)開始運(yùn)行的時(shí)刻為t=0,用矩形積分來(lái)近似精確積分,用差分近似精確微分,將公式1離散化,第n次采樣時(shí)控制器的輸出為: (2)
式中:
en-1-第n-1次采樣時(shí)的誤差值;
KI-積分系數(shù);
KD-微分系數(shù)。
基于PLC的閉環(huán)控制系統(tǒng)如圖2所示。圖中的虛線部分在PLC內(nèi)。其中spn、pvn、en、Mn分別為模擬量在sp(t)、pv(t)、e(t)、M(t)在第n次采樣時(shí)的數(shù)字量。
圖2 PLC閉環(huán)控制系統(tǒng)方框圖
在許多控制系統(tǒng)內(nèi),可能只需要P、I、D中的一種或兩種控制類型。如可能只要求比例控制或比例與積分控制,通過(guò)設(shè)置參數(shù)可對(duì)回路進(jìn)行控制類型進(jìn)行選擇。
3.2 輸入輸出變量的轉(zhuǎn)換
PID控制有兩個(gè)輸入量:給定值(sp)和過(guò)程變量(pv)。多數(shù)工藝要求給定值是固定的值,如加熱爐溫度的給定值。過(guò)程變量是經(jīng)A/D轉(zhuǎn)換和計(jì)算后得到的被控量的實(shí)測(cè)值,如加熱爐溫度的測(cè)量值。給定值與過(guò)程變量都是與被控對(duì)象有關(guān)的值,對(duì)于不同的系統(tǒng),它們的大小、范圍與工程單位有很大的區(qū)別。應(yīng)用PLC的PID指令對(duì)這些量進(jìn)行運(yùn)算之前,必須將其轉(zhuǎn)換成標(biāo)準(zhǔn)化的浮點(diǎn)數(shù)(實(shí)數(shù))。
同樣,對(duì)于PID指令的輸出,在將其送給D/A轉(zhuǎn)化器之前,也需進(jìn)行轉(zhuǎn)換。
3.3 回路輸入的轉(zhuǎn)換
轉(zhuǎn)換的第一步是將給定值或A/D轉(zhuǎn)換后得到的整數(shù)值由16位整數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù),可用下面的程序?qū)崿F(xiàn)這種轉(zhuǎn)換:
XORD AC0, ACO
//清除累加器
MOVW AIWO, AC0
//將待轉(zhuǎn)化的模擬量存入累加器
LDW>= AC0, 0
//如果模擬量數(shù)值為正
JMP 0
//直接轉(zhuǎn)換成實(shí)數(shù)
ORD 16#FFFF0000, ACO
//將AC0內(nèi)的數(shù)值進(jìn)行符號(hào)擴(kuò)展,擴(kuò)展為32位負(fù)數(shù)
LBL 0
DTR AC0, AC0
//將32位整數(shù)轉(zhuǎn)換成實(shí)數(shù)
轉(zhuǎn)換的下一步是將實(shí)數(shù)進(jìn)一步轉(zhuǎn)換成0.0~1.0之間的標(biāo)準(zhǔn)化實(shí)數(shù),可用下面的式(3)對(duì)給定值及過(guò)程變量進(jìn)行標(biāo)準(zhǔn)化:
RNorm=(RRaw/Span)+Offset (3)
式中:
RNorm-標(biāo)準(zhǔn)化實(shí)數(shù)值;
RRaw-標(biāo)準(zhǔn)化前的值;
Offset-偏移量,對(duì)單極性變量為0.0,對(duì)雙極性變量為0.5;
Span-取值范圍,等于變量的最大值減去最小值,單極性變量的典型值為32000,雙極性變量的典型值為64000。
下面的程序?qū)⑸鲜鲛D(zhuǎn)換后得到的AC0中的雙極性實(shí)數(shù)(其Span=64000)轉(zhuǎn)換成0.0~1.0之間的實(shí)數(shù):
/R 64000.0, AC0
//累加器中的實(shí)數(shù)標(biāo)準(zhǔn)化
+R 0.5, AC0
//加上偏移值,使其在0.0~1.0之間
MOVR ACO, VD100
//加標(biāo)準(zhǔn)化后的值存入回路表內(nèi)
3.4 回路輸出的轉(zhuǎn)換
回路輸出即PID控制器輸出,它是標(biāo)準(zhǔn)化的0.0~1.0之間的實(shí)數(shù)。將回路輸出送給D/A轉(zhuǎn)換器之前,必須轉(zhuǎn)換成16位二進(jìn)制整數(shù)。這一過(guò)程是將pv與sp轉(zhuǎn)換成標(biāo)準(zhǔn)化數(shù)值的逆過(guò)程。用下面的公式將回路輸出轉(zhuǎn)換成實(shí)數(shù):
RScal=(Mn-Offset)×Span (4)
式中,RScal是回路輸出對(duì)應(yīng)的實(shí)數(shù)值,Mn是回路輸出標(biāo)準(zhǔn)化的實(shí)數(shù)值。
下面的程序用來(lái)將回路輸出轉(zhuǎn)換為對(duì)應(yīng)的實(shí)數(shù):
MOVR VD108, AC0
//將回路輸出送入累加器
-R 0.5, AC0
//僅雙極性數(shù)才有此語(yǔ)句
*R 64000.0, AC0
//單極性變量乘以32000.0
用下面的指令將代表回路輸出的實(shí)數(shù)轉(zhuǎn)換成16位整數(shù):
ROUND AC0, AC0
//將實(shí)數(shù)轉(zhuǎn)換為32位整數(shù)
MOVW AC0, AQW0
//將16位整數(shù)寫入模擬輸出(D/A)寄存器
3.5 PID指令及回路表
S7-200的PID指令如圖3所示:
圖3 PID指令
指令中TBL是回路表的起始地址,LOOP是回路的編號(hào)。編譯時(shí)如果指令指定的回路表起始地址或回路號(hào)超出范圍,CPU將生成編譯錯(cuò)誤(范圍錯(cuò)誤)儀器編譯失敗。PID指令對(duì)回路表中的某些輸入值不進(jìn)行范圍檢查,應(yīng)保證過(guò)程變量、給定值等不超限?;芈繁韰⒁姼奖?。
附表 PID指令的回路表
如果PID指令中的算術(shù)運(yùn)算發(fā)生錯(cuò)誤,特殊存儲(chǔ)器SMI.1(溢出或非法數(shù)值)被置1,并將終止PID指令的執(zhí)行。要想消除錯(cuò)誤,在下次執(zhí)行PID運(yùn)算之前,應(yīng)改變引起運(yùn)算錯(cuò)誤的輸入值,而不是更新輸出值。
4 PID指令編程舉例
某一水箱里的水以變化速度流出,一臺(tái)變頻器驅(qū)動(dòng)的水泵給水箱打水,以保持水箱的水位維持在滿水位的75%。過(guò)程變量由浮在水面上的水位測(cè)量?jī)x提供,PID控制器的輸出值作為變頻器的速度給定值。過(guò)程變量與回路輸出均為單極性模擬量,取值范圍為0.0~1.0。
本例采用PI控制器,給定值為0.75,選取控制器參數(shù)的初始值為:KC=0.25,TS=0.1s,TI=30min。編程如下:
//主程序(OBI)
LD SM0.1 //首次掃描時(shí)
CALL 0 //調(diào)用初始化子程序
//子程序
LD SM0.0
MOVR 0.75, VD104 //裝入給定值75%
MOVR 0.25, VD112 //裝入回路增益0.25
MOVR 0.10, VD116 //裝入采樣時(shí)間0.1s
MOVR 30.0 VD120 //裝入積分時(shí)間30min
MOVR 0.0, VD124 //關(guān)閉微分作用
MOVB 100, SMB34
//設(shè)置定時(shí)中斷0的時(shí)間間隔為100ms
ATCH 0, 10
//設(shè)定定時(shí)中斷以執(zhí)行PID指令
ENI
//允許中斷,子程序0結(jié)束
//中斷程序0
LD SM0.0
LTD AIW0, AC0
//單極性模擬量經(jīng)A/D轉(zhuǎn)換后存入累加器
DTR AC0, AC0
//32位整數(shù)轉(zhuǎn)換為實(shí)數(shù)
/R 32000.0, AC0
//標(biāo)準(zhǔn)化累加器中的實(shí)數(shù)
MOVR AC0, VD100 //存入回路表
LD 10.0
//在自動(dòng)方式下,執(zhí)行PID指令
PID VB100, 0
//回路表的起始地址為VB100,回路號(hào)為0
LD SM0.0
MOVB VD108, AC0
//PID控制器的輸出值送入累加器
*R 32000.0 AC0
//將累加器中的數(shù)值標(biāo)準(zhǔn)化
ROUND AC0, AC0
//實(shí)數(shù)轉(zhuǎn)換為32位整數(shù)
DTI AC0, AQW0
//將16位整數(shù)寫入到模擬量輸出(D/A)寄存器
5 結(jié)束語(yǔ)
PLC實(shí)現(xiàn)PID控制的方法多種,直接應(yīng)用PID指令來(lái)實(shí)現(xiàn)基于PLC的PID控制,是一種易于實(shí)現(xiàn)且經(jīng)濟(jì)實(shí)用的方法。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。
你可能感興趣的文章