納杰斯
(昆明船舶設備研究試驗中心 昆明 650051)
?
LabVIEW編程中基于AMC框架的多機通訊實現方法*
納杰斯
(昆明船舶設備研究試驗中心昆明650051)
摘要在一個多臺計算機聯合工作的大型軟件系統中,系統內各計算機之間的通訊(以下簡稱“多機通訊”)是保證系統正常運行的必不可少的一個重要技術環節,多機通訊的代碼質量很大程度上決定了系統的穩定性與魯棒性及系統運行速度。目前大部分系統的多機通訊實現主要是建立在如TCP與UDP等通用網絡通訊協議上的,論文提出了多種在LabVIEW編程中基于AMC框架的多機通訊實現方法,并比較了它們的優缺點。
關鍵詞LabVIEW; AMC框架; 多機通訊
Class NumberTB566
1引言
LabVIEW(Laboratory Virtual Instrument Engineering Work bench)程序開發環境是由美國NI(National Instruments)公司開發的一種圖形化設計語言[1],LabVIEW與C語言等文本編程、過程化程序設計語言最大的區別是[2]:LabVIEW是圖形化、基于數據流的程序設計語言,使得LabVIEW在測量與控制系統的開發中有著得天獨厚的優勢[3]。
AMC(Asynchronous Message Communication Library)是美國NI(National Instruments)公司開發,用于在LabVIEW編程中實現線程通訊、進程通訊及多機通訊的API接口函數庫,該函數庫基于LabVIEW自帶的消息隊列結構[4],使用通用的UDP通訊協議,具有極強的移植性與通用性。
LabVIEW程序設計語言廣泛運用于測控系統軟件開發,在一個擁有多臺計算機聯合工作的大型軟件系統中[5],系統內各計算機之間的通訊(以下簡稱“多機通訊”)是必不可少的一個重要技術環節,多機通訊技術是實現分離的計算機協調工作的重要手段,是連接整個系統的橋梁,這些因素使得多機通訊的代碼質量至關重要。
當前大部分系統的多機通訊主要是建立在TCP與UDP等通用網絡協議上[6],采用基于UDP的AMC框架實現多機通訊是較為主流且先進的程序開發手段。傳統的多機通訊方法大多由通訊循環結構實現,主機發送通訊指令后,通過單獨線程的通訊循環實時監聽從機反饋指令,或判斷為通訊超時[7]。本文以傳統多機通訊方法為基礎,提出了兩種優化的多機通訊實現方法。
2AMC框架的多機通訊的實現方法
2.1AMC框架的網絡通訊機制
AMC基于UDP協議實現網絡中計算機的通訊管理,AMC庫中的Dispatcher函數庫提供了底層的UDP通訊支持,只要在計算中調用、配置Dispatcher函數即可使網絡中的計算機如同本地計算機一樣使用消息隊列通訊。圖1所示為AMC函數庫中用于實現網絡通訊的Dispatcher函數庫。

圖1 AMC中用于通訊的Dispatcher函數庫
2.2傳統的通訊循環結構
多機通訊機制一般是主機發送消息到從機,主機等待從機的反饋指令,如果接受不到反饋指令,則判定為通訊超時。從主機角度來看,因為從機反饋指令的時間不定,為了不錯過從機的反饋指令,主機需要監聽從機的反饋指令,監聽期間不能影響其他軟件功能的正常運行,一般需要一個單獨的循環結構來實時監聽從機的反饋指令。
如圖2所示代碼是一個典型的生產者消費者編程框架,其中紅色框內的代碼既是為了實現多機通訊加入的通訊循環結構(以下簡稱Communication Loop),Communication Loop從程序啟動時便一直存在于內存中,對于程序而言是一個單獨的線程,隨時監聽從機的反饋指令。當主機發出通訊指令后,可從Communication Loop中監聽接收從機的反饋指令并做下一步處理,即實現了多機通訊。
2.3融合的Wait循環結構
在LabVIEW測控軟件設計中,通常是基于一個消息生產者和一個消息消費者的編程框架,為了提高代碼的聚合性,不宜因多機通訊的需求而添加一個獨立的循環線程來處理從機的反饋指令,如圖2所示的代碼結構顯得松散繁復,所以有必要將多機通訊所需的循環結構嵌入到消費者隊列的循環結構中。

圖2 傳統的通訊循環結構實現多機通訊
圖3所示為AMC構架下,一個典型的消息消費者循環中處理各個消息(Message Name)的分支,圖中打勾選中的分支可實現循環結構(以下簡稱Wait分支)。Wait分支的進入條件為:當消息出隊列超時,即隊列中沒有任何Message Name,此時Message Name為空字符串(即是“”),該Message Name會進入Wait分支,默認超時為百毫秒級,消息生產者生產指令的時間間隔通常超過這個時間量級,這便使Wait分支形成了一種不定時的循環結構,程序會在消息生產者任務不繁忙時進入Wait分支。當Message Name為“Wait”時,也可進入Wait分支。
Wait分支的循環結構可實現通訊中的監聽功能,為了能用Wait分支的循環結構監聽從機的反饋指令,所有的從機反饋指令的Message Name都必須是“Wait”,為了區分不同的指令,需要使用附加的消息屬性(Message Attributes)變量。
如圖4所示,箭頭所指框內的vi即為多機通訊的代碼,并標出了用于區別不同反饋指令的“Message Attributes”變量,如圖4中的“即時幫助”欄顯示了“Message Attributes”變量的類型,是一個簇2的元素包含了兩個一維的字符串數組,不同的字符串可表示不同的反饋指令。

圖3 典型AMC消費者循環處理的消息分支

圖4 Wait分支循環結構實現多機通訊
2.4改進的融合循環結構
如圖4所示,可以看出Wait分支循環結構的特殊性,許多需要定時、循環類型的代碼都要在Wait分支內執行,越是復雜的控制流程,Wait分支越是臃腫。同時,為了監聽從機的反饋指令,所有從機的反饋指令Message Name必須為“Wait”,這樣人為的規定顯得代碼邏輯牽強。所以有理由將多機通訊的實現代碼從Wait分支中剝離出來,便于代碼管理與閱讀。
如圖5所示,為了將處理從機反饋指令的代碼從Wait分支中分割出來,單獨添加了一個消息處理分支(以下簡稱Response Analyses分支),并設置該分支為“默認”分支。
當主機發出通訊指令后,如果收到任何反饋指令,此時從機的反饋指令Message Name表示了該通訊指令本身的含義(例如Message Name=“SubMachine1_Sate”),不等于“Wait”,也不等于消費者隊列消息處理表中的任何Message Name,該條消息將進入設置為“默認”的Response Analyses分支,在Response Analyses分支中,根據接收到的Message Name可區分不同的反饋指令并進行下一步處理。同時,從機可以設置反饋消息的Priority屬性為真,此時該條反饋消息將插入消息隊列的頭部優先處理。

圖5 Response Analyses分支實現多機通訊
3各實現方法比較
傳統的多機通訊實現方法將多機通訊所用的代碼模塊化做成單獨的一個循環線程,單獨的循環線程與其他線程互不影響,循環周期穩定,響應速度快,但是單獨的線程也帶來了更多的硬件資源消耗[8]。
融合的Wait循環結構從代碼風格上來說更符合LabVIEW主流測控軟件的一個生產者一個消費者的編程框架,將多機通訊的實現代碼融合到消費者循環中,提高了代碼的聚合性[9],避免了單獨的通訊線程與消費者線程之間的通訊,程序效率更高。但是Wait分支本身的不定時循環可能造成通訊延遲,響應速度慢等問題。
改進的融合循環結構將多機通訊實現代碼從不定時的Wait分支中剝離出來,從機可通過設置Priority屬性將反饋指令優先插入消息隊列頭部優先處理,改善了通訊延遲的弊端,同時減輕了Wait分支中的代碼臃腫程度,同時提高了代碼的可讀性,保持了代碼的聚合性。如表1所示描述了各實現方法的優缺點。

表1 多機通訊各實現方法比較
4結論
多機通訊的代碼質量是保證大型系統穩定運行的前提條件,當前越來越多的測控系統有著大型化、復雜化的趨勢,多機通訊的機制與實現在系統軟件開發中也愈發重要[10]。本文提出的多種多機通訊實現方法各有優缺點,可根據實際工程選擇應用,各實現方法均能在數臺工控機聯合工作的測控系統中穩定運行。
參 考 文 獻
[1] 王鷂芝,屈薔,趙陽.基于LabVIEW的庫房監測系統設計[J].電子測量技術,2015(9):78-82.
[2] 王樹東,何明.LabVIEW在數據采集系統中的應用研究[J].國外電子測量技術,2014(6):103-107.
[3] 李婧,張永祥,石炳寅. 基于LabVIEW遠程校準系統的設計與實現[J].電子測量與儀器學報,2012(S1):41-44.
[4] 馮國彥,石林鎖,岳增平. 基于LabVIEW的一種新型過程控制方法及實現[J].電子測量與儀器學報,2007(4)68-72.
[5] 元云飛,張麗芳,楊鳳龍. Vb與LabVIEW混合編程的實現[J].儀器儀表標準化與計量,2006(4):16-20.
[6] 王樹東,何明. 基于LabVIEW高速采集系統方法的研究[J].電子測量技術,2014(7):84-88.
[7] 王戈. 程序設計語言統一性研究及其在UVPL實現中的應用[D].開封:河南大學,2009.
[8] 劉龍啟;李銀. 基于LabVIEW的以太網數據監聽與通信[J].國外電子測量技術,2012(7):92-96.
[9] 鄭杰. 基于虛擬儀器的繼電器性能測試系統[D].天津:河北工業大學,2007.
[10] 韓穎. 集群系統中組通信優化方法的研究[D].大連:遼寧師范大學,2010.
收稿日期:2016年1月15日,修回日期:2016年2月21日
作者簡介:納杰斯,男,碩士,助理工程師,研究方向:水聲信號處理、Labview程序設計。
中圖分類號TB566
DOI:10.3969/j.issn.1672-9730.2016.07.018
Multi Computer Communication in LabVIEW Based on AMC Frame
NA Jiesi
(Kunming Shipborne Equipment Research and Test Center, Kunming650051)
AbstractIn a large saftware system which many computers working together, the communication between computers within the system (hereinafter referred to as the “multi computer communication”) is essential to ensure the normal operation of the system, the code quality of multi computer communication largely determines the stability and robustness of the system and system running speed. Most multi computer communication of the system is mainly based on general network such as TCP and UDP communication protocol. A variety of in LabVIEW programming is put for ward based on AMC framework of multi computer communication realization method, and the advantages and disadvantages of them are compared.
Key WordsLabVIEW, AMC frame, multi computer communication