姚旭棟 何黎明 王 林
(上海交通大學電子信息與電氣工程學院,上海 200240)
在某研究院航電實驗室針對某型號支線飛機的開發與試驗過程中,現有ARINC 429總線通信設備由于開放性差以及可擴展性不足等因素,已不能滿足實驗室在開發和試驗過程中對ARINC 429總線通信仿真環境的要求。為了提供一個可靠、實用、可自定義的運行環境,本文設計了基于虛擬儀器的ARINC 429總線仿真系統。該系統可實現上電初始化、總線數據存儲以及自定義增減總線信號、編輯發送數據和解析接收數據等功能,能夠滿足航電系統當前開發與試驗工作中對ARINC 429總線通信仿真環境的需求,并可根據需要,方便地進行系統功能的升級和擴展。
ARINC 429是美國航空無線電公司所制定的航空數字總線傳輸標準,定義了航空電子設備和系統之間相互通信的規范。ARINC 429總線信號使用雙絞屏蔽線傳輸,傳輸速率可分為高速100 kbit/s和低速12.5 kbit/s,每個總線發送端最多可連接20個接收端[1]??偩€數據通信的每個字都由32位數據組成,其中1~8位包含了標號信息(label),9~10位提供了源終端識別信息(source/destination identifier,SDI),11 ~29 位包含數據(data),30 ~31位組成符號狀態矩陣(symbolic state matrix,SSM),最高位(32 位)為奇偶校驗位(parity)[2]。
ARINC 429總線仿真系統基于虛擬儀器技術,硬件采用美國國家儀器公司(NI)的工業化總線PXI平臺以及AIM公司的ACX429 PXI通信模塊。ACX429 PXI通信模塊具有8路通道,通過編程可對每路通道的收發狀態以及傳輸速率進行配置,傳輸速率可在高速100 kbit/s和低速12.5 kbit/s之間進行切換。軟件設計基于LabVIEW,搭建了系統的框架和硬件的控制程序,并借助LabVIEW圖形化的開發環境,創建了具有良好人機交互性的系統界面。
借助上述硬件和軟件平臺,自定義ARINC 429總線仿真系統可實現多通道自定義信號的批量發送和接收,支持 BNR(binary)、BCD(binary-coded-decimal)和DISC(discrete)三種數據類型的總線信號,并通過創建數據庫,實現總線信號的初始化和自定義配置以及數據和狀態的自定義保存等功能。
自定義總線數據的發送模塊可按需求實現對總線信號的配置,能設置信號的名稱、數據類型、發送間隔等所有相關信息,并自動生成32位數據,在指定的發送間隔和發送通道下進行總線信號的發送。
實現總線信號發送功能的LabVIEW軟件結構主要分為數據庫、總線數據操作程序、全局變量和ACX429驅動程序四部分,其結構框圖如圖1所示。

圖1 總線信號發送程序結構框圖Fig.1 Block diagram of bus signal transmitting program
數據庫基于Microsoft Access數據庫管理系統,通過第三方開發的工具包LabSQL對數據庫進行操作。LabSQL利用Microsoft ADO和SQL語言訪問數據庫,并對復雜的底層 ADO和SQL操作進行了封裝[3-4]。相比于LabVIEW中如TDMS等其他形式的數據存儲方式,使用數據庫連接LabVIEW,盡管存取速度相對較低,但能夠有效地支持一些對數據結構要求嚴格的場合[5]。數據庫中保存了所有總線信號的配置信息以及發送數據,供總線數據操作程序調用。
總線數據操作程序主要由以下四部分構成。
①總線信號配置程序,實現新增、刪除、編輯任意總線信號等功能,每條信號都包括信號名稱、Label、數據類型、發送通道等信息,并實時保存至數據庫。
②初始化程序,在程序運行初始,讀取數據庫中全部總線信號的配置信息并賦給全局變量,最后,根據全局變量,生成初始狀態下的32位數據。
③發送狀態配置程序,雙擊信號列表中的信號名稱,可編輯總線信號的發送數據和發送狀態,并將編輯結果實時傳遞給全局變量,生成待發送的32位數據。
④發送狀態管理程序,可以將全局變量中所有信號的發送數據以及是否被選定發送的信息保存至數據庫,也可以從數據庫將這些信息載入到全局變量。
LabVIEW全局變量由配置信息、發送數據、發送通道、發送間隔和32位數據這五種數據構成。配置信息包含了每條總線信號除發送數據外的所有信息,發送間隔和發送通道從每條信號的配置信息中提取。一旦全局變量從總線數據操作程序獲得某信號配置信息或發送數據的更新,系統將實時計算該信號的32位數據,以確保硬件驅動程序能隨時調用到最新的信息。
ACX429板卡的驅動程序模塊通過LabVIEW的CLN節點調用相關動態鏈接庫實現,這種方法使得LabVIEW在能夠支持NI公司數據采集卡的情況下,還能夠直接使用第三方的數據采集卡,從而大大提高了開發效率[6-7]。
當開始發送總線信號后,LabVIEW程序首先對發送通道的傳輸速率、緩存空間等參數進行配置。系統中,將參數b_speed置為1,則通道的傳輸速率設定為高速,即100 kbit/s;將參數b_speed置為0,則通道的傳輸速率設定為低速,即12.5 kbit/s。然后,調用LabVIEW全局變量中每個總線信號的發送間隔以及32位數據,為每路發送通道創建一張緩存表,保存在緩存空間。最后,根據緩存空間內的表格進行總線信號的發送。
ACX429驅動程序的初始化程序為每個信號分配20個字的緩存空間,因此,緩存表的大小為信號數N×20,格式如圖2所示。系統中,總線信號的發送間隔共有 50 ms、100 ms、200 ms、500 ms 和 1000 ms 五種,根據每個信號不同的發送間隔,將該信號的發送數據按照圖2中數據“D”所示的位置和間隔,寫入到緩存表中的相應行和列。ACX429驅動程序在初始化后讀取各通道的緩存表,每隔50 ms依次發送緩存表中的一列數據,并在收到停止發送指令前循環發送緩存表中的數據,從而每秒都能將整張緩存表的數據發送一遍。因此,按圖2所示的格式,根據信號的發送間隔,將所有總線信號的32位數據寫到緩存空間中去,就能夠使總線信號在指定的發送間隔下進行發送。

圖2 總線通信緩存表示意圖Fig.2 Schematic of the bus communication buffering
自定義總線數據的接收模塊可實現接收和顯示在指定通道內傳輸的總線信號的功能。除了每條總線信號原始的32位數據外,還能顯示信號的解析數據、配置信息以及在相應通道內的發送間隔。
對于需要接收的總線信號,與發送信號一樣,必須事先在數據庫中預存基本信息,如信號名稱、數據類型、數據格式等。在接收總線信號時,根據32位數據中低8位的Label信息,查找它在數據庫中對應的預存信息,并根據數據類型、數據格式來解析該總線信號的發送數據,實現了實時接收、顯示、解析總線數據的功能,且可對接收到的總線信號按自定義配置,保存至數據庫或者導出至Excel文件中。
ARINC 429總線信號的Label號共有256種,每個Label號對應四種SDI號。因此,通過LabVIEW在緩存空間中創建一張256×4×20的表格,可以使接收到的總線信號按Label號和SDI號存放在唯一指定的位置,并為每個總線信號分配20個字的緩存空間。
在完成硬件的初始化配置以及緩存表的創建后,程序每隔50 ms接收一次通道上正在發送的總線數據,并更新至緩存表。在接收20次數據即1 s后,程序將根據緩存空間每一行的非空數據的數量,計算該行對應的總線信號的發送間隔。完成所有信號發送間隔的計算后,清空緩存表并重復以上操作,程序流程如圖3所示。
在軟件設計中,引入了生產者-消費者模型作為程序的主要結構,將不同功能的循環劃分為生產者和消費者角色,并在VI內部建立通信隊列和狀態機[8]。生產者循環以一定的速率生產數據或指令,并通過隊列傳輸出去,而消費者循環則不斷地從隊列中接收新數據或指令,從而完成預定的“消費”操作[9]。通過引入這一結構,總線通信接收程序在執行接收數據、解析數據、顯示數據以及保存數據這多項任務的同時,還能保持對用戶界面的良好響應。LabVIEW支持多線程任務,而生產者-消費者模型利用多線程處理機制,使用隊列作為緩存,將采集到的數據或者發出的指令直接放到隊列中進行傳遞,實現將數據采集、數據處理、數據顯示、數據保存和對界面的響應放到不同的循環中去執行的功能[10]。在這樣的結構中,只通過隊列傳輸數據或指令,使得各個功能模塊能夠獨立運行,從而避免了多任務情況下各個功能模塊之間的相互干擾以及對主界面響應造成影響。
通過與某研究院航電系統的現場交聯試驗,本系統能夠按自定義需求正確收發ARINC 429總線信號,相關功能和可自定義的性能得到了驗證,為航電系統及相關設備的開發和試驗工作提供了一個可靠、實用、可自定義的運行環境。此外,本系統的開發基于虛擬儀器技術,采用模塊化的設計思想,為今后根據現場的實際需要而進行的功能升級和擴展奠定了良好的基礎。
[1]張田甜,劉亞斌.基于PXI總線的多功能ARINC 429通信接口電路設計[J].計算機測量與控制,2009,17(3):534 -548.
[2]宋桂華,趙偉,劉建業.多路ARINC429數據傳輸的設計與實現[J].微處理機,2009(3):116 -118.
[3]唐波,潘紅兵,趙以順.在LabVIEW環境下基于ADO技術和SQL語言的數據庫系統實現[J].儀器儀表學報,2007,28(4):227-229.
[4]秘曉元,張彥斌,薛德慶.LabVIEW中利用LabSQL訪問數據庫[J].微計算機信息,2004,20(10):53 -54.
[5]豐偉偉,楊世文,南金瑞,等.LabVIEW中TDMS文件和SQL數據庫數據處理速度的研究[J].儀器儀表與分析監測,2011(1):10-12.
[6]武劍,李巴津.基于LabVIEW的普通數據采集卡驅動研究[J].現代電子技術,2009(12):149-151.
[7]袁魏華,韓裕生,張偉偉,等.LabVIEW平臺下調用DLL實現PC/104數據采集[J].嵌入式計算機應用,2008,24(4-2):57-61.
[8]葉楓樺,周新聰,白秀琴,等.基于LabVIEW隊列狀態機的數據采集系統設計[J].現代電子技術,2010(4):204-210.
[9]王曉飛,李巖,劉旺開,等.基于LabVIEW的環境模擬試驗數據采集系統[J].兵工自動化,2009,28(2):76 -78.
[10]阮奇楨.我和LabVIEW[M].北京:北京航空航天大學出版社,2009:200-201.