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