蘇亞娟 榮音
摘要:在嵌入式計(jì)算機(jī)系統(tǒng)中,一般包含上位機(jī)與下位機(jī)控制板卡;這種系統(tǒng)一般是一種型號(hào)的控制板卡對(duì)應(yīng)一款上位機(jī)軟件,優(yōu)點(diǎn)是功能簡(jiǎn)潔明了,缺點(diǎn)是用戶需要針對(duì)不同板卡安裝不同的軟件,對(duì)用戶要求較高或增加額外的軟件成本。本文提出一種通用的統(tǒng)一抽象板卡概念,通過抽象API,可以支持多種型號(hào)的控制板卡,實(shí)現(xiàn)軟件使用一致性,方便應(yīng)用軟件工程師的編程。
關(guān)鍵詞:嵌入式;計(jì)算機(jī)系統(tǒng);多型號(hào);統(tǒng)一抽象板卡;API
中圖分類號(hào):TP273.5 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)11-0132-02
0 簡(jiǎn)介
一般控制板卡的上位機(jī)軟件最初總是對(duì)應(yīng)初始版本的硬件板卡,當(dāng)板卡成系列、多型號(hào)發(fā)展時(shí),原先各自的獨(dú)立上位機(jī)軟件不便于管理與使用,就需要設(shè)計(jì)統(tǒng)一的程序,以便管理多種型號(hào)的設(shè)備,如在文獻(xiàn)[1]中設(shè)計(jì)了一種同時(shí)支持PCI與USB板卡的控制軟件。本文也是工作需要,根據(jù)需求設(shè)計(jì)了一種通用的統(tǒng)一抽象板卡API,以支持多型號(hào)的控制板卡。
1 軟件需求
隨著公司業(yè)務(wù)的發(fā)展,研發(fā)的板卡需要定制化、多樣化與系列化,因此迫切需要設(shè)計(jì)一種接口來(lái)隱藏這種硬件多樣性,提出開發(fā)需求如下:
(1)從應(yīng)用程序角度看,能夠隱藏硬件特定信息;(2)支持多型號(hào)的控制板卡;(3)支持每種型號(hào)的多個(gè)數(shù)目的控制板卡。
應(yīng)用開發(fā)人員可以用這個(gè)抽象板卡的API,編制程序而無(wú)需考慮實(shí)際板卡類型。單個(gè)應(yīng)用程序可以控制多個(gè)板卡,而且當(dāng)有新的板卡加入時(shí),無(wú)需大的改動(dòng),就能支持。
抽象板卡的API,設(shè)計(jì)上不能直接操控硬件板卡,必須借助原先控制板卡的提供的API。因此,軟件工程的角度看,統(tǒng)一抽象控制板卡API,只有兩個(gè)外部接口,一邊是上層的主機(jī)程序,另一邊是下層具體的激光控制板卡API。統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)[2-3]是軟件工程中一種為面向?qū)ο笙到y(tǒng)的產(chǎn)品進(jìn)行說明、可視化和編制文檔的一種標(biāo)準(zhǔn)語(yǔ)言,UML是面向?qū)ο笤O(shè)計(jì)的建模工具。抽象板卡API的UML用例圖如圖1所示。
2 抽象接口組成分解
抽象接口的功能分解圖如圖2所示。
抽象接口由三個(gè)層級(jí)的動(dòng)態(tài)庫(kù)成分組成,從上至下依次為:
(1)LC.HWInterface.dll。(2)LC.HWMgr.dll。(3)LC.B1Mgr.dll, LC.B2Mgr.dll。
2.1 LC.HWInterface.dll
LC.HWInterface.dll包含了直接由上位機(jī)軟件調(diào)用的API函數(shù),在該DLL中會(huì)引用下層的LC.HWMgr.dll。LC.HWInterface.dll包含三個(gè)類:Job、DeviceStatus與HWController。
Job類提供了上層應(yīng)用軟件訪問特定激光控制器的便利途徑,從而隱藏了多種激光器控制板卡的復(fù)雜性。每個(gè)打標(biāo)任務(wù)必須對(duì)應(yīng)一個(gè)Job對(duì)象,而每個(gè)Job對(duì)象又綁定了一個(gè)控制板卡。Job對(duì)象還包含當(dāng)前任務(wù)的完成情況、錯(cuò)誤狀態(tài)等。
DeviceStatus對(duì)象提供了上層軟件對(duì)特定激光器狀態(tài)的單點(diǎn)訪問。在DeviceStatus對(duì)象的整個(gè)生命周期內(nèi)可以對(duì)激光器的狀態(tài)隨時(shí)查詢。
HWController則對(duì)連接的設(shè)備進(jìn)行各種控制管理提供方法。比如,初始化硬件、創(chuàng)建Job對(duì)象與DeviceStatus對(duì)象、關(guān)閉硬件等。
2.2 LC.HWMgr.dll
LC.HWMgr.dll包含了公共接口,這些接口從LC.B1Mgr. dll,LC.B2Mgr.dll或其他新的板卡支持Dll里實(shí)現(xiàn)的函數(shù)抽象出來(lái)的。所以,如果需要整合新的控制板卡,就需要實(shí)現(xiàn)LC.HWMgr.dll中定義的接口。LC.HWMgr.dll就是為了隱藏控制卡的類型而引入的,LC.HWInterface.dll并不需要知道控制卡的信息,僅僅有接口的引用信息。
LC.HWMgr.dll包含了一個(gè)類:HWCreator.和三個(gè)接口:
ILaserHW、IHWMgr、和IStatusUpdate。
具體實(shí)現(xiàn)參考第4節(jié)抽象接口類圖。
2.3 LC.B1Mgr.dll
LC.B1Mgr.dll中實(shí)現(xiàn)了LC.HWMgr.dll中定義的各個(gè)接口,且調(diào)用特定的控制板卡API。如果需要整合新的控制板卡,同樣的需要實(shí)現(xiàn)上面定義的接口。LC.B1Mgr.dll在編譯時(shí)候并不需要鏈接到API中,而是在LC.HWMgr.dll中根據(jù)配置文件動(dòng)態(tài)的加載進(jìn)。所以,對(duì)于新的控制板卡,同樣需要新寫一個(gè)動(dòng)態(tài)庫(kù),且在配置文件中給出必要的信息,根據(jù)需要?jiǎng)討B(tài)加載。
包含三個(gè)類:B1HWMgr、B1Controller、和NetDevice Mgr。具體實(shí)現(xiàn)參照第4節(jié)抽象接口類圖。
3 抽象接口類圖
上位機(jī)應(yīng)用程序需要?jiǎng)?chuàng)建一個(gè)HWController實(shí)例,一個(gè)或多個(gè)打標(biāo)Job實(shí)例,對(duì)應(yīng)每個(gè)打標(biāo)激光設(shè)備的DeviceStatus實(shí)例。
HWCreator會(huì)根據(jù)配置文件來(lái)創(chuàng)建B1HWMgr或B2HWMgr的實(shí)例。在配置文件中需要指定控制板卡的類型。
抽象接口類圖,如圖3所示。
4 重要的公共方法整理(表1)
其他類略。
5 結(jié)論
該設(shè)計(jì)成功整合了目前公司的兩種型號(hào)的控制板卡,并實(shí)現(xiàn)了統(tǒng)一管理與使用接口。雖然本文僅以某激光公司的軟件開發(fā)為例,設(shè)計(jì)了支持多種類型控制板卡的接口函數(shù)庫(kù),但是該設(shè)計(jì)方法,適用于各類用途的支持多控制板卡的接口設(shè)計(jì),具有很強(qiáng)的借鑒意義。
參考文獻(xiàn)
[1] 趙文路.多模式多接口激光標(biāo)記控制軟件的設(shè)計(jì)與實(shí)現(xiàn)[D].華中科技大學(xué),2011.
[2] 宋雨,趙文清.軟件工程[M].中國(guó)電力出版社,2007.
[3] Grady Booch,等著.UML用戶指南(第2版)[M].人民郵電出版社,2012.