郭向霞 周偉建 俞利明 陳青峰
(浙江中控自動化儀表有限公司)
在工業(yè)控制領域中,溫度是測量頻率較高的物理參數,而常用的溫度測量傳感器主要有熱電偶和熱電阻。以熱電偶為例,在使用熱電偶測量溫度時,測得電動勢后,需要將電動勢的值轉換成溫度,而目前的主要方式是查詢由熱電偶的電動勢和溫度列成的表格,即熱電偶分度表。熱電偶根據所使用材料的不同分為多種型號,每種型號有各自的分度表,查詢時很容易出錯。另外由于熱電偶分度表是在參考端溫度為0℃時制定的,而在實際使用環(huán)境中,參考端溫度通常不為0℃,這就需要工作人員再次進行手動換算。同時由于分度表中是以1℃為分割的,如果需要查詢非整數的溫度值,仍需要根據前后兩個值進行換算。綜上所述,查詢分度表的表格非常不方便,迫切需要開發(fā)一個分度表查詢軟件來解決用戶的不便。目前也有一些PC版本的查詢分度表軟件,但是操作人員在現(xiàn)場作業(yè)時仍需要攜帶電腦??紤]到目前Android智能手機的普及性,筆者設計開發(fā)了一款基于Android系統(tǒng)的分度表雙向查詢軟件,可以滿足操作人員隨時隨地查詢分度表的需求。
本軟件基于Android系統(tǒng)開發(fā),對使用環(huán)境沒有限制,任何Android系統(tǒng)的手機、平板電腦都可以安裝使用。本軟件有以下特點:
a.支持10種標準型號熱電偶分度表查詢,分別是 R 型、S型、B 型、J型、T型、E 型、K 型、N型、C型、A型;
b.支持6種標準型號熱電阻分度表查詢,分別是 Pt100、Pt200、Pt500、Pt1000、Cu50、Cu100;
c.可以查看每種測溫元件的有效測溫范圍,幫助工作人員選型;
d.對于熱電偶,支持輸入冷端補償的溫度值,解決現(xiàn)有分度表只能查詢冷端溫度為0℃的問題;
e.支持輸入非整數的溫度值,解決現(xiàn)有分度表只支持查詢1℃分割的問題;
f.支持溫度或者電動勢、電阻超限時的提示;
g.支持雙向轉換,對于熱電偶可以根據設置的冷端值,由溫度換算成電動勢或者由電動勢換算成溫度,對于熱電阻可以由電阻值轉換成溫度值,或由溫度值轉換成電阻值。
本軟件的開發(fā)語言是JAVA,設計采用MVC模式,實現(xiàn)界面、邏輯、數據的解耦。因此軟件開發(fā)分為3個部分:界面(UI)、控制和轉換算法。
UI設計時除了滿足功能特點外,還需要考慮到工業(yè)現(xiàn)場操作的友好性,為此自定義了下拉控件,實現(xiàn)分度號類型的選擇。
控制層考慮到其可擴展性,使用面向對象的多態(tài)性原理,設計一個抽象基類定義各子類需要實現(xiàn)的抽象方法,有正向和逆向轉換方法,有1個熱電偶基類、1個銅熱電阻基類和1個鉑熱電阻基類,熱電偶各子型號繼承熱電偶基類,銅熱電阻各子型號繼承銅熱電阻基類,鉑熱電阻各子型號繼承鉑熱電阻基類?;悓崿F(xiàn)抽象基類需要實現(xiàn)的公共轉換方法,各子類實現(xiàn)各自個性數據的存儲和轉換算法,這樣后期如需要增加鉑熱電阻的子型號,只需要新增一個子類,繼承鉑熱電阻基類,在子類里定義其特有的參數和方法,然后把類型和其轉換控制類綁定即可實現(xiàn)相應類型的分度表轉換。
算法部分主要實現(xiàn)熱電偶和熱電阻不同型號的分度表雙向轉換。GB/T 16839.1—2018給出了熱電偶各型號的轉換公式,算法只需要用代碼實現(xiàn)即可。JB/T 8623—2015和 GB/T 30121—2013只給出了熱電阻溫度轉電阻的轉換公式,而由電阻轉溫度的轉換公式,筆者研究了多項式擬合和牛頓迭代法兩種實現(xiàn)方式。以下部分給出各算法的公式和關鍵程序段。
根據GB/T 16839.1—2018,不同型號的熱電偶電動勢轉溫度公式是[1]:
式中di——多項式第i項的系數;
E——電動勢,μV;n——多項式階數;
t90——ITS—1990溫度,℃。K型熱電偶0~1 300℃溫度范圍內,溫度轉電動勢公式是[1]:
式中ai——多項式第i項的系數;
c0、c1——常數項,參考GB/T 16839.1—2018表8。
其他型號和K型熱電偶-270~0℃溫度范圍內,溫度轉電動勢的公式是[1]:根據分層設計原則,熱電偶基類里實現(xiàn)公共的轉換公式而不同型號的熱電偶參見GB/T 16839.1—2018表2~11設置各自的參數n和a0~an的值,然后調用公用的方法計算。
計算溫度和電動勢的關鍵算法如下,其中需要調用數學函數Math.pow(x,y)來計算(t90)i或者Ei:public double calculate(double param,int count){
double d=0.0d;
for(int i=0;i<=count;i++){
d+=this.a[i] *Math.pow(param,i);
}
return d;
}
根據JB/T 8623—2015,工業(yè)銅熱電阻溫度轉電阻換算公式是[2]:
根據GB/T 30121—2013,工業(yè)鉑熱電阻溫度轉電阻換算公式是[3]:式中A、B、C——常數;
R0——溫度為0℃時的電阻,Ω;
Rt——溫度為t時的電阻,Ω;
t——溫度,℃。
由于銅熱電阻和鉑熱電阻各分度號只有0℃時的電阻值不同,轉換公式是相同的。因此只需要在各自基類里實現(xiàn)公式,各子類傳入R0值即可。以鉑熱電阻為例,其溫度轉電阻的算法如下:
//鉑熱電阻溫度轉電阻的算法
double fromTempSub(double param) {
if ((param >= -200.0) && (param <=0.0d)) {
return this.R0 * (1.0d + this.A *param+this.B*param*param+(this.C
* (param-100)
*param
*param
*param));
}
if ((param>0.0d) && (param <=850.0d)) {
return this.R0*(1.0d+this.A*param+this.B
*param*param);
}
return overError();
}
由于熱電阻溫度轉電阻的公式是高階多項式,直接求解比較困難,因此筆者提出兩種解決方案,一種是把溫度和電阻對應的樣本數據通過曲線擬合,生成電阻和溫度對應的多項式,另一種是通過牛頓迭代法來求解復雜方程的根。
2.2.1 曲線擬合方法
曲線擬合是要求擬合的曲線能大致模擬數據的基本趨勢,其準確性判別準則也有很多,如偏差的絕對值之和最小、偏差的最大絕對值最小或偏差的平方和最小,偏差的平方和最小也叫最小二乘法,經常采用最小二乘法來確定多項式的系數,擬合工具可以選擇Matlab、Excel等,擬合過程不再細述,以下為Pt100擬合的多項式算法:
//Pt100電阻值轉溫度算法
public double toTempSub(double param) {
if ((param >=18.52) && (param < 100)) {
return 1.7237E-08*param*param*param*param-9.9584E-06*param*param*param+2.8581E-03*param*param+2.2161*param-241.96;
}else if ((param >= 100) && (param <=390.49)) {
return (1.7571E-09) *param*param*param
*param-3.0900E-07*param*param*
param+9.9568E-04*param*param
+2.3592*param-245.8;
}
return overError();
}
2.2.2 牛頓迭代法
牛頓迭代法是牛頓在17世紀提出的一種在實數域和復數域上近似求解方程的方法,是把非線性方程f(x)=0線性化的一種近似方法。迭代關,其 中f(x)是 正 向 方 程 ,nf′(xn)是f(xn)的一階導函數。 以Pt100(-200~0℃)溫度轉電阻的公式為例:
牛頓迭代法計算步驟為:
a.選初始近似值x0,計算f0=f(x0),f′0=f′(x0);
c.如果abs(xi-xi-1)滿足設定的誤差值,則終止迭代,否則轉到步驟d;
d.如果迭代次數達到預先指定的次數N,或者 f′i=0,則方法失敗,否則以(xi+1,fi+1,f′i+1)替代(xi, fi,f′i)并轉到步驟b繼續(xù)迭代。
通過對比兩種算法的精確度,軟件最終使用牛頓迭代法實現(xiàn)電阻到溫度的轉化,其精度可達10-7,迭代次數為4次左右,算法效率較高。
筆者開發(fā)的基于Android系統(tǒng)的分度表軟件,對于熱工操作人員有極大的幫助。筆者應用的曲線擬合技術和牛頓迭代算法對其他應用領域也有很好的啟發(fā)。為了提高數據計算的精確度,曲線擬合的系數需要在合理范圍內做些許調整,牛頓迭代算法也需要選取合適的初值,才能滿足收斂性。作為一個可以實際應用的軟件,軟件設計過程中也充分考慮了容錯性、可擴展性和友好性。