華優(yōu)基
(江西省萍鄉(xiāng)鋼鐵公司,萍鄉(xiāng) 337019)
在工業(yè)計量中,流量累積就是將瞬時流量乘以時間而得到一段時間內的總流量,為實現(xiàn)由PLC對瞬時流量的動態(tài)累積,通常的方法是利用PLC的定時中斷組織塊OB35,對單位小間隔時間內的瞬時流量乘以單位間隔時間,得到單位小間隔時間內的流量,再把這些小流量累加起來,就得到了累積流量。計量所需要的通常就是累積量,對于一個由PLC做運算單元的流量測量系統(tǒng)來說,累積量的誤差包括流量計本身誤差、D/A誤差、A/D誤差和PLC流量累積誤差,這其中PLC流量累積誤差當屬計量部門控制的誤差,這也是本文闡述的主要內容。
我們通常所做的流量累積程序,其實就是基于矩形積分的原理,如圖1,把單位小間隔時間內的瞬時流量乘以單位間隔時間,得到單位小間隔時間內的流量,再把這些小流量累加起來,就得到了累積流量。圖1的陰影部分是用矩形積分法做流量累積的誤差。
圖1 矩形積分法誤差示意圖
梯形積分法就是以單位間隔時間的起始時刻和終了時刻的瞬時流量采樣值作為梯形面積運算的上、下底,以單位間隔時間的梯形高度計算梯形的面積,得出累積流量,如圖2。在用STEP7編程時,我們仍然采用OB35中斷,只是上、下底分別為上次和本次采樣的瞬時流量。
圖2 梯形積分法誤差示意圖
從圖1和圖2的陰影部分可直觀地看到,梯形積分法的累積誤差明顯小于矩形積分法;從文獻[2]給出的比較結果看,梯形積分法的累積誤差約為矩形積分法的一半。因此在做流量累積運算時,宜采用梯形積分法,而梯形積分法的運算并不復雜。
有限位數(shù)的二進制數(shù)不能精確表示所有十進制數(shù)值,當PLC系統(tǒng)不能精確表示一個數(shù)時,浮點運算和輸入結果會被舍入到最鄰近的表示值,產(chǎn)生舍入誤差。浮點加法運算在對階時,尾數(shù)要向右移位,被右移的尾數(shù)的低位部分會被丟掉,這種處理過程就會產(chǎn)生誤差,這也是一種舍入誤差,最終使運算結果不準確。
在PLC做流量累積時,需要不斷地做累加運算,由于浮點數(shù)運算的舍入誤差累計的結果,隨著累加次數(shù)的增加最終結果的誤差會相當大,我們用STEP7編程累積運算結果見表1。
表1 浮點數(shù)累積誤差測試
由此可見,流量累積的誤差必須預以補償,其算法如下:
當前周期量=一周期量+以前計算誤差
當前累積量=當前周期量+原累積量
當前計算誤差=原累積量-當前累積量+當前周期量
算法中,誤差主要出現(xiàn)在第二步,當前周期量與原累積量的累加,第三步當前計算誤差,看似此式會等于零,但它恰恰得出了第二步的計算誤差,得到的“當前計算誤差”將作為下一周期的“以前計算誤差”。通過用STEP7編程,實現(xiàn)上述補償運算,得到的流量累積結果如表2。
表2 經(jīng)誤差補償?shù)母↑c數(shù)累積誤差測試
表2中我們選擇的累加次數(shù)都是后面有多個零,而一周期量的小數(shù)點后的位數(shù)有限,因此看到的累積誤差均為零。但如果累加次數(shù)的后面幾位不是零,實驗表明累積誤差就不是零了,這是由于STEP7浮點數(shù)只能精確到6位小數(shù)所致。實驗還表明,當累積值達到108級時,對于周期量1.3658這樣一個小數(shù)將被累積量這個大數(shù)“吃掉”,而這種補償算法無法解決這樣的問題。
STEP7中的浮點數(shù)符合IEEE754標準的單精度浮點數(shù)規(guī)范的基本格式,由符號位S、指數(shù)e和尾數(shù)m三部分組成,見圖3。
圖3 STEP7浮點數(shù)格式
浮點數(shù)的加、減運算,只有使兩浮點數(shù)的指數(shù)值部分相同,才能將相同的指數(shù)值作為公因數(shù)提出來,然后進行尾數(shù)的加減運算。為此,必須對參與加減運算的兩個浮點數(shù)進行對階,使指數(shù)歸齊。
當兩個浮點數(shù)的數(shù)量級別相差太大時,例如7865932.3與0.426相加,首先進行對階,結果7865932.3=7.865932e+6,0.426=0.000000426e+6=0.000000e+6。
由于STEP7中浮點數(shù)最多只能精確到6位小數(shù),對階的結果使小的那個數(shù)變成了0,最終體現(xiàn)為兩數(shù)不累加,這就是通常所說的“大數(shù)吃小數(shù)”。
用PLC做流量累積,隨著累積量的不斷增大,而一周期量相對是個很小的數(shù)(特別是采樣周期短時),小數(shù)的有效位數(shù)丟失,累積的精度就越來越低,而后一周期量小到被對階為零,這就形成“大數(shù)吃小數(shù)”,有瞬時量而流量不累積,失去流量累積功能。
解決“大數(shù)吃小數(shù)”的辦法,就是實行多級累加,低一級的加法對一周期量做累加,流量累加到一定數(shù)值后,例如累計值超過10000,就把累積值減去10000,然后向高一級加法器進位。低一級的累加保證被加兩數(shù)的數(shù)量級別相差不會太大,對階時不會將一周期量變成零,選擇合適的進位值還可以避免小數(shù)的有效位數(shù)丟失,保證累積流量有較好累積精度。
綜合上述三項提高流量累積精度的措施,我們得到一個具有較高精度的流量累積程序,它采用梯形積分法,以本次采樣和上次采樣的瞬時流量作為梯形的上下底計算被測流量的一周期量;然后按浮點數(shù)累加的補償算法計算并補償上次累加的誤差,可以使流量累積誤差控制在一次累加誤差的范圍內,大大減少了舍入誤差的影響;我們還設置了兩級加法運算,浮點數(shù)累加的補償算法屬于低一級加法運算,當累積結果超過10000時向高一級加法運算進位,高一級加法運算采用雙整數(shù)加法,避免了“大數(shù)吃小數(shù)”的發(fā)生。
綜上所述,以STEP7編寫的置于OB35的流量累積程序如下:
L#a;本次瞬時流量采樣值m3/h
L#a1;上次瞬時流量采樣值m3/h
+R
L7200.0
/R;一周期量
L#L;以前計算誤差
+R
T#m;當前周期量
L#C1;原累積量
+R
T#C:當前累積量
L#C1
L#C
-R
L#m
+R
TL;當前計算誤差
L#C
L10000.0
>=R;累積量大于10000,則高一級加法器加一。
JNB_003
L#C
L10000.0
-R
T#C
L#H;高一級累加量
LL#1
+D
T#H
_003A#Z;清零
JNB_001
LL#0
T#H
_001L#a
T#a1
本文對PLC流量累積的誤差問題從梯形積分、浮點加法的舍入誤差和大數(shù)吃小數(shù)問題三方面進行論述,用西門子STEP7編寫相應程序并進行各項實驗,由此形成了具有實用價值的高精度流量累積程序,較全面地解決了目前PLC流量累積誤差的主要問題,對確保工業(yè)物料流量計量的準確性,實現(xiàn)高精度流量累積,提升企業(yè)計量水平具有重要意義。
[1]夏冰.PLC在流量顯示和累積計量上的應用[J].計量技術,2009(10):68-70
[2]鄭立飛,解小莉,王潔.關于定積分近似計算中矩形法的誤差估計[J].高等數(shù)學研究,2011,14(1):5-6
[3]張澤宏,孟濤,胡鶴鳴.超聲流量計積分方法檢驗軟件的設計[J].計量技術,2013(1):10-13
[4]吳幼庸.電子皮帶秤累計量計量數(shù)學模型[J].計量技術,2011(1):26-29
[5]廖常初.S7-300/400PLC應用技術[M].北京:機械工業(yè)出版社,2012
[6]張建勇,王克.測量氧氣的節(jié)流裝置在設計上的分析和探討[J].計量技術,2013(6):34-36