曾廣移 鞏宇 王文輝 張先奎 覃丹



摘要:文章介紹了一種用LabVIEW編寫的基于NI RT控制器的水下機器人上位機控制軟件。這套軟件用于實現控制系統的人機交互、數據記錄與顯示、上下位機之間的數據通信以及對水下機器人進行實時控制。軟件采用LabVIEW經典的生產者一消費者模式,通過設置循環的優先級和執行時間,保證軟件在讀取狀態數據的同時,可以實時完成對機器人主體的控制。
關鍵詞:水下機器人;LabVIEW;上位機軟件;實時控制
水電廠檢測水下機器人主要用于靜水條件下檢測水電站大壩壩面(水下部分)、輸水管道、進出水口閘門等水工建筑物和水工設備運行狀況。由于水下環境較為復雜,其上位機控制軟件除了需要完成對水下機器人水下運動的精確控制外,還需要其能在極短的時間內反饋系統狀態信息,這就要求上位機控制軟件能實時快速地向下位機發送控制命令,同時快速獲取下位機的精確測量和反饋數據,同時實現控制信號的精確微調,各種應急狀態的及時處理等[1]。
1 系統架構
本文所述水下機器人上位機控制軟件,通過LabVIEW編寫,在NI RT控制器上實時運行。軟件完成手操盒控制命令讀取,狀態顯示,運動控制,自主返航,故障監測,電源管理,設備控制,報警處理以及安全關機等功能。
水下機器人控制系統的硬件分為水面控制單元(上位機)和水下控制系統(下位機),二者都采用美國國家儀器(National Instruments,NI)的實時控制器,通過光纖以太網相連。上位機控制軟件主要負責人機交互,數據存儲顯示,與外接設備(手操盒)通信,還有發送相關控制命令給下位機。
水面控制單元的控制器采用CompactDAQ系列的控制器。這一系列的控制器可以外接顯示器、鼠標鍵盤,自身帶有RS485串口,可以方便地與手持控制器(手操盒)等設備連接,體積小巧輕便,是一款理想的上位機。上位機接有鼠標鍵盤和顯示器,并通過自身的RS485串口與手操盒連接。手操盒用于控制水下機器人的運動[2]。
2 上位機程序
一個LabVIEW程序(VI)包括前面板和程序框圖。前面板是界面,沒有實際邏輯功能;程序框圖是程序邏輯和函數的組合,但是沒有顯示讀取功能。利用VI的這個特點,將上位機程序分成兩部分:界面程序和主程序。界面程序只是在前面板顯示相關狀態,進行設備的控制,但程序框圖不執行任何邏輯,只是將界面控件的引用傳遞給主程序;主程序的程序框圖執行上位機程序的具體邏輯,但是前面板不具有實際意義的顯示功能,只是接收界面程序的控件引用。主程序實際上是界面程序的子程序。這樣做可以將界面的設計和邏輯程序的設計分開,適合復雜的人機交互程序應用[3]。
2.1 界面程序流程
界面程序的程序框圖由一個順序結構實現(見圖1)。這個順序結構有3個幀:初始化、主程序和關閉。界面程序運行時,首先執行第一幀中的初始化子VI,將系統的各個狀態變量、輸出設為初始狀態。第一幀執行完畢后,進入第二幀。在自檢通過后,將各個控件的引用通過簇傳遞到主程序中,并調用執行主程序。當主程序執行完畢退出后,執行第三幀。第三幀中的關閉程序負責將輸出設為安全狀態,結束程序。
2.2 主程序架構
在主程序中采用程序架構(見圖2)是基于命令的生產者一消費者模式,這種模式利用命令隊列在兩個并行循環之間傳遞命令。其中一個循環發送命令,另外一個循環讀取并執行命令。
在命令發送循環中,有一個事件結構,同外層的while循環結構構成了一個循環事件結構。在這個循環事件結構中,0—4號事件是界面程序傳遞的控件引用引起的事件。5號事件是一個50 ms的超時事件。這個超時事件用于定時讀取串口。這個串口讀取事件循環用于讀取與串口連接的設備的數據,如手操盒等。
在循環事件結構當中,每一個事件的發生,都會向命令隊列中寫入一個命令,然后命令執行循環讀取并執行命令。命令的結構是一個簇,這個簇包括兩個元素:上位機內部命令內容和上位機內部命令數據。上位機內部命令內容是一個枚舉型變量,上位機內部命令數據是一個變體,可以存放任意類型的數據。
命令執行循環中有一個類似于C語言中switch語句的條件結構。讀取命令時,首先通過簇的“按名稱解除捆綁”VI將簇分解,根據上位機內部命令內容確定要執行的分支。在不同的分支中,有不同的上位機內部命令數據的數據類型,通過“變體至數據轉換”VI將變體數據轉換為相應類型的數據,并對數據進行操作。其中,在“control”分支中,將命令發送循環發送的串口數據通過基于網絡的共享變量送到下位機(見圖3)。
在上位機中,除了有兩個主要的工作循環外,還有一個后臺程序,用于讀取、顯示和存儲下位機上傳的各個狀態數據。后臺程序可以不需要人為干預,獨自運行,優先級最低[4]。
3 控制系統通信
水下機器人的控制系統需要上下位機之間進行命令和數據通信,這種通信類型是一種消息型通信。消息型通信發生的概率比較小,通常用于觸發事件(命令通信);同時,消息型通信也適用于發送容量固定的數據,比如狀態數據(數據通信)。所以在本系統中系統通信采用這種類型的通信方式。系統通信是通過基于網絡發布的共享變量(以下簡稱網絡共享變量)完成的。網絡共享變量常用于程序、系統或者硬件之間的數據命令通信。
系統的數據通信比較簡單,優先級也比較低,只是上位機和下位機中各有一個循環用于接收和發送數據。數據采用固定格式,定時發送。命令通信不是定時通信,所以采用基于網絡的命令觸發的方式。可以通過生產者一消費者模式在并行循環中進行命令觸發。基于網絡的命令觸發也是采用一種類似的方法,只不過其中的命令是通過網絡共享變量完成,而不是通過隊列完成。這就是基于網絡的生產者一消費者模式。
基于網絡的生產者一消費者模式與普通的生產者一消費者模式的區別是命令載體是可以在網中傳輸的網絡共享變量。命令的發送者與接收者也不是一個程序中的兩個并行循環,而是來自兩個不同硬件設備的程序。在本系統中,命令的發送者是上位機,命令的執行者是下位機[5]。
4 結語
本文所述水下機器人上位機控制軟件采用中等規模LabVIEW程序當中常用的生產者一消費者模式。這種軟件模式經過實踐檢驗,是一種簡潔、高效的軟件架構模式。在7K下機器人控制系統中,這種方式可以充分利用控制器實時性好的特點,將讀取命令與執行命令分開,并且可以通過設置低優先級的循環來讀取狀態傳感器的數據。經過實際應用的檢驗,證明這種軟件模式可以應用在水下機器人實時控制系統軟件中,在提高傳感器數據讀取速率的同時,可以實時有效地完成對機器人主體的功能控制。
[參考文獻]
[1]鄭發順.遙控水下機器人系統在水庫大壩水下檢查中的應用[J].水利信息化,2014(4):45-49.
[2]李福年,陳慕雄,田維坤.ROV原理及在阿海水電站工程中的應用[J].云南水力發電,2013(3):119-121.
[3]曾廣移,覃丹,鞏宇,等.一種具備ROV/AUV雙工模式的水電站檢測水下機器人研究[J].科技廣場,2017(9):74-78.
[4]軟奇楨.我和LabVIEW:—個NI工程師的十年編程經驗[M].北京:北京航空航天大學出版社,2012.
[5]蔣新松.水下機器人[M].沈陽:遼寧科學技術出版社,2000.