蔣貴芳
(貴州省計量測試院,貴陽 550003)
隨著計量測量技術(shù)的飛速發(fā)展,出現(xiàn)了越來越多的精密測量儀器,在精密測量中對環(huán)境的監(jiān)測和控制是非常關(guān)鍵的。在精密測量實驗室,常用的是中央空調(diào)控溫系統(tǒng),它能夠?qū)嶒炇移鸬揭粋€整體宏觀的控溫效果。具體測量時,計量工作者在測量過程中需要采集被測量儀器的溫度和材料的具體溫度,這種情況下中央空調(diào)就無法做到具體點的溫度測量。在高可靠性溫度測量硬件基礎(chǔ)上,基于Visual C#平臺開發(fā)了一個Windows環(huán)境下的自動測溫系統(tǒng),通過軟硬件的結(jié)合,利用軟件實現(xiàn)了諸如測量時間間隔設(shè)置、溫度顯示、通道顯示、曲線繪制、數(shù)據(jù)圖像保存等功能。并且,多通道的設(shè)計模式,可以做到對具體的儀器和材料溫度的測量,取得實時的溫度值,避免了人工記錄,應(yīng)用方便。
系統(tǒng)硬件部分由傳感器、測溫儀主機、RS232接口、PC機等組成。結(jié)構(gòu)圖見圖1。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
在選擇測溫系統(tǒng)軟件設(shè)計平臺時,由于C#簡潔的語法、精心面向?qū)ο蟮脑O(shè)計、靈活性與兼容性等優(yōu)點,選擇了它作為程序設(shè)計語言,本文的自動化測溫儀核心運行部分就是用C#開發(fā)的。該軟件的結(jié)構(gòu)主要由五大模塊組成,分別為通信模塊、動態(tài)鏈接庫的調(diào)用功能模塊、畫圖模塊、數(shù)據(jù)存取模塊、時間記錄模塊。
1.2.1 通信模塊
通常,在C#中實現(xiàn)串口通信,一般有四種方法:1)通過MSCOMM控件,這是最簡便的方法,可功能上很難做到控制自如;2)微軟在.NET新推出的一個串口控件,基于.NET的P/Invoke調(diào)用方法實現(xiàn);3)用第三方控件,一般要付費,不太合實際,不作考慮;4)自己用API寫串口通信,這樣難度很高。現(xiàn)在在.NET Framework中提供了SerialPort類,進行串口通信時,可以通過設(shè)置SerialPort類的屬性來進行,包括口號選擇、波特率選擇、測量間隔選擇等。在串口操作中用于讀取串口數(shù)據(jù)的主要代碼如下:
ports=comboPortName.Text; //(設(shè)置端口號)
serialPort1.PortName=“com”+ports;//(設(shè)置串口)
serialPort1.BaudRate=int.Parse(comboBox1.Text); //(設(shè)置波特率)
serialPort1.Open(); //(打開串口)
}
data=serialPort1.ReadExisting();// (串口讀取數(shù)據(jù))
t1=Convert.ToString(data);
x=int.Parse(t1);
serialPort1.Close();//(關(guān)閉串口)
1.2.2 動態(tài)鏈接庫的調(diào)用功能模塊
自動測溫系統(tǒng)運用了動態(tài)鏈接庫的調(diào)用,動態(tài)鏈接庫應(yīng)用范圍廣、獨立于編程語言,且動態(tài)鏈接庫對代碼有很好的封裝、能很好的保護源代碼,C#可以調(diào)用C#自身創(chuàng)建的或其它語言創(chuàng)建的動態(tài)鏈接庫,比如Delphi、C++等等。
下面是調(diào)用一個動態(tài)鏈接庫的例子,將測溫儀傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換為溫度值。
在C#中聲明:
using tcsdll;
調(diào)用函數(shù):Triple(x, d2, d1, jzxs)
d0=Class1.Triple(x, d2, d1, jzxs);//調(diào)用動態(tài)連接庫tcsdll.dll 返回值賦給d0
函數(shù)中;x,d1,d2為整形數(shù),jzxs,d0為浮點數(shù)。
Jzxs:為校準系數(shù),存在程序安裝后的文件夾中,以文本格式的形式存在,
d0 :為測出的溫度值。
1.2.3 畫圖模塊
在C#里,可以直接調(diào)用畫圖工具出來畫圖,也可以用Graphics類,但用Graphics類畫圖比較復(fù)雜,zedgraph畫圖工具是目前非常主流的第三方畫圖控件,操作簡單,做出來的圖形也比較好看。由于這個類庫具有高度的適應(yīng)性,幾乎所有試樣的圖表都能被創(chuàng)建,代碼如下:
private void CreateGraph1(ZedGraphControl zgc)//(定義一個生成曲線控件)
{
GraphPane myPane=zgc.GraphPane;//(興建圖像面板)
for(int i=0; i<=x11-1; i++)
{
list.Add(i, dat2[i]);
}
LineItem myCurve=myPane.AddCurve(″ ″, list, Color.Blue, SymbolType.None);//,
zg0.AxisChange();
zg0.Refresh();
1.2.4 數(shù)據(jù)存取模塊
在C#中,通常存取數(shù)據(jù)的方法有很多種,方式比較多,可以用access數(shù)據(jù)庫、SQL數(shù)據(jù)庫、Excel文檔和TXT文本文件等等。由于TXT文本文件比較快捷、簡單,不需要第三方軟件,因此優(yōu)先選用了TXT文本文件存取方式:
SaveFileDialog dlg=new SaveFileDialog(); //(實例化一個SaveFileDialog保存文件對話框)
//(使用SaveFileDialog對話框,設(shè)置保存的文件路徑)
dlg.Filter=″txt文件.txt″;
dlg.AddExtension=true;
dlg.Title=″請輸入要保存的文件名″;
if(dlg.ShowDialog()==DialogResult.OK)
{
myImage.Save(@sf.FileName, ImageFormat.Bmp); //
MessageBox.Show(″圖像保存成功″, ″提示″, MessageBoxButtons.OK, MessageBoxIcon.Information);
1.2.5 時間觸發(fā)模塊
因為該測溫儀需要連續(xù)進行溫度采集,所以程序需要時間觸發(fā)模塊,定時器的主要作用是按一定的時間間隔周期性地觸發(fā)一個名為Tick的事件,一次Tick事件就對應(yīng)一個溫度采集過程。定時器的基本輸入?yún)?shù)為this.t.Interval,規(guī)定了定時器的觸發(fā)周期,此參數(shù)由前面的輸入窗口輸入,由“測量開始”按鈕觸發(fā)更新并讓定時器使能,由“測量暫?!鞍粹o觸發(fā)定時器關(guān)閉:
this.label3.Text=System.DateTime.Now.ToString(″s″);//(獲取當前時間)
this.t.Tick+=new System.EventHandler(this.t.Tick);//(將方法this.t.Tick注冊到this.t.的觸發(fā)事件上,也就是說this.t每個指定時間就執(zhí)行this.t.Tick)
this.t.Enabled=true; //(一直執(zhí)行)
測溫儀界面如圖2所示。
圖2 測溫儀界面
對實驗室進行了92h的測量, 20min計一次數(shù),并存圖,共計監(jiān)測溫度276個點。
該測溫儀共有6個通道,1、2、3號(分別為通道1、通道2、通道3)測頭固定在大理石板上,4、5、6號(分別為通道4、通道5、通道6)測頭懸掛在中空位置,根據(jù)數(shù)據(jù)做一個空間梯度分析,并用圖分別把1、2、3通道測溫數(shù)據(jù)和4、5、6通道測溫數(shù)據(jù)表示如圖3、圖4所示。
圖3 1、2、3通道測溫數(shù)據(jù)圖
圖4 4、5、6通道測溫數(shù)據(jù)圖
從運行程序里將保存的數(shù)據(jù)取出,6個通道總的溫度變化為0.3℃。1、2、3通道測頭固定在大理石板上,溫度變化為0.25℃。4、5、6通道測頭懸掛在中空位置上,溫度變化為0.29℃。
以面向?qū)ο缶幊陶Z言為工具的測溫系統(tǒng)軟件包將數(shù)據(jù)采集、自動繪圖、數(shù)據(jù)存儲管理有機的合為一個整體,解決了三者分離的疑難問題。多個通道的測量過程可以在30s內(nèi)完成,盡可能地保證了溫度的穩(wěn)定性和測試數(shù)據(jù)的自動采集,提高了測量的準確度,減少了人為讀數(shù)帶來的誤差,同時數(shù)據(jù)的存儲大大方便了操作人員的使用,為計量檢測者提供了一個有力的工具,使用很方便,值得推廣。
參考文獻
[1] Karli Watson ,Christian Nage. Beginning Visual C# 2010[M]. Wiley,2010
[2] 毛玉蘋,李賀鵬,等.一種簡單實用的環(huán)境試驗設(shè)備自動檢測系統(tǒng)[J].計量技術(shù),2013(4)
[3] 潘光斌.基于C++Builder的自動測溫系統(tǒng)設(shè)計技術(shù)研究[J].計量技術(shù),2002(2)
[4] 侯高雷.基于C#的高低溫自動化測試系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2012(5)
[5] 薛宇飏,田社平,等,基于DS18B20的分布式糧倉測溫系統(tǒng)[J].計量技術(shù),2009(9)
[6] 黃敬堯,楊爽,張超,趙慧杰,郭昊,等.基于C#的AUV控制軟件的設(shè)計與實現(xiàn)[J].機械工程師,2013(5)