王程崢 李文魁 宋衛(wèi)紅 黎海雪
(1. 海軍工程大學電氣與信息工程學院,武漢 430033;2. 92823部隊三中隊,三亞 572021;3. 92853部隊,遼寧 興城 125106)
艦船綜合導航系統(tǒng)作為導航系統(tǒng)的核心,對來自各種導航傳感器的導航信息進行處理,并向操舵系統(tǒng)、指控系統(tǒng)等外部用戶發(fā)送。為滿足岸基條件下某型艦船操舵系統(tǒng)維修調(diào)試的需要,開發(fā)了艦船綜合導航模擬器,用于模擬艦船操縱運動時綜合導航系統(tǒng)輸出的艦艇航向、航速、縱橫傾等導航信息,并通過1553B總線向操舵系統(tǒng)發(fā)送。1553B采用一種串行、異步和半雙工式總線結構[1],具有高可靠性、高實時性、高效率、抗干擾能力強等特點。
本文就 Windows環(huán)境下如何使用 C++Builder編譯平臺實現(xiàn) 1553B總線控制器通信的方法進行了研究,同時在綜合導航系統(tǒng)模擬器設計中進行了成功應用。
1553B總線由傳輸介質、總線控制器(BC)、遠程終端(RT)和總線監(jiān)視(BM)器等四部分組成。BC的作用是組織信息傳輸,完成數(shù)據(jù)字的收/發(fā)、字/消息的處理[2]。針對總線上遠程終端的數(shù)量和通信復雜程度,BC發(fā)送消息的設計方法主要有兩種[3]:
(1)簡單方式?;舅枷霝镽T回復消息的控制權完全在 BC。實現(xiàn)方法為:對周期消息采用固定周期來定時傳輸,對事件消息采用命令插入的方式。當BC要求RT 返回數(shù)據(jù)時,BC可向RT的子地址下達命令字,并通過采用查詢方式來獲取數(shù)據(jù)。該方法編程簡單,適用于總線結構單一、通信數(shù)據(jù)量較少的情況,對多個 RT總線,通信實時性相對下降。
(2)矢量字方式?;舅枷胧菍⒒貜拖⒌闹鲃訖嘟贿€給RT。實現(xiàn)方法為:RT接收BC命令完成相應動作,將數(shù)據(jù)字寫到相應子地址緩存中,然后按照協(xié)議構造矢量字,把矢量字發(fā)送到RT 的0/31 號子地址BUF中。BC在發(fā)送完一次性消息后,可向0/31子地址發(fā)命令字從而讀出其中存放的矢量字,根據(jù)協(xié)議解析矢量字得到相應的子地址,并向該子地址發(fā)送命令從而得到 RT數(shù)據(jù)。該方法適合多RT的復雜通信,編程靈活,通訊數(shù)據(jù)量小。
如圖1所示,綜合導航模擬器接收操舵系統(tǒng)輸出的當前舵角,按照艦艇運動模型,實時計算出艦船運動參數(shù)。并采用2個1553B通道無應答地定周期連續(xù)向操舵系統(tǒng)發(fā)送艦船的航向、航速、縱傾、橫傾等導航參數(shù)。
硬件平臺采用研華工控機。1553B通信卡采用北京神州飛航開發(fā)的基于 PCI接口的AEC1553-PCI- SBC31RT-S2型1553B通信卡。該1553B卡采用 FPGA設計,可分時工作在 BC、RT、BM模式下,雙冗余通道數(shù)據(jù)發(fā)送和接收,支持大容量的數(shù)據(jù)存儲。
圖1 艦艇綜合導航模擬器的原理框圖
該1553B板卡提供了豐富的驅動函數(shù),其中與BC通信相關的函數(shù)約有20多個,常用BC函數(shù)[4]見表 1。
表1 常用BC通信函數(shù)列表
隨卡附帶的驅動函數(shù)庫文件為基于 Visual C++的coff格式的M1553CSC.lib。若采用其它軟件進行開發(fā),則需要對庫函數(shù)進行格式轉換。如采用C++Builder,需用coff2omf命令轉換為omf格式的庫文件。相應命令為:coff2omf M1553CSC.lib M1553CSCB.lib。
在 Windows XP操作系統(tǒng)下,我們采用C++Builder開發(fā)軟件進行綜合導航信號模擬器總線控制器軟件設計。C++ Builder是由Borland公司推出的一款快速開發(fā)Win32應用程序的可視化開發(fā)工具,利用它可以實現(xiàn)高性能的執(zhí)行效率和出色的底層控制。
對綜合導航模擬器,總線結構較為簡單,因此采用簡單方式進行 BC設計。程序流程如圖 2所示。主要程序代碼說明如下:
圖2 BC通信軟件流程圖
(1)板卡初始化
M1553_Open(&hCard, CardId);
打開板卡。hCard為板卡句柄,CardId為板卡編號,按板卡所在插槽離CPU的距離由近到遠依次編號0、1…、7。這里取為0、1。
M1553_WorkMode(hCard, ModeSel);
設置工作模式。工作模式 ModeSel可取為0(BC)、1(RT)、2(BM),這里取 0。
M1553_AddTimeTag(hCard,true);
開啟時間標簽。用于觀察消息周期和間隔。分辨率 1 μs。
M1553_SetIntMaskReg(hCard,&IntMask);
設置中斷屏蔽寄存器。由于實時性要求較高,采用單消息觸發(fā)一次中斷,將中斷屏蔽寄存器結構體 IntMask中的 BC_MsgOver(BC消息結束中斷使能位)和BC_STOP (BC消息出錯停止中斷使能位)使能。
(2)數(shù)據(jù)加載
SMsg.MsgBlock.Datablk[0]=StrToFloat(Form 1->Edit1->Text);
將待發(fā)送數(shù)據(jù)字存放在BC消息描述結構體成員Datablk[32]中。
BC_WriteDataBlock(hCard,MsgId,WordCnt,SMsg.MsgBlock.Datablk);
修改運行中的BC發(fā)送的數(shù)據(jù)字,MsgId為消息 ID號,WordCnt為寫入數(shù)據(jù)字個數(shù)(取值0~32)。
由于實時性要求較高,而C++Builder自帶計時器的定時精度最高只能達到55ms[5],故采用Microsoft Win32 API 提供的一項多媒體定時器服務來實現(xiàn)數(shù)據(jù)定時加載[6],定時精度最高能達到1 ms[7]。程序需包含定時器函數(shù)頭文件"mmsystem.h",實現(xiàn)方法如下:
①設定定時器分辨率
建立最小定時器分辨率。uPeriod為最小分辨率,由設定的最小分辨率與計算機的硬件配置決定。
使定時器定時精度回到系統(tǒng)的默認值。
② 設置定時事件
uDelay 為事件周期,這里與BC發(fā)送消息的周期一致;uResolution 為延時分辨率;LpTimeProc 指向一個自定義的回調(diào)函數(shù),該函數(shù)用來設置定時事件,調(diào)用時應指定對應的事件標識符,并提供用戶數(shù)據(jù),在中斷時間內(nèi)被訪問;DwUser 存放用戶提供的回調(diào)數(shù)據(jù);FuEvent 為事件類型,TIME_ONESHOT為一次性事件,TIME_PERIODIC為周期性事件。
調(diào)用任務完成后取消定時器回調(diào)事件,及時出讓珍貴的CPU 資源。
(3)消息配置與發(fā)送
SMsg.CtlWord.ChanSel=1;//消息發(fā)送時的通道選擇 0:Channel B 1:Channel A
BC_WriteMsg(hCard, MsgId, &SMsg); //消息發(fā)送
BC_AddEndOfListFlag(hCard, MsgId+1); //添加消息鏈表結束符
(4)消息讀取
數(shù)據(jù)的讀取顯示采用C++Builder自帶的計時器Timer定時觸發(fā)。
硬件方面,傳輸距離小于30 cm時,采用短截線實現(xiàn)總線和終端設備的直接耦合;否則,采用變壓器耦合[8,9],連接時需要注意耦合器的位置。在總線兩端匹配電阻,消除信號反射。調(diào)試過程中若發(fā)現(xiàn)問題應首先判定是否為硬件問題,發(fā)送已知數(shù)據(jù),將板卡輸出腳接示波器上觀察電平,若正確則基本排除硬件問題。需要注意的是1553B總線上的消息是調(diào)制成雙極性碼的曼徹斯特碼[10]。
圖3 艦艇綜合導航模擬器BC運行界面圖
軟件方面,采用隨卡附帶的應用程序作為RT接收數(shù)據(jù)。調(diào)試時應遵循先易后難原則。先嘗試簡單通信模式,如 BC發(fā)送一個數(shù)據(jù)字測試 RT能否正確接收,RT返回的狀態(tài)字是否正常等,成功后再嘗試較復雜的通信模式。軟件運行界面如圖3所示。
本文討論了1553B總線控制器軟件設計的方法,根據(jù)艦船綜合導航模擬器的實際需求,詳細介紹了 Windows環(huán)境下基于 C++Builder如何實現(xiàn)數(shù)據(jù)發(fā)送的具體方法及系統(tǒng)調(diào)試中的注意事項。試驗表明該系統(tǒng)運行可靠,達到了預定要求。
[1]楊武志, 李敏勇. 基于艦船 1553B總線系統(tǒng)監(jiān)控測試軟件的設計[J].艦船電子工程, 2009, 29(1):190-192.
[2]李志剛. 1553B總線測試系統(tǒng)的設計與實現(xiàn)[D]. 西安西北工業(yè)大學, 2005.
[3]丁明亮, 魏志剛. 1553B總線遠程終端仿真軟件設計[J]. 計量與測試技術, 2008, 35(1): 43-47.
[4]AEC1553-PCI-SBC31RT/S2 用戶手冊[Z]. 北京: 北京神州飛航科技有限責任公司, 2011.
[5]Mark Nelson. 串行通信開發(fā)指南[M]. 北京: 中國水利水電出版社, 2001: 43.
[6]Microsoft 公司. MICROSOFT WIN32 程序員參考大全(一)[M]. 北京: 電子科技出版社, 1994: 90-95.
[7]李文魁, 陳永冰, 周永余等. 多任務實時系統(tǒng)提高實時性的方法及其在導航綜合信號源系統(tǒng)中的應用[J]. 中國慣性技術學報, 2003, 11(4): 11-15
[8]GJB 289A-1997, 數(shù)字式時分制指令/響應型多路傳輸數(shù)據(jù)總線[s]. 中國軍用標準, 1997.
[9]MIL-STD-1553,飛機內(nèi)部時分制指令/響應式多路傳輸數(shù)據(jù)總線[s]. 美國軍用標準, 1978.
[10]武鵬, 畢君懿. 1553B總線中曼徹斯特編碼器的設計[J]. 現(xiàn)代電子技術, 2011, 34(4): 61-64.