huyou
級(jí)別: 略有小成
|
在學(xué)習(xí)PID指令時(shí),雖然有框圖,但理解還是感覺比較吃力,花了許多功夫最終還是用不好PID指令。對(duì)某些有自整定參數(shù)功能的PID指令如何實(shí)現(xiàn)所謂“自整定參數(shù)”的功能也是一頭霧水。反反復(fù)復(fù)地看了許多關(guān)于PID方面的文章,也琢磨了一些自己的理解,下面是用S7-300的“STL源文件”編寫的一段程序,純粹當(dāng)作練習(xí): FUNCTION_BLOCK FB 1 TITLE = //KNOW_HOW_PROTECT VERSION : 0.1 VAR_INPUT PV : REAL ; END_VAR VAR_OUTPUT out : INT ; END_VAR VAR I : INT ; //積分時(shí)間(0.1s) Kp : REAL ; //比例 Kd : REAL ; //微分增益 PV0 : REAL ; //上次過程值 SP : REAL ; //設(shè)定點(diǎn) MV : REAL ; //輸出值 _1 : BOOL ; _2 : BOOL ; EV : REAL ; //靜差 END_VAR VAR_TEMP temp0 : REAL ; temp1 : REAL ; temp2 : BOOL ; temp3 : BOOL ; END_VAR BEGIN NETWORK TITLE = //積分時(shí)間設(shè)定:每次運(yùn)算的周期 A M 0.0; //0.1s脈沖 CD C 0; A #_1; //設(shè)定時(shí)間值 L #I; S C 0; AN C 0; FP #_2; = #_1; NETWORK TITLE = //PID運(yùn)算:MV=MV+Kp{(SP-PV)-Kd(PV-PV0)} // A #_1; JNB _001; L #PV; L #PV0; -R ; L #Kd; *R ; T #temp0; L #SP; L #PV; -R ; T #EV; L #temp0; -R ; L #Kp; *R ; T #temp1; L #MV; +R ; T #MV; _001: NOP 0; NETWORK TITLE = //設(shè)置上限為100% //運(yùn)算結(jié)果超出上限是無意義的,例如當(dāng)結(jié)果為150%時(shí),實(shí)際上執(zhí)行的是100%,更重要的是從 //150%返回到100%會(huì)使反應(yīng)緩慢。 A( ; L #MV; L 1.000000e+002; >=R ; ) ; JNB _002; L 1.000000e+002; T #MV; _002: NOP 0; NETWORK TITLE = A( ; L #MV; L 0.000000e+000; <=R ; ) ; JNB _003; L 0.000000e+000; T #MV; _003: NOP 0; NETWORK TITLE = //將工程量(如溫度值)轉(zhuǎn)換為數(shù)字量輸出,供數(shù)/模轉(zhuǎn)換(模擬量輸出) L #MV; L 2.764800e+002; *R ; RND ; T #out; NETWORK TITLE = //將本次過程值寫入“上次過程值”,以準(zhǔn)備下次運(yùn)算 // ------刷新 L #PV; T #PV0; END_FUNCTION_BLOCK |
|
---|---|---|
|