韓新風
(安徽科技學院電氣與電子工程學院,安徽鳳陽 233100)
LabVIEW是美國NI公司推出的虛擬儀器開發平臺[1-2],采用圖形化的編程語言——G語言,產生的程序是框圖的形式,易學易用。與傳統的編程語言相比,G語言能夠節省程序的開發時間,具有高運行速度和極高的效率。可以使開發者不必去記憶令人眼花繚亂的文本程序代碼,而能夠集中精力去解決具體的應用問題。
筆者設計了一個基于ZigBee無線網絡的自動灌溉控制系統,采用ZigBee CC2530單片機完成自動灌溉控制系統的土壤濕度信息的采集和灌溉水泵的控制,相關信息通過協調器經串口發送至上位PC機,系統結構圖如圖1所示。以虛擬儀器LabVIEW為開發平臺[3-4](2012版),完成上位PC機的程序設計,主要功能是完成PC機實時讀取協調器采集的土壤濕度信息和水泵狀態,并實時顯示出相關數值和狀態。

圖1 基于ZigBee無線網絡的自動灌溉控制系統結構圖
由于PC機系統采用串口與下位機(即自動灌溉系統的協調器)發送命令或接收數據,因此要完成該程序還需要安裝NI MAX來管理PC機串口硬件設備。
基于LabVIEW的程序設計可分為兩部分,第一部分為程序框圖設計,第二部分是前面板設計[4]。在進行框圖設計之前先進行系統流程圖設計,確定系統的總體設計方案與流程,以指導程序框圖的設計。

圖2 程序設計流程圖
系統的流程如圖2所示。系統開始運行,首先對串口進行初始化,然后通過串口發送命令——要求協調器上傳1號終端節點的測量數據,延時500 ms后(由于串口數據傳輸速率低,故需要延時)讀取串口數據(此時串口的數據為1號終端節點的數據,如果未經過延時直接讀取串口,則有可能讀取的將是串口緩沖器中原有的數據),將數據在前面板上顯示出來(為保證能夠準確無誤的顯示數據,在顯示前要先進行判斷,如果數據正確則顯示,不正確則丟棄,等待下一次的“讀取——判斷——顯示”);然后,寫串口命令讀取2號終端節點的數據,延時,讀串口。以此類推,讀取所有終端節點的數據。然后進行下一次循環,讀取并實時顯示各端點數據。
該系統的數據來源自對PC機串口數據的讀取,因此在前面板設計中要添加1個串口資源檢測控件(查找控件的路徑為:控件/新式/VISA資源名稱),程序運行時,單擊箭頭,即可選取串口號。為了執行關閉程序命令,需要添加1個停止按鈕控件(查找控件的路徑為:控件/新式/布爾/停止按鈕),改名為STOP。
測控系統中有4個終端節點,故采用4個“波形圖表”控件[5](查找控件的路徑:控件/新式/圖形/波形圖表),用圖表形式直觀顯示土壤濕度值隨著時間的變化;采用4個“儀器顯示”控件(查找控件的路徑:控件/新式/儀表),用指針儀表形式直觀顯示當前的土壤濕度測量值;4個“數值顯示”控件(查找控件的路徑:控件/新式/數值顯示控件),用數值形式顯示當前土壤濕度測量值;4個“布爾顯示”控件(查找控件的路徑:控件/新式/布爾/圓形指示燈)顯示對應測量端點的水泵開關狀態。
LabVIEW中串口的初始化如圖3所示。采用VISA串口通信函數中的配置函數,配置函數的查找路徑:函數/編程/儀器I/O /串口/VISA配置串口,函數名稱為:VISA Configure Serial Port。該函數需要設置的參數為:波特率、數據位、停止位。其中,波特率設置為9600(與下位機約定好的),數據位為8位,停止位設為“10”表示停止位為1位。

圖3 串口配置圖
程序框圖又稱為后面板,實際上就是編寫框圖形式的源程序[6]。
由于系統需要實時的顯示測控系統的測量結果,因此采用循環結構。即啟動程序后,會一直循環運行下去。
在循環結構中添加層疊式順序結構,將其設置為2幀(序號0~1)(圖4),其中第0幀用于延時500 ms,如圖4(a)所示(圖左側部分為串口配置,詳見圖3);第1幀的主要作用是用于發送讀取命令,讀取串口數據并顯示。

圖4 層疊式順序結構的第0幀
為了完成第1幀“用于發送讀取命令,讀取串口數據并顯示”的目的,故在該幀中再次添加層疊式順序結構(記為第2個層疊式結構),將其設置為12幀。其中該層疊式順序結構的第0幀用于發送“讀取1號端點的指令”,如圖4(b)所示(圖左側部分為串口配置,詳見圖3);第1幀用于延時500 ms(由于串口數據傳輸速率低,如果不設置延時,將會出現讀取數據錯誤)。第2個層疊式結構的第1幀同圖4(a),不再贅述。第2幀用于讀取串口的數據(即讀取1號端點的數據)并顯示,如圖5所示。后面的3至11幀完成對2、3、4號端點進行發送讀取命令,延時,讀取數據。設計方法與0~2幀相同,不再贅述。

圖5 第2個層疊式結構的第2幀-條件結構的第1幀
根據與下位機的通信協議要求,“讀取1號端點的指令”格式:3A 00 02 14 01 23,其中第5個字節的“01”為端點號,如果其替換為“02”,得到指令:3A 00 02 14 02 23,即為“讀取2號端點的指令”。因此在程序設計時采用了LabVIEW中“數組插入”(函數/編程/數組/數組插入)的方式,在數組“3A 00 02 14 23”中的第4個位置插入端點號“01”,得到“3A 00 02 14 01 23”。將該數組通過VISA寫入函數將以上指令寫入串口,如圖4(b)所示。采用相同方法,可以獲得讀取2號端點指令或讀取其他端點的指令。
接收串口的數據并顯示的程序設計如圖5所示。下位機上傳來的數據,共4個字節,分別為:端點號,土壤濕度測量值,水泵開關狀態,當前濕度閾值。通過labVIEW軟件的“VISA讀取”函數,從串口讀取字符串,經過“字符串至字節數組轉換”函數,將串口讀來的數據變換為數組。將該數組進行解析:其中數組的第0個元素為端點號,第1個元素為土壤濕度測量值,第2個元素為水泵的開關狀態,第3個元素為預設的閾值。因此,通過LabVIEW中“索引數組”(函數/編程/數組/索引數組)的方法,從數組中分別獲得4個元素的數值,并與對應的顯示器件相連接。
為了保證讀取到的數據與實際需要顯示的數據一致(對比前后端點號,一致即可),利用LabVIEW的條件結構,以端點號作為判斷條件,例如,要顯示1號端點的數據,利用數組的第0個元素(即端點號)作為判斷條件,若第0個元素為1,則滿足條件,將數組的第1個元素(即1號端點的土壤濕度測量值)顯示,如圖5所示;若不滿足條件(即第0個元素不為1,也就是數據并非來自1號端點),則丟棄數據,不顯示,具體設計圖與圖5的區別在于條件結構框中為空白(默認0,不執行任何操作),然后等待下一次循環中“讀取—判斷—顯示”。
需要說明的是,以上討論的數組第2個元素為水泵的開關狀態,但是該值為十六進制數,與該值連接的顯示控件卻是布爾型的,因此在連接至水泵開關狀態顯示控件之前,需要將該數據經“數值至布爾數組轉換”并取出第0個元素,即為水泵的狀態。
在實驗前,查找到串口端點號為COM17(也可能為其他),然后在圖6右下角“VISA資源名稱”的下拉列表中選擇COM17,然后啟動程序運行。實驗測量結果如圖6所示。本系統有4個測量節點,在實際應用中,可以根據實際情況增加測量節點數量。經過實時測量對比發現,自動灌溉控制系統的相關數據都可以完整地通過上位機的程序界面顯示出來。

圖6 實驗測量結果
自動灌溉控制系統主要由下位機測量子系統和上位機監測顯示子系統兩部分組成,二者通過PC機的串口進行通訊。上位機監測顯示子系統的實現方法有多種,筆者選用了基于虛擬儀器技術的開發軟件——LabVIEW,設計上位機監測顯示子系統。由于LabVIEW軟件采用圖形化的編程語言,使得設計過程簡單高效、操作方便,有效節省了開發的時間。該系統將來自PC機串口的數據進行采集,并通過圖表等多種形式直觀形象地顯示出來。實驗結果表明,系統的設計方案切實可行,能夠方便有效地對自動灌溉控制系統進行實時監測。