摘要:本程序利用.NET平臺(tái)、框架、多線程和數(shù)據(jù)緩沖技術(shù),實(shí)現(xiàn)對(duì)計(jì)算機(jī)RS-232串口的管理和操作,提供了對(duì)多RS-232串口和大數(shù)據(jù)流量的高效處理。該程序不僅具有常規(guī)串口調(diào)試程序的功能,還具有在系統(tǒng)底層和界面顯示等獨(dú)特的技術(shù)。對(duì)使用RS-232串口的工程人員提供了方便高效的工具。
關(guān)鍵詞:RS-232;.NET;多線程;數(shù)據(jù)緩沖;算法
中圖分類號(hào):TP334.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 17-0000-02
RS-232串口是計(jì)算機(jī)上一種非常通用的設(shè)備通信協(xié)議,大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS-232的串口,或通過(guò)PCI卡或USB擴(kuò)展串口數(shù)量。串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議。很多GPIB兼容的設(shè)備也帶有RS-232串口。同時(shí),串口通信協(xié)議也可以用于獲取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。在設(shè)備使用中經(jīng)常需要使用RS-232串口進(jìn)行數(shù)據(jù)通訊。
.NET計(jì)劃是微軟繼推出DOS、Windows之后的又一個(gè)革命性的開(kāi)發(fā)平臺(tái)。在整個(gè).NET框架中提出了大量的新概念和新技術(shù)。具有:一致的編程模式、簡(jiǎn)化了的編程模式、運(yùn)行于多個(gè)平臺(tái)、支持多語(yǔ)言的綜合、自動(dòng)資源管理、一致的出錯(cuò)處理方式、安全性、XML和SOAP的引入、全新的編程語(yǔ)言C#。
所以采用.NET平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)RS-232串口調(diào)試程序,不僅提高了開(kāi)發(fā)效率,更增加了系統(tǒng)的安全性,并運(yùn)用框架、多線程、數(shù)據(jù)緩沖和界面等技術(shù)提升程序效率。
1程序框架組成原理
該程序通過(guò)由Windows系統(tǒng)之上的.Net運(yùn)行時(shí)提供運(yùn)行環(huán)境,并通過(guò)框架的設(shè)計(jì)思想,對(duì)程序進(jìn)行了功能組件的設(shè)計(jì)。程序的框架組成原理如圖1。
串口調(diào)試程序主要由四部分組件組成:串口容器、串口創(chuàng)建管理界面、數(shù)據(jù)發(fā)送接收界面和數(shù)據(jù)存儲(chǔ)組件。串口容器提供了對(duì)多個(gè)串口同時(shí)管理的功能,并通過(guò)多線程的運(yùn)用,能夠從容應(yīng)對(duì)串口在高速數(shù)據(jù)收發(fā)時(shí)的情況。串口創(chuàng)建管理界面提供方便快捷的操作,可對(duì)串口執(zhí)行新建、更改和刪除的操作。數(shù)據(jù)發(fā)送接收界面提供了顯示串口接收的數(shù)據(jù)和發(fā)送數(shù)據(jù)的界面。數(shù)據(jù)存儲(chǔ)通過(guò)數(shù)據(jù)緩沖保存串口接收到的數(shù)據(jù)內(nèi)容。
2 程序功能設(shè)計(jì)
2.1 串口容器設(shè)計(jì)
串口容器組件主要提供了一個(gè)統(tǒng)一管理已經(jīng)創(chuàng)建的串口的空間,并提供了多線程緩沖處理機(jī)制,能夠應(yīng)對(duì)多個(gè)串口的高速數(shù)據(jù)收發(fā)工作。包括的主要功能有:
(1)提供了創(chuàng)建、更改和釋放RS-232串口的接口函數(shù);(2)對(duì)多個(gè)串口的數(shù)據(jù)接收并賦值相同的回調(diào)函數(shù);(3)接收數(shù)據(jù)的多線程緩沖功能,并提供線程數(shù)量設(shè)置接口;(4)數(shù)據(jù)流量偵測(cè)功能。
2.2 串口創(chuàng)建管理界面設(shè)計(jì)
串口創(chuàng)建管理界面組件運(yùn)行.NET GUI技術(shù),通過(guò)快捷的操作和圖標(biāo)列表方式,提供用戶直觀和簡(jiǎn)易的操作方式,主要包括的功能如下:
(1)計(jì)算機(jī)可用串口自動(dòng)偵測(cè);(2)新建串口功能(串口名、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn));(3)單獨(dú)控制串口停止運(yùn)行;(4)單獨(dú)修改串口配置;(5)刪除串口。
3 數(shù)據(jù)發(fā)送接收界面設(shè)計(jì)
數(shù)據(jù)發(fā)送接收界面分為兩部分內(nèi)容:數(shù)據(jù)接收顯示界面和發(fā)送界面。系統(tǒng)采用大比例的接收顯示區(qū)和錨定在主窗體底部的發(fā)送區(qū),這種設(shè)計(jì)方式不僅有效的增加了顯示區(qū)的可視區(qū)域,也符合用戶常規(guī)軟件的操作習(xí)慣。包括的主要功能有:
(1)綜合和分頁(yè)顯示切換功能;(2)顯示接收時(shí)間;(3)顯示接收數(shù)據(jù)的通訊標(biāo)識(shí);(4)十六進(jìn)制顯示接收數(shù)據(jù);(5)可單獨(dú)或同時(shí)向多個(gè)串口發(fā)送數(shù)據(jù);(6)發(fā)送數(shù)據(jù)結(jié)尾回車換行控制;(7)十六進(jìn)制發(fā)送數(shù)據(jù);(8)發(fā)送數(shù)據(jù)自動(dòng)記錄;(9)自動(dòng)發(fā)送功能。
4 數(shù)據(jù)存儲(chǔ)設(shè)計(jì)
數(shù)據(jù)存儲(chǔ)組件主要使用數(shù)據(jù)緩沖機(jī)制和windows文本文件結(jié)構(gòu),通過(guò)數(shù)據(jù)緩沖可以高效的接收大數(shù)據(jù)量的存儲(chǔ),文本方式有利于用戶通過(guò)操作系統(tǒng)自帶的工具進(jìn)行數(shù)據(jù)的查看。主要功能有:
(1)數(shù)據(jù)保存緩沖功能;(2)自動(dòng)建立存儲(chǔ)目錄結(jié)構(gòu);(3)自動(dòng)保存接收數(shù)據(jù);(4)數(shù)據(jù)另存功能。
5 程序?qū)崿F(xiàn)
5.1 主要算法設(shè)計(jì)
5.1.1串口容器多線程緩沖算法
串口容器多線程緩沖在整個(gè)串口調(diào)試程序中起到核心的作用,該處設(shè)計(jì)的是否高效性直接決定了整個(gè)程序的效率。在此處沒(méi)有采用.NET自帶的線程池,而是特別設(shè)計(jì)了適合本程序的線程池功能(DataThreadPool),在這個(gè)線程池基礎(chǔ)上并進(jìn)行了拓展,即增加了數(shù)據(jù)流量偵測(cè)功能。串口容器多線程類庫(kù)結(jié)構(gòu)如圖2所示。
5.1.2 串口創(chuàng)建管理算法
串口創(chuàng)建管理算法建立新的可視化RS-232操作組件(CommItem)和組件容器(CommListPanel),并在容器中對(duì)新建RS-232操作組件進(jìn)行管理。通過(guò)在每一個(gè)RS-232操作組件上建立多個(gè)回調(diào)事件,該回調(diào)事件直接聯(lián)系到后臺(tái)的串口管理容器,并調(diào)用串口容器的相應(yīng)接口,完成整個(gè)事件的同步操作??梢暬M件和容器類如圖3所示。
5.1.3 綜合和分頁(yè)顯示算法
綜合和分頁(yè)功能用于用戶方便快速的在綜合顯示和分頁(yè)顯示中進(jìn)行切換。綜合顯示在一個(gè)區(qū)域內(nèi)同時(shí)顯示所有RS-232串口接收到的數(shù)據(jù),方便用戶進(jìn)行數(shù)據(jù)對(duì)比操作;分頁(yè)顯示在單獨(dú)的窗體中分別顯示每一個(gè)串口的數(shù)據(jù)。通過(guò)在數(shù)據(jù)接收緩沖時(shí)建立分支算法,當(dāng)切換開(kāi)關(guān)時(shí),就把數(shù)據(jù)流導(dǎo)向所設(shè)置的顯示區(qū)域內(nèi)(綜合區(qū)和分頁(yè)區(qū))。兩個(gè)顯示區(qū)都通過(guò)算法實(shí)現(xiàn)數(shù)據(jù)自動(dòng)向前滾動(dòng),保證最新一條接收到的數(shù)據(jù)總是顯示在界面可視區(qū)域的底部。
5.1.4 數(shù)據(jù)存儲(chǔ)緩沖算法
由于本程序支持大批量RS-232串口的數(shù)據(jù)接收,所以當(dāng)有多個(gè)串口和大量數(shù)據(jù)被接收時(shí),必須保證所接收到的數(shù)據(jù)能夠被有效的進(jìn)行存儲(chǔ)。在這里設(shè)計(jì)了數(shù)據(jù)緩沖池,在數(shù)據(jù)緩沖池內(nèi)保存了還沒(méi)有被處理的數(shù)據(jù),并通過(guò)多個(gè)線程對(duì)數(shù)據(jù)緩沖池進(jìn)行輪詢操作,直至最后一條數(shù)據(jù)被存儲(chǔ)。該算法如圖4所示。
5.2 界面設(shè)計(jì)
整個(gè)界面的風(fēng)格采用藍(lán)色系,在windows界面組件上采用一致的顯示風(fēng)格,符合windows用戶的操作習(xí)慣。常規(guī)和重復(fù)的操作都采用按鈕的方式,方便用戶直接操作。程序主界面如圖5所示。
6 結(jié)論
RS-232串口是軟硬件開(kāi)發(fā)人員經(jīng)常使用的計(jì)算機(jī)接口,該串口調(diào)試程序的設(shè)計(jì)與實(shí)現(xiàn),在性能和使用方便性上都比已有的串口調(diào)試程序有較大提高。不僅在處理多串口和大數(shù)據(jù)流量時(shí)具有良好的性能,而且多種技術(shù)的應(yīng)用和界面組件也提供給用戶良好的使用體驗(yàn)。
參考文獻(xiàn):
[1](法)斯梅切爾(Smacchia,P.).C#和.NET 2.0 實(shí)戰(zhàn):平臺(tái)、語(yǔ)言與框架.北京:人民郵電出版社,2008.
[2](美)洛威(Lowy,J.)..NET組件程序設(shè)計(jì)(第2版).北京:電子工業(yè)出版社,2007.
[3]邱錦倫.Visual C#.NET程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2006.