摘 要:數(shù)據(jù)采集系統(tǒng)應(yīng)用于工業(yè)控制各個領(lǐng)域,如何提高采集軟件的穩(wěn)定性和數(shù)據(jù)采集效率成為一個技術(shù)難點。利用C#語言程序設(shè)計的ADC數(shù)據(jù)采集上位機,可以通過RS232接口讀取、轉(zhuǎn)換、存儲并實時顯示外圍數(shù)據(jù)源中的數(shù)據(jù)。另外,使用VS2013.NET編程環(huán)境類庫中Serial Port類和Timer類,可以提高數(shù)據(jù)采集效率、優(yōu)化容錯機制和系統(tǒng)界面。
關(guān)鍵詞:C#;ADC;數(shù)據(jù)采集;串口通信;RS232
中圖分類號:TP311.11
在計算機廣泛應(yīng)用的今天,數(shù)據(jù)采集系統(tǒng)在計算機各個領(lǐng)域都具有重要的作用和影響,而串行口是計算機和外圍數(shù)據(jù)設(shè)備之間進行數(shù)據(jù)交換的重要介質(zhì)。串口通信正是由以PC作為上位機而以單片機作為下位機組成的數(shù)據(jù)采集系統(tǒng)最可靠,最簡單、靈活的通信方式[1-2]。本系統(tǒng)的上位機設(shè)計主要是把特定的數(shù)據(jù)有單片機組成的數(shù)據(jù)存儲裝置中讀取出來,而作適當處理后存儲到文本文件中。由于使用Windows API編程非常繁瑣,本系統(tǒng)上位機采用了C#語言在Visual Studio 2013.NET環(huán)境下完成[3]。.NET集成了大量的實用類庫,本系統(tǒng)上位機部分主要使用了Serial Port類和Timer類進行串口同信與多線編程,使得上位機軟件編程部分大為輕松[4]。
1 系統(tǒng)的整體設(shè)計
系統(tǒng)整體是由外圍電路和飛思卡爾K60芯片組成的ADC數(shù)據(jù)采集系統(tǒng),通過串口RS232將數(shù)據(jù)送到PC機,由上位機將數(shù)存儲到文本庫里面。
圖1 整體系統(tǒng)設(shè)計
2 上位機的設(shè)計與實現(xiàn)
上位機軟件通過RS232串行口與外圍數(shù)據(jù)模塊通信,完成數(shù)據(jù)的采集工作,然后做適當數(shù)據(jù)處理后,進行數(shù)據(jù)存儲與顯示。本設(shè)計中采用的上位機軟件是在Windows 7操作系統(tǒng)下Visual Studio 2013.NET編程環(huán)境中,利用C#語言編程完成,通過Serial Port類來實現(xiàn)串口通信功能,通過Timer類來完成定時采集功能,最后使用TXT文本文件來存儲數(shù)據(jù)。其中,Serial Port類為應(yīng)用程序提供了通過串口收發(fā)數(shù)據(jù)的簡便方法,具有功能強大,通信快速,實時性好的特點[4]。
上位機設(shè)計的重難點在于如何通過串口從下位機接收到數(shù)據(jù)將采集的數(shù)據(jù)實時存儲、顯示出來。上位機總體設(shè)計流程圖如圖2所示。
圖2 上位機程序流程圖
從串口接收的數(shù)據(jù)主要采用Serial Port控件,在Visual Studio 2013中添加該控件,需要設(shè)置COM口(可修改),波特率(9600),數(shù)據(jù)位(8)、停止位(1)、校驗位(0),通過事件驅(qū)動方式接收數(shù)據(jù)。
2.1 主要涉及步驟
(1)先在VS開發(fā)環(huán)境下新建一個window工程,然后在窗體上安放一些必須的控件,如按鍵(button)、文本框(Textbox)等;
(2)添加timer控件和Serial Port控件分別實現(xiàn)數(shù)據(jù)采集的定時和數(shù)據(jù)采集的鏈接。
2.2 上位機程序設(shè)計(程序段)
2.2.1 串口處理程序
if (serialPort1.IsOpen)//判斷
{serialPort1.Close();//此處可不加try catch
TrackBar[] MyProgeressBar=GetTrackBar();
foreach(TrackBar theBar in MyProgeressBar)//遍歷,每個progressbar歸零
theBar.Value=0;
button1.Text=\"打開串口\";}
else
{try{
serialPort1.PortName=comboBox1.Text;//串口號
serialPort1.Open();//打開
groupBox2.Visible=true;//第二個框框可見
button1.Text=\"關(guān)閉串口\";}//按鍵標題
此處的難點在于要將串口接收到的數(shù)據(jù)依次通過TrackBar將數(shù)據(jù)動態(tài)顯示。
2.2.2 獲取系統(tǒng)時間程序
textBox2.Text=DateTime.Now.ToString();
通過DataTime.Now獲取當前電腦系統(tǒng)的時間,采用ToString方法會返回一個“以文本方式表示”此對象的字符串。
2.2.3 存儲數(shù)據(jù)程序
System.IO.StreamWriter swobj=System.IO.File.AppendText(\"E:\\1.txt\");
swobj.WriteLine(this.textBox1.Text);
swobj.Flush();
swobj.Close();
通過System.IO獲取軟件與系統(tǒng)的通道,再通過WriteLine函數(shù),將數(shù)據(jù)一行一行寫入(\"E:\\1.txt\")這個文件中。最后通過swobj.Flush(),swobj.Close()兩個函數(shù)將數(shù)據(jù)不斷的存和儲。
3 運行效果及主要界面
本軟件經(jīng)過長期運行,數(shù)據(jù)采集正常,能夠?qū)⑼鈬臄?shù)據(jù)源中的數(shù)據(jù)正確讀取并按規(guī)定格式處理,取得了較好的數(shù)據(jù)此采集效率,達到了設(shè)計預(yù)期效果,其中主要運行界面及效果圖如下:
圖3 初始界面圖
圖4 運行效果屆面圖
由圖4可知,該上位機具有良好的系統(tǒng)界面,TrackBar實時顯示當前采集動態(tài)數(shù)據(jù),同時通道1實時顯示當前所采集的數(shù)據(jù),同時顯示系統(tǒng)當前運行時間。
圖5 存儲數(shù)據(jù)界面
由圖5可知,TXT文本中顯示當前的數(shù)據(jù)和采集的時間,每隔1/6s采集的數(shù)據(jù),避免了數(shù)據(jù)丟失,提高了采集效率。
由表1,我們可知道,上位機通過長時間的運作,發(fā)現(xiàn)數(shù)據(jù)采集一直維持在萬分之幾,都在誤差允許范圍內(nèi),說明該軟件具有良好的容錯機制。
4 結(jié)束語
利用C#語言程序設(shè)計的ADC數(shù)據(jù)采集上位機,可以通過RS232接口讀取、轉(zhuǎn)換、存儲并實時顯示外圍數(shù)據(jù)源中的數(shù)據(jù)。另外,使用VS2013.NET編程環(huán)境類庫中Serial Port類和Timer類,可以提高數(shù)據(jù)采集效率、優(yōu)化容錯機制和系統(tǒng)界面。
經(jīng)過長時間測試,本文所設(shè)計的上位機軟件運行良好、性能穩(wěn)定,操作簡便,較好的滿足了數(shù)據(jù)采集系統(tǒng)對上位機的要求。
參考文獻:
[1]李強.基于API函數(shù)的Windows多線程串口通信[J].科技信息,2008(17):404-405.
[2]吳興中,歐青立.一種PC與單片機RS232串口通信設(shè)計[J].應(yīng)用天地,2009(01):74-75.
[3]韓中華,趙貞麗,丁志文.基于C#串行類的PC機與IC卡讀寫器串行通信的實現(xiàn)[J].科技廣場,2007(03):79-81.
[4]張立.C#程序設(shè)計編程經(jīng)典[M].北京:清華大學出版社,2008.
作者簡介:甘亞鵬(1990-),男,湖北崇陽人,本科,電子與信息科學與技術(shù)專業(yè),研究方向:非線性理論控制(PID,混沌控制)、智能機器人控制算法研究、C#、C++、VB上位機的編程與應(yīng)用;方磊(1992-),男,湖北鄂州人,本科,電子與信息科學與技術(shù)專業(yè),研究方向:C#、C++、VB上位機的編程與應(yīng)用。
作者單位:湖北科技學院 電子與信息工程學院,湖北咸寧 437100