姚旭棟 何黎明 王 林
(上海交通大學電子信息與電氣工程學院,上海 200240)
在某研究院航電實驗室針對某型號支線飛機的開發(fā)與試驗過程中,現(xiàn)有ARINC 429總線通信設備由于開放性差以及可擴展性不足等因素,已不能滿足實驗室在開發(fā)和試驗過程中對ARINC 429總線通信仿真環(huán)境的要求。為了提供一個可靠、實用、可自定義的運行環(huán)境,本文設計了基于虛擬儀器的ARINC 429總線仿真系統(tǒng)。該系統(tǒng)可實現(xiàn)上電初始化、總線數(shù)據(jù)存儲以及自定義增減總線信號、編輯發(fā)送數(shù)據(jù)和解析接收數(shù)據(jù)等功能,能夠滿足航電系統(tǒng)當前開發(fā)與試驗工作中對ARINC 429總線通信仿真環(huán)境的需求,并可根據(jù)需要,方便地進行系統(tǒng)功能的升級和擴展。
ARINC 429是美國航空無線電公司所制定的航空數(shù)字總線傳輸標準,定義了航空電子設備和系統(tǒng)之間相互通信的規(guī)范。ARINC 429總線信號使用雙絞屏蔽線傳輸,傳輸速率可分為高速100 kbit/s和低速12.5 kbit/s,每個總線發(fā)送端最多可連接20個接收端[1]??偩€數(shù)據(jù)通信的每個字都由32位數(shù)據(jù)組成,其中1~8位包含了標號信息(label),9~10位提供了源終端識別信息(source/destination identifier,SDI),11 ~29 位包含數(shù)據(jù)(data),30 ~31位組成符號狀態(tài)矩陣(symbolic state matrix,SSM),最高位(32 位)為奇偶校驗位(parity)[2]。
ARINC 429總線仿真系統(tǒng)基于虛擬儀器技術(shù),硬件采用美國國家儀器公司(NI)的工業(yè)化總線PXI平臺以及AIM公司的ACX429 PXI通信模塊。ACX429 PXI通信模塊具有8路通道,通過編程可對每路通道的收發(fā)狀態(tài)以及傳輸速率進行配置,傳輸速率可在高速100 kbit/s和低速12.5 kbit/s之間進行切換。軟件設計基于LabVIEW,搭建了系統(tǒng)的框架和硬件的控制程序,并借助LabVIEW圖形化的開發(fā)環(huán)境,創(chuàng)建了具有良好人機交互性的系統(tǒng)界面。
借助上述硬件和軟件平臺,自定義ARINC 429總線仿真系統(tǒng)可實現(xiàn)多通道自定義信號的批量發(fā)送和接收,支持 BNR(binary)、BCD(binary-coded-decimal)和DISC(discrete)三種數(shù)據(jù)類型的總線信號,并通過創(chuàng)建數(shù)據(jù)庫,實現(xiàn)總線信號的初始化和自定義配置以及數(shù)據(jù)和狀態(tài)的自定義保存等功能。
自定義總線數(shù)據(jù)的發(fā)送模塊可按需求實現(xiàn)對總線信號的配置,能設置信號的名稱、數(shù)據(jù)類型、發(fā)送間隔等所有相關(guān)信息,并自動生成32位數(shù)據(jù),在指定的發(fā)送間隔和發(fā)送通道下進行總線信號的發(fā)送。
實現(xiàn)總線信號發(fā)送功能的LabVIEW軟件結(jié)構(gòu)主要分為數(shù)據(jù)庫、總線數(shù)據(jù)操作程序、全局變量和ACX429驅(qū)動程序四部分,其結(jié)構(gòu)框圖如圖1所示。
圖1 總線信號發(fā)送程序結(jié)構(gòu)框圖Fig.1 Block diagram of bus signal transmitting program
數(shù)據(jù)庫基于Microsoft Access數(shù)據(jù)庫管理系統(tǒng),通過第三方開發(fā)的工具包LabSQL對數(shù)據(jù)庫進行操作。LabSQL利用Microsoft ADO和SQL語言訪問數(shù)據(jù)庫,并對復雜的底層 ADO和SQL操作進行了封裝[3-4]。相比于LabVIEW中如TDMS等其他形式的數(shù)據(jù)存儲方式,使用數(shù)據(jù)庫連接LabVIEW,盡管存取速度相對較低,但能夠有效地支持一些對數(shù)據(jù)結(jié)構(gòu)要求嚴格的場合[5]。數(shù)據(jù)庫中保存了所有總線信號的配置信息以及發(fā)送數(shù)據(jù),供總線數(shù)據(jù)操作程序調(diào)用。
總線數(shù)據(jù)操作程序主要由以下四部分構(gòu)成。
①總線信號配置程序,實現(xiàn)新增、刪除、編輯任意總線信號等功能,每條信號都包括信號名稱、Label、數(shù)據(jù)類型、發(fā)送通道等信息,并實時保存至數(shù)據(jù)庫。
②初始化程序,在程序運行初始,讀取數(shù)據(jù)庫中全部總線信號的配置信息并賦給全局變量,最后,根據(jù)全局變量,生成初始狀態(tài)下的32位數(shù)據(jù)。
③發(fā)送狀態(tài)配置程序,雙擊信號列表中的信號名稱,可編輯總線信號的發(fā)送數(shù)據(jù)和發(fā)送狀態(tài),并將編輯結(jié)果實時傳遞給全局變量,生成待發(fā)送的32位數(shù)據(jù)。
④發(fā)送狀態(tài)管理程序,可以將全局變量中所有信號的發(fā)送數(shù)據(jù)以及是否被選定發(fā)送的信息保存至數(shù)據(jù)庫,也可以從數(shù)據(jù)庫將這些信息載入到全局變量。
LabVIEW全局變量由配置信息、發(fā)送數(shù)據(jù)、發(fā)送通道、發(fā)送間隔和32位數(shù)據(jù)這五種數(shù)據(jù)構(gòu)成。配置信息包含了每條總線信號除發(fā)送數(shù)據(jù)外的所有信息,發(fā)送間隔和發(fā)送通道從每條信號的配置信息中提取。一旦全局變量從總線數(shù)據(jù)操作程序獲得某信號配置信息或發(fā)送數(shù)據(jù)的更新,系統(tǒng)將實時計算該信號的32位數(shù)據(jù),以確保硬件驅(qū)動程序能隨時調(diào)用到最新的信息。
ACX429板卡的驅(qū)動程序模塊通過LabVIEW的CLN節(jié)點調(diào)用相關(guān)動態(tài)鏈接庫實現(xiàn),這種方法使得LabVIEW在能夠支持NI公司數(shù)據(jù)采集卡的情況下,還能夠直接使用第三方的數(shù)據(jù)采集卡,從而大大提高了開發(fā)效率[6-7]。
當開始發(fā)送總線信號后,LabVIEW程序首先對發(fā)送通道的傳輸速率、緩存空間等參數(shù)進行配置。系統(tǒng)中,將參數(shù)b_speed置為1,則通道的傳輸速率設定為高速,即100 kbit/s;將參數(shù)b_speed置為0,則通道的傳輸速率設定為低速,即12.5 kbit/s。然后,調(diào)用LabVIEW全局變量中每個總線信號的發(fā)送間隔以及32位數(shù)據(jù),為每路發(fā)送通道創(chuàng)建一張緩存表,保存在緩存空間。最后,根據(jù)緩存空間內(nèi)的表格進行總線信號的發(fā)送。
ACX429驅(qū)動程序的初始化程序為每個信號分配20個字的緩存空間,因此,緩存表的大小為信號數(shù)N×20,格式如圖2所示。系統(tǒng)中,總線信號的發(fā)送間隔共有 50 ms、100 ms、200 ms、500 ms 和 1000 ms 五種,根據(jù)每個信號不同的發(fā)送間隔,將該信號的發(fā)送數(shù)據(jù)按照圖2中數(shù)據(jù)“D”所示的位置和間隔,寫入到緩存表中的相應行和列。ACX429驅(qū)動程序在初始化后讀取各通道的緩存表,每隔50 ms依次發(fā)送緩存表中的一列數(shù)據(jù),并在收到停止發(fā)送指令前循環(huán)發(fā)送緩存表中的數(shù)據(jù),從而每秒都能將整張緩存表的數(shù)據(jù)發(fā)送一遍。因此,按圖2所示的格式,根據(jù)信號的發(fā)送間隔,將所有總線信號的32位數(shù)據(jù)寫到緩存空間中去,就能夠使總線信號在指定的發(fā)送間隔下進行發(fā)送。
圖2 總線通信緩存表示意圖Fig.2 Schematic of the bus communication buffering
自定義總線數(shù)據(jù)的接收模塊可實現(xiàn)接收和顯示在指定通道內(nèi)傳輸?shù)目偩€信號的功能。除了每條總線信號原始的32位數(shù)據(jù)外,還能顯示信號的解析數(shù)據(jù)、配置信息以及在相應通道內(nèi)的發(fā)送間隔。
對于需要接收的總線信號,與發(fā)送信號一樣,必須事先在數(shù)據(jù)庫中預存基本信息,如信號名稱、數(shù)據(jù)類型、數(shù)據(jù)格式等。在接收總線信號時,根據(jù)32位數(shù)據(jù)中低8位的Label信息,查找它在數(shù)據(jù)庫中對應的預存信息,并根據(jù)數(shù)據(jù)類型、數(shù)據(jù)格式來解析該總線信號的發(fā)送數(shù)據(jù),實現(xiàn)了實時接收、顯示、解析總線數(shù)據(jù)的功能,且可對接收到的總線信號按自定義配置,保存至數(shù)據(jù)庫或者導出至Excel文件中。
ARINC 429總線信號的Label號共有256種,每個Label號對應四種SDI號。因此,通過LabVIEW在緩存空間中創(chuàng)建一張256×4×20的表格,可以使接收到的總線信號按Label號和SDI號存放在唯一指定的位置,并為每個總線信號分配20個字的緩存空間。
在完成硬件的初始化配置以及緩存表的創(chuàng)建后,程序每隔50 ms接收一次通道上正在發(fā)送的總線數(shù)據(jù),并更新至緩存表。在接收20次數(shù)據(jù)即1 s后,程序?qū)⒏鶕?jù)緩存空間每一行的非空數(shù)據(jù)的數(shù)量,計算該行對應的總線信號的發(fā)送間隔。完成所有信號發(fā)送間隔的計算后,清空緩存表并重復以上操作,程序流程如圖3所示。
在軟件設計中,引入了生產(chǎn)者-消費者模型作為程序的主要結(jié)構(gòu),將不同功能的循環(huán)劃分為生產(chǎn)者和消費者角色,并在VI內(nèi)部建立通信隊列和狀態(tài)機[8]。生產(chǎn)者循環(huán)以一定的速率生產(chǎn)數(shù)據(jù)或指令,并通過隊列傳輸出去,而消費者循環(huán)則不斷地從隊列中接收新數(shù)據(jù)或指令,從而完成預定的“消費”操作[9]。通過引入這一結(jié)構(gòu),總線通信接收程序在執(zhí)行接收數(shù)據(jù)、解析數(shù)據(jù)、顯示數(shù)據(jù)以及保存數(shù)據(jù)這多項任務的同時,還能保持對用戶界面的良好響應。LabVIEW支持多線程任務,而生產(chǎn)者-消費者模型利用多線程處理機制,使用隊列作為緩存,將采集到的數(shù)據(jù)或者發(fā)出的指令直接放到隊列中進行傳遞,實現(xiàn)將數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)顯示、數(shù)據(jù)保存和對界面的響應放到不同的循環(huán)中去執(zhí)行的功能[10]。在這樣的結(jié)構(gòu)中,只通過隊列傳輸數(shù)據(jù)或指令,使得各個功能模塊能夠獨立運行,從而避免了多任務情況下各個功能模塊之間的相互干擾以及對主界面響應造成影響。
通過與某研究院航電系統(tǒng)的現(xiàn)場交聯(lián)試驗,本系統(tǒng)能夠按自定義需求正確收發(fā)ARINC 429總線信號,相關(guān)功能和可自定義的性能得到了驗證,為航電系統(tǒng)及相關(guān)設備的開發(fā)和試驗工作提供了一個可靠、實用、可自定義的運行環(huán)境。此外,本系統(tǒng)的開發(fā)基于虛擬儀器技術(shù),采用模塊化的設計思想,為今后根據(jù)現(xiàn)場的實際需要而進行的功能升級和擴展奠定了良好的基礎(chǔ)。
[1]張?zhí)锾?,劉亞?基于PXI總線的多功能ARINC 429通信接口電路設計[J].計算機測量與控制,2009,17(3):534 -548.
[2]宋桂華,趙偉,劉建業(yè).多路ARINC429數(shù)據(jù)傳輸?shù)脑O計與實現(xiàn)[J].微處理機,2009(3):116 -118.
[3]唐波,潘紅兵,趙以順.在LabVIEW環(huán)境下基于ADO技術(shù)和SQL語言的數(shù)據(jù)庫系統(tǒng)實現(xiàn)[J].儀器儀表學報,2007,28(4):227-229.
[4]秘曉元,張彥斌,薛德慶.LabVIEW中利用LabSQL訪問數(shù)據(jù)庫[J].微計算機信息,2004,20(10):53 -54.
[5]豐偉偉,楊世文,南金瑞,等.LabVIEW中TDMS文件和SQL數(shù)據(jù)庫數(shù)據(jù)處理速度的研究[J].儀器儀表與分析監(jiān)測,2011(1):10-12.
[6]武劍,李巴津.基于LabVIEW的普通數(shù)據(jù)采集卡驅(qū)動研究[J].現(xiàn)代電子技術(shù),2009(12):149-151.
[7]袁魏華,韓裕生,張偉偉,等.LabVIEW平臺下調(diào)用DLL實現(xiàn)PC/104數(shù)據(jù)采集[J].嵌入式計算機應用,2008,24(4-2):57-61.
[8]葉楓樺,周新聰,白秀琴,等.基于LabVIEW隊列狀態(tài)機的數(shù)據(jù)采集系統(tǒng)設計[J].現(xiàn)代電子技術(shù),2010(4):204-210.
[9]王曉飛,李巖,劉旺開,等.基于LabVIEW的環(huán)境模擬試驗數(shù)據(jù)采集系統(tǒng)[J].兵工自動化,2009,28(2):76 -78.
[10]阮奇楨.我和LabVIEW[M].北京:北京航空航天大學出版社,2009:200-201.