何波玲,張志春,隋菱歌
(1.長(zhǎng)春金融高等專科學(xué)校;2.空軍航空大學(xué)軍事仿真技術(shù)研究所)
在數(shù)據(jù)采集、設(shè)備控制、系統(tǒng)仿真等工程實(shí)踐中,硬件設(shè)備與應(yīng)用軟件之間的接口問題尚未規(guī)范化,對(duì)大型工程而言,由此產(chǎn)生的硬件驅(qū)動(dòng)程序開發(fā)和應(yīng)用程序開發(fā)之間的關(guān)聯(lián)依賴、相似任務(wù)的重復(fù)開發(fā)、軟硬件集成時(shí)的接口處理等問題,都對(duì)工程開發(fā)效率產(chǎn)生影響.針對(duì)此問題,該文對(duì)硬件接口的規(guī)范化問題進(jìn)行了研究,定義了一個(gè)簡(jiǎn)潔規(guī)范的硬件控制量的標(biāo)識(shí)方法和訪問方法,并設(shè)計(jì)實(shí)現(xiàn)一個(gè)符合該規(guī)范的可重用的支持分布式處理的工程化軟件中間件(即硬件訪問服務(wù)系統(tǒng)).解決了如下問題:
(1)規(guī)范的簡(jiǎn)潔性:硬件控制量的標(biāo)識(shí)方法和訪問方法必需簡(jiǎn)單、優(yōu)雅,便于硬件驅(qū)動(dòng)開發(fā)人員和應(yīng)用軟件開發(fā)人員使用.
(2)系統(tǒng)的實(shí)時(shí)性:因?yàn)榇蟛糠止こ虒?duì)硬件的控制都有實(shí)時(shí)性要求,因此,系統(tǒng)必須滿足該類工程的需求.
(3)系統(tǒng)的通用性和可重用性:系統(tǒng)應(yīng)具有通用性,即不依賴于具體硬件控制技術(shù)且當(dāng)硬件控制量增減或值域發(fā)生變化時(shí),無需對(duì)源碼進(jìn)行修改或重編譯,實(shí)現(xiàn)軟件的可重用性.
(4)支持工程的分布式處理,且配置簡(jiǎn)單靈活:分布式處理是現(xiàn)代工程的最重要處理方式之一,大型工程對(duì)硬件的控制常常分布式的,因此,該項(xiàng)目必須是分布處理和多節(jié)點(diǎn)部署的,而且只需進(jìn)行簡(jiǎn)單的配置就可應(yīng)用于不同的工程項(xiàng)目.
(5)支持工程的無縫集成:利用該規(guī)范,硬件驅(qū)動(dòng)開發(fā)人員和應(yīng)用軟件開發(fā)人員可獨(dú)立、并行地硬件驅(qū)動(dòng)和應(yīng)用軟件的開發(fā),并在工程集成階段實(shí)現(xiàn)無縫對(duì)接,降低集成成本.
(6)支持主流傳輸協(xié)議和方式:目前,分布式處理系統(tǒng)節(jié)點(diǎn)間的通信主要采用以太網(wǎng)(UDP)、反射內(nèi)存(RFM)網(wǎng)和DLL共享等三種主要數(shù)據(jù)傳輸方式,系統(tǒng)同支持這些傳輸協(xié)議和方式.
(7)支持對(duì)硬件檢測(cè)和維護(hù):在目標(biāo)系統(tǒng)交付使用后,必須定期對(duì)硬件運(yùn)行狀態(tài)進(jìn)行檢測(cè)和維護(hù),系統(tǒng)應(yīng)該最大程度地滿足硬件檢測(cè)維護(hù)系統(tǒng)的開發(fā)要求,使硬件檢測(cè)維護(hù)系統(tǒng)的開發(fā)簡(jiǎn)單化.
系統(tǒng)以動(dòng)態(tài)鏈接庫(kù)DLL[1]的形式向用戶(即程序)提供硬件訪問服務(wù)接口(即編程接口),通過該接口,硬件進(jìn)行驅(qū)動(dòng)或采樣的程序可按如下標(biāo)識(shí)訪問每個(gè)硬件量.
面板上的每個(gè)硬件量(模擬輸出量AO,模擬輸入量 AI,開關(guān)輸出量 DO,開關(guān)入量 DI[2-3])以二維方式進(jìn)行標(biāo)識(shí).硬件量編號(hào)規(guī)則如下(見圖1).
圖1 硬件量標(biāo)識(shí)
AO(面板編號(hào),控制量編號(hào) )[:范圍];AI(面板編號(hào),控制量編號(hào) )[:范圍];DO(面板編號(hào),控制量編號(hào))[:取值列表];DI(面板編號(hào),控制量編號(hào) )[:取值列表].
系統(tǒng)提供的服務(wù)接口簡(jiǎn)潔明了、易于使用.以下是驅(qū)動(dòng)端用戶和用戶端用戶使用進(jìn)行硬件量訪問的示例.
(1)驅(qū)動(dòng)端使用示例
(2)用戶端使用示例
系統(tǒng)支持驅(qū)動(dòng)端和用戶端的多節(jié)點(diǎn)配置(圖2).動(dòng)態(tài)連接庫(kù)具有通用性,即不依賴于具體硬件控制技術(shù)且當(dāng)硬件控制量增減或值域發(fā)生變化時(shí),無需對(duì)動(dòng)態(tài)鏈接庫(kù)進(jìn)行修改或重編譯.對(duì)不同的應(yīng)用,只需根據(jù)具體的硬件控制量和節(jié)點(diǎn)配置要求,準(zhǔn)備好控制量外部定義文件(4.1)、信息港配置文件(4.2)和網(wǎng)絡(luò)傳輸配置文件(4.3)即可.
UDP傳輸信息港[4]配置在外部配置文件Config.net中描述,其格式如下:
[0]0號(hào)信息港= <IP0,PORT0>
[1]1號(hào)信息港= <IP1,PORT1>
…
[n]n號(hào)信息港= <IPn,PORTn>
圖2 系統(tǒng)部署圖
傳輸配置在外部配置文件DrvConfigEx.txt(驅(qū)動(dòng)端)和UsrConfigEx.txt(用戶端)中描述.驅(qū)動(dòng)端外部配置文件和用戶端外部配置文件具有相同的格式:
硬件量外部定義配置用來描述系統(tǒng)中實(shí)際的硬件控制量,它和硬件標(biāo)識(shí)圖(見圖1)中的控制量標(biāo)識(shí)一一相對(duì)應(yīng),可在繪制控制量標(biāo)識(shí)圖時(shí)同時(shí)產(chǎn)生.以下給出文件的格式(其中,DO、DI的狀態(tài)數(shù)缺省為2).
以下僅介紹有助于描述系統(tǒng)的主要數(shù)據(jù)結(jié)構(gòu).
5.1.1 AO-AI數(shù)據(jù)結(jié)構(gòu)(1)一維存儲(chǔ)區(qū)
用來存儲(chǔ)驅(qū)動(dòng)端和用戶端模擬量的當(dāng)前值.
在驅(qū)動(dòng)端和用戶端各設(shè)置獨(dú)立的一維存儲(chǔ)區(qū),是為了解決驅(qū)動(dòng)端和用戶端在使用DLL共享數(shù)據(jù)傳輸方式下所引起的正常進(jìn)程和檢測(cè)、維護(hù)進(jìn)程的數(shù)據(jù)傳輸沖突問題.
數(shù)據(jù)結(jié)構(gòu)在DLL中以共享節(jié)[1]的方式存儲(chǔ),以支持DLL共享數(shù)據(jù)傳輸及控制量的多進(jìn)程共享.
數(shù)據(jù)結(jié)構(gòu)關(guān)系由動(dòng)態(tài)連接庫(kù)啟動(dòng)時(shí)讀取外部定義文件RegAOs.txt和RegAIs.txt而建立.5.1.2 DO-DI數(shù)據(jù)結(jié)構(gòu)
(1)一維存儲(chǔ)區(qū)
unsigned char hwioDrvDO[MAXDOTOTAL],hwioDrvDI[MAXDITOTAL];
unsigned char hwioUsrDO[MAXDOTOTAL],hwioUsrDI[MAXDITOTAL];
(2)中間檢索數(shù)據(jù)
short hwioIdxToDO[MAXPANEL][MAXDO],hwioIdxToDI[MAXPANEL][MAXDI];
unsigned char g_nStatusOfDO[MAXDOTOTAL],g_nStatusOfDI[MAXDITOTAL];
(3)數(shù)據(jù)結(jié)構(gòu)關(guān)系
對(duì)驅(qū)動(dòng)端,DO(i,j)=hwioDrvDO[hwioIdxTo-DO[i][j]];DI(i,j)=hwioDrvDI[hwioIdxToDI[i][j]];
對(duì)用戶端,DO(i,j)=hwioUsrDO[hwioIdxTo-DO[i][j]];DI(i,j)=hwioUsrDI[hwioIdxToDI[i][j]];
g_nStatusOfDO[idx]:序號(hào)為idx的DO狀態(tài)數(shù);g_nStatusOfDI[idx]:序號(hào)為 idx的 DI狀態(tài)數(shù).
數(shù)據(jù)結(jié)構(gòu)關(guān)系由動(dòng)態(tài)連接庫(kù)啟動(dòng)時(shí)讀取外部定義文件RegDOs.txt和RegDIs.txt而建立.5.1.3 數(shù)據(jù)傳輸區(qū)
(1)驅(qū)動(dòng)端發(fā)送及用戶端接收緩沖區(qū)
(2)用戶端發(fā)送及驅(qū)動(dòng)端接收緩沖區(qū)
●usrtype為用戶類型:NORMALUSR(普通用戶)或SUPERUSR(超級(jí)用戶).
●drvmode指定驅(qū)動(dòng)模式:NORMAL或MAINTAIN,用來表示所傳輸?shù)目刂屏渴怯糜谄胀刂?、還是維護(hù)控制.
●驅(qū)動(dòng)端DLL根據(jù)Usrtype和drvmode確定自己的狀態(tài):
NORMAL= <NORMALUSR,任意 >;DETECTING= <SUPERUSR,NORMAL>;MAINTAINING= <SUPERUSR,MAINTAIN >.
●AI[i]、DI[i]、AO[i]、DO[i]為實(shí)際控制量,由外部定義文件(見4.3)確定;每個(gè)AI、AO以float傳輸,每個(gè)DI、DO以bit位傳輸;bit位全1(含float)表示無效數(shù)值,接收端據(jù)此對(duì)多數(shù)據(jù)源進(jìn)行整合.
5.2.1 初始化服務(wù)接口算法
驅(qū)動(dòng)端初始化服務(wù)接口hwioDrvInit()和用戶端初始化服務(wù)接口hwioUsrInit(int Usrtype)的功能是讀取網(wǎng)絡(luò)配置文件到內(nèi)存并進(jìn)行UDP網(wǎng)絡(luò)初始化.它們的算法極為相似,限于篇幅,下面僅給出hwioUsrInit(int Usrtype)的簡(jiǎn)略算法步驟:
5.2.3 用戶端控制量更新服務(wù)接口算法
5.2.4 硬件量宏定義
定義了一種規(guī)范的硬件控制量的標(biāo)識(shí)方法和訪問方法,并以動(dòng)態(tài)鏈接庫(kù)DLL的形式實(shí)現(xiàn)了該方法.系統(tǒng)用動(dòng)態(tài)鏈接庫(kù)DLL提供此類應(yīng)用的不變的公共部分,用外部配置文件定義與具體的應(yīng)用相關(guān)的變化部分,以此實(shí)現(xiàn)系統(tǒng)的適應(yīng)性.系統(tǒng)接口簡(jiǎn)潔,易于配置,通用性和重用性高,避免了軟硬件通信協(xié)議的重復(fù)開發(fā);系統(tǒng)支持以太網(wǎng)(UDP)、反射內(nèi)存(RFM)網(wǎng)和DLL共享三種常用的數(shù)據(jù)傳輸方式,并實(shí)現(xiàn)了傳輸方式對(duì)用戶的透明性;系統(tǒng)支持對(duì)硬件控制的在線檢測(cè)和在線維護(hù);系統(tǒng)規(guī)范了硬件控制量的標(biāo)識(shí)和訪問方法,有利于硬件驅(qū)動(dòng)程序和相關(guān)應(yīng)用軟件的并行開發(fā)和無縫集成,可大大提高系統(tǒng)開發(fā)效率.
[1] [美]CharlesPetzold.Windows程序設(shè)計(jì)(第5版·英文版)[M].北京:人民郵電出版社,2009.
[2] 張志春,徐坤,李小奇,呂巖.基于多串口的單片機(jī)群控系統(tǒng)管理調(diào)度技術(shù)[J].北京:計(jì)算機(jī)工程與設(shè)計(jì),2007.2,28(3):625-632.
[3] 王行仁.飛行實(shí)時(shí)仿真系統(tǒng)及技術(shù)[M].北京:北京航空航天出版社,2000.
[4] 張志春,何波玲,雷相波.一種通用網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].武漢:海軍工程大學(xué)學(xué)報(bào),2007.2,19(1):53-60.
[5] 顧穎彥.反射內(nèi)存網(wǎng)實(shí)時(shí)通信技術(shù)的研究[J].上海:計(jì)算機(jī)工程,2002(07):143-144.
哈爾濱師范大學(xué)自然科學(xué)學(xué)報(bào)2012年3期