論利用OOP設計思想的通訊接口類(lèi)的設計與應用
0 引言
隨著(zhù)電子技術(shù)的發(fā)展,嵌入式控制系統進(jìn)入了各個(gè)行業(yè),而友善的人機交互決定了臺式機和控制系統的結合不可避免。同時(shí),隨著(zhù)虛擬儀器技術(shù)的發(fā)展,硬件軟件化的趨勢愈加明顯,在測控系統中,一般的系統構架都采用前端是數據采集系統,然后將采集到的數據通過(guò)傳輸協(xié)議傳輸到后臺臺式機中進(jìn)行更加靈活的處理和顯示,比方說(shuō)現在TI的CVS或者LabVIEW 就是專(zhuān)門(mén)用于方便地設計虛擬儀器的開(kāi)發(fā)工具。這個(gè)一方面是降低成本的方式;另一方面,系統的構架上靈活,適應性得到了加強。
1 硬件構架
嵌入式的測控系統,結合臺式機靈活的軟件設計,可以提供給用戶(hù)多樣的虛擬儀器的人機交互界面,以及復雜的數據管理功能。圖1就是一個(gè)典型的測控系統的基于虛擬儀器構架的抽象系統框圖。
整個(gè)系統,分成了3 個(gè)邏輯部分:第一部分就是待測控的系統,可能是某個(gè)系統的溫度,或者是某個(gè)工業(yè)控制過(guò)程的流量等;第2部分是數據采集和控制執行單元,這個(gè)部分負責了數據的采樣和來(lái)自工控機的命令的執行,關(guān)于數據采集單元,可以簡(jiǎn)單的由傳感器加A/D轉換電路組成,也可以是諸如頻譜儀等專(zhuān)門(mén)的測量?jì)x器。由于有些系統是開(kāi)環(huán)系統,所以未必有控制執行單元,所以這個(gè)單元在圖中用了虛線(xiàn)的方式表示,負責工控機經(jīng)過(guò)某些算法運算之后,執行控制命令;第3部分就是工控機所在的儀器界面的部分,這個(gè)部分可以使對原始數據的形象圖形化表示(即虛擬儀器,完成人機交互),也可以負責執行諸如一些特殊的信號處理功能,然后將處理結構進(jìn)行顯示或者將處理結果作為算法控制的輸入,進(jìn)行產(chǎn)生控制信號,一邊對被控對象進(jìn)行及時(shí)的控制。
系統的工作過(guò)程,首先是由被測控系統的需要檢測的數據決定了所需要的數據采用硬件進(jìn)行采用原始的數據,然后又采用系統將數據直接轉換為原始數據信號,如果采樣后需要立即進(jìn)行必要的數據處理,就可以使用DSP對數據進(jìn)行一次加工,然后作為初始數據,通過(guò)標準的傳輸協(xié)議(如串口,網(wǎng)口,藍牙,或者USB等),將數據傳輸給工控PC,然后通過(guò)編寫(xiě)工控軟件,將數據進(jìn)一步進(jìn)行深層次的處理,顯示,存儲,如果需要對系統進(jìn)行控制,就可以在工控機上對信號使用如濾波,變換或者控制PID 等的各種算法,然后通過(guò)標準協(xié)議,將處理的控制信號傳輸到控制執行單元,對測控系統中所關(guān)心的參數進(jìn)行控制。
本文關(guān)注的就是各種傳輸協(xié)議在工控PC上的編程時(shí)代碼的適應性,擴展性以及代碼的復用性。
2 接口類(lèi)的設計
2.1 基于面向對象的接口類(lèi)的設計
本文利用了面向對象的設計思想,將圖1中的各種標準工業(yè)傳輸協(xié)議進(jìn)行抽象,提供統一的接口,這樣設計的接口類(lèi),不但可以保證數據的安全性,使用的靈活性,還能實(shí)現良好的可擴充性。圖2就是依照面向對象的設計思路,利用UML表示的類(lèi)族的關(guān)系[7].
在圖2的UML表示類(lèi)的關(guān)系中,是對圖1的系統的在傳輸觀(guān)點(diǎn)來(lái)看的一個(gè)抽象,其中,Device類(lèi)是對設備的抽象,COM類(lèi)是對通訊接口的抽象,這兩個(gè)類(lèi)都是抽象類(lèi),在應用軟件看來(lái),一個(gè)具體的測量設備,只關(guān)注設備打開(kāi),傳輸數據,和關(guān)閉,其他的細節,不需要應用程序知道太多。而面向對象的程序的設計思想,可以很好地滿(mǎn)足這樣的需求,基于此,Device類(lèi)是一個(gè)用于后續實(shí)現多態(tài)機制的虛類(lèi),這個(gè)抽象類(lèi),是任何具體測量設備的父類(lèi),而派生自這個(gè)Device的任何類(lèi),都需要實(shí)現父類(lèi)中的4 個(gè)基本操作方法Open,Close,SendCmd 和RecvData;至于是否需要其他的接口方法,用戶(hù)可以根據需要進(jìn)行添加。抽象類(lèi)COM和Device是一種聚合的關(guān)系,任何一個(gè)Device 都有一個(gè)用于傳輸數據的通訊口,一個(gè)抽象的通訊類(lèi),需要提供的接口方法有Open,Close,Write 和Read,其中,Open 主要用于打開(kāi)通訊口,包含了對通訊口的初始化,之后,就可以進(jìn)行數據的傳輸了。Close用于釋放通訊口所占用的資源,如果可能,包含了對通訊口的下電操作。而Read 和Write 就是完成數據緩沖區數據的接受和發(fā)送,其中,方法簽名中的*pBuff是指向待發(fā)送或者接受到數據的緩沖區,iCount-ToWrite和iCountToRead分別是要發(fā)送或者接受的數據的字節數,這兩個(gè)方法的返回值,是實(shí)際發(fā)送或者接受到的數據的字節數。如果出錯,則返回小于0 的錯誤代碼。
對于具體的通訊協(xié)議接口,比如串口、網(wǎng)口或者GPIB,甚至其他的芯片的接口[8-9]等,都是繼承自通訊類(lèi)COM 的,在COM 類(lèi)中,各個(gè)接口方法可以定義成虛方法,這樣,有利于在具體的派生類(lèi)中對其進(jìn)行重載,從而有利于動(dòng)態(tài)多態(tài)機制的實(shí)現,而具體的差異統統放到每個(gè)具體類(lèi)的擴展部分。例如,對于串口,關(guān)注的是串口名稱(chēng),串口數據傳輸速率,有無(wú)校驗,數據位數以及停止位等信息,而網(wǎng)卡則關(guān)注的IP 地址和端口號,這些信息可以利用封裝機制,封裝到每個(gè)具體的接口類(lèi)中,他們代表著(zhù)不同類(lèi)之間的差異與個(gè)性,這些差異信息完全由具體類(lèi)自己控制操作。通過(guò)重載父類(lèi)COM類(lèi)的公有方法,就提供了通用的接口。
2.2 該構架的使用模型
采用圖2類(lèi)族設計了各個(gè)類(lèi)之后,就可以使用圖3所示的流程來(lái)應用這樣的一些類(lèi)。在具體的使用過(guò)程中,如果是用測量?jì)x器進(jìn)行來(lái)承擔原始數據的采集的,那么用戶(hù)一定是明了儀器所使用的與控制機進(jìn)行聯(lián)機的接口類(lèi)型的,或者是串口,或者是網(wǎng)口,或者是其他的新標準的工業(yè)控制接口,在應用編程時(shí),就需要先創(chuàng )建一個(gè)這樣的通訊口的對象,然后把這個(gè)對象的引用傳遞給儀器類(lèi),產(chǎn)生一個(gè)儀器對象出來(lái),由于儀器是繼承Device抽象類(lèi)的,所以在產(chǎn)生出具體儀器類(lèi)之后,利用面向對象的多態(tài)技術(shù),可以將這個(gè)儀器對象傳給一個(gè)上層應用的Device指針,上層應用就可以通過(guò)Device 類(lèi)提供的通用接口,來(lái)對設備進(jìn)行打開(kāi),讀寫(xiě)等操作,在應用層,用戶(hù)可以利用線(xiàn)程技術(shù),來(lái)提高系統的整體性能。
pid控制相關(guān)文章:pid控制原理
通信相關(guān)文章:通信原理
評論