4.2.3共享變量方法 共享變量是LabVIEW為簡化網(wǎng)絡編程邁出的又一大步。通過共享變量,用戶無需編程就可以在不同計算機之間方便的實現(xiàn)數(shù)據(jù)的共享。用戶無需了解任何的底層復雜的網(wǎng)絡通信,就能輕松地實現(xiàn)數(shù)據(jù)交換。用戶建立和使用共享變量就如同操作全局變量一樣方便。 通過共享變量,用戶可以在不同的計算機上的VI之間、本地不同或同一個程序框圖的不同循環(huán)之間交換數(shù)據(jù)。共享變量的使用與全局變量類似,用戶在程序框圖中不僅僅看到的是一個變量而已,而變量具體與網(wǎng)絡中哪臺計算機哪個變量連接,以及各種其他屬性等都已經(jīng)事先在共享變量的屬性中設定了。用戶不用了解網(wǎng)絡協(xié)議,不用任何編程就能輕松實現(xiàn)網(wǎng)絡數(shù)據(jù)交換。共享變量有三種類型:Single-Process、Time-Triggered和Network-Published. 舉例來說明,在計算機A和B上都安裝LabVIEW,將計算機A作為服務器,并創(chuàng)建一個共享變量命名為SVServer_Variable,由計算機A上的一個VI向該共享變量寫入數(shù)據(jù)。將計算機B作為客戶端,在計算機上創(chuàng)建一個共享變量名為SVClient_Variable,該共享變量的數(shù)據(jù)源為計算機A上的SVServer_Variable.同時在計算機B上的一個VI中不斷地讀取SVServer_Variable,由此不斷獲得計算機A上SVServer_Variable的值。 共享變量方法具體實現(xiàn)方式見下圖4.10所示。 4.2.4遠程訪問技術 用戶在很多情況下希望直接將本地的VI程序面板“搬”到遠程計算機上,在遠程計算機上進行預覽或操作。而LabVIEW提供的Web服務器技術能滿足用戶的這個要求,用戶可以不需要任何編程就能在遠程計算機上通過網(wǎng)頁或LabVIEW連接本地VI面板,本地VI前面板便會“原封不動”地呈現(xiàn)在遠程計算機的屏幕上。 在LabVIEW中,實現(xiàn)遠程訪問的方式有兩種:遠程面板控制和客戶端瀏覽器訪問,且在實施這兩種訪問之前都需要對服務器進行配置。LabVIEW中實現(xiàn)遠程面板的連接僅需要兩個非常簡單的步驟,利用瀏覽器訪問通信實例如下: (1)配置LabVIEW Web服務器步驟如下: ①打開本地VI前面板配置服務器包括3部分:服務器目錄與日志配置、客戶端可見VI配置和客戶端訪問權限配置。在LabVIEW中選擇“工具→選項”即可打開參數(shù)配置框,左側(cè)分別可見“Web服務器:配置”、“Web服務器:瀏覽器訪問”。其中“Web服務器:配置”是用來配置服務器目錄和日志屬性、“Web服務器:可見VI”用來配置服務器根目錄下可見的VI程序,也即對客戶端可操作的VI程序。“Web服務器:瀏覽器訪問”用來設置客戶端的訪問權限。完成服務器配置以后,即可以選擇遠程控制面板或瀏覽器方式訪問服務器、對服務器進行交互遠程操作等。 ②選擇主菜單的工具/選項/Web服務器:配置選項,選擇啟動Web服務器,其他值可以保持默認。如果80端口被占用,則需要制定一個空閑端口。配置界面如下: ③選擇Web服務器:可見VI頁面,在這里配置允許被遠程連接的VI.默認*標示任何VI都可以被連接。 ④選擇Web服務器:瀏覽訪問頁面,在這里可以配置允許連接本機的遠程主機。 默認*標示任何主機都允許連接本機。 ⑤單擊OK按鈕,如果沒有彈出任何警告,則表明Web服務器成功啟動。此時已經(jīng)能夠在遠程計算機上通過LabVIEW Run Time引擎連接當前內(nèi)存中打開的任何VI的前面板了,但是若需要通過網(wǎng)頁瀏覽VI前面板,則還需要進一步配置。 ⑥通過客戶端瀏覽器訪問時,首先需要在服務器端發(fā)布網(wǎng)頁,然后才能從客戶端訪問,以實現(xiàn)遠程通信。選擇工具/ Web發(fā)布工具選項,打開如圖4.12所示對話框。 ⑦在該對話框中的VI名稱中選擇希望在網(wǎng)頁中進行瀏覽的VI,這些VI必須是已經(jīng)打開了的。查看模式用3種:內(nèi)嵌表示VI前面板將嵌入在網(wǎng)頁中,用戶不僅可以瀏覽前面板,還可以控制前面板;快照表示僅把當前VI前面板的截圖發(fā)布在網(wǎng)頁中;顯示器與內(nèi)嵌一樣,但是它會不斷地按指定時間間隔更新截圖。單擊下一步。 ⑧在該對話框中配置網(wǎng)頁標題、頭注和尾注。單擊下一步,進入第⑨步。 ⑨在該對話框中配置網(wǎng)址。URL即遠程機器瀏覽時的網(wǎng)頁地址。選擇保存至磁盤,將會彈出文檔URL對話框,單擊鏈接按鈕就可以在本地網(wǎng)頁瀏覽器中瀏覽該網(wǎng)頁了。 至此便完成了服務器端得配置。 (2)在客戶端通過網(wǎng)頁或LabVIEW Run-Time引擎連接遠程面板。 ①通過LabVIEW Run-Time引擎連接遠程VI面板客戶端若需要瀏覽遠程VI面板,必須安裝于服務器端相同版本的LabVIEW Run-Time引擎。 具體實現(xiàn):新建一個VI,選擇操作/連接到遠程面板選項,在彈出的相應的對話框中輸入服務器的地址、端口和VI名稱(只能是服務器端已經(jīng)打開了的VI);選擇是否控制;單擊Connect按鈕。即可彈出遠程服務器的端得VI前面板。右擊客戶端VI前面板,選擇控制VI選項便可以得到VI的控制權,需要釋放控制權時,右擊前面板,選擇遠程客戶面板/釋放VI控制權選項即可。 ②通過網(wǎng)頁連接遠程VI面板 通過網(wǎng)頁瀏覽器連接VI面板更加簡單,直接在網(wǎng)址欄中輸入配置時配置的URL地址即可,通過網(wǎng)頁連接也存在獲得控制權限的問題,獲得權限與釋放權限的方法同上。 在客戶端通過網(wǎng)頁瀏覽器訪問服務器訪問的頁面。這樣通過Web頁面的發(fā)布就可實現(xiàn)網(wǎng)絡的通信,且用戶可與發(fā)布的前面板進行交互式操作,使用戶可以通過Internet操作儀器設備。 從以上各圖可以看出,利用以上四種通信方式都可以把服務器端產(chǎn)生的正弦信號數(shù)據(jù),通過網(wǎng)絡通信成功地送至客戶機進行顯示。如果要實現(xiàn)界面的互操作,需采用遠程訪問方式,但需要注意的是使用此種方式進行網(wǎng)絡通信時,產(chǎn)生的結(jié)果數(shù)據(jù)是保存在服務器端而不是客戶端,如果客戶端需要得到數(shù)據(jù),還需使用網(wǎng)絡通信協(xié)議、DataSocket或共享變量傳送數(shù)據(jù)。利用網(wǎng)絡通信協(xié)議把數(shù)據(jù)從一個網(wǎng)絡或Internet計算機傳輸?shù)搅硗庖慌_計算機或網(wǎng)絡上是實現(xiàn)遠程測控系統(tǒng)通信的最基本方式。但基于DataSocket技術的網(wǎng)絡通信可以達到很高的數(shù)據(jù)傳輸效率,實時性能相當好,同時安全性能也可達到要求,這是網(wǎng)絡協(xié)議通信所不具有的,但缺點是由于訪問權限等的限制,客戶端的控制功能太弱,需待改進。同時通過共享變量實現(xiàn)網(wǎng)絡數(shù)據(jù)的傳輸也是一種值得提倡的方法,它傳輸速率高,低延遲還可以通過DataSocket函數(shù)讀寫共享變量,應用靈活。 鑒于以上幾種方法的比較,本文選用的是最后一種方式,這種方式省去了上位機的程序設計,在加上該系統(tǒng)屬于適用節(jié)段,遠程用戶不必操作和管理現(xiàn)場,只是查看現(xiàn)場數(shù)據(jù)采集運行情況。 4.3 LabVIEW連接遠程數(shù)據(jù)庫的技術研究 在虛擬儀器測控系統(tǒng)中,LabVIEW與遠程數(shù)據(jù)庫的連接方法有如下幾種: 4.3.1利用ADO技術訪問數(shù)據(jù)庫 本方法利用LabVIEW的ActiveX功能,調(diào)用Microsoft ADO對象,利用SQL語言實現(xiàn)數(shù)據(jù)庫的訪問。 ADO(ActiveX Data Objects)是Microsoft為OLE DB設計的應用層接口,它為一致的數(shù)據(jù)訪問接口提供了良好的擴展性而不局限于單一的數(shù)據(jù)源。ADO接口編程模型中包括連接(Connection)、命令(Command)、參數(shù)(Parameter)、記錄集(Recordset)、字段(Field)、錯誤(Error)、屬性(Property)、集合(Collection)、事件(Event)等元素。其中Connection、Command、Recordset是三個主體對象,Parameters、Fields、Errors、Properties是四個集合對象。 ADO的一般操作方式為:①連接到數(shù)據(jù)源;②指定訪問數(shù)據(jù)源的命令;③執(zhí)行命令;④將命令執(zhí)行后產(chǎn)生的結(jié)果保存在緩存中;⑤更新數(shù)據(jù)庫。ADO的主要優(yōu)點是易于使用、高速度、低內(nèi)存支出和占用磁盤空間較少。 LabVIEW中對ADO的調(diào)用方法如下。 ADO對象在LabVIEW中是以ActiveX對象的形式提供的。LabVIEW自4.1版本就引入了支持ActiveX自動控制的功能模塊,支持客戶和服務器雙方,即雖然程序是在雙方各自獨立存在,但它們的信息是共享的。這種信息共享是通過客戶端使用由服務器端發(fā)布的ActiveX控件來實現(xiàn)的。 圖4.13展示的是LabVIEW中使用ActiveX控件的程序流程。ActiveX對象的打開和關閉是通過打開自動化節(jié)點(Automation Open)和關閉自動化節(jié)點(Close Reference)來實現(xiàn)的,屬性的設置和獲取則通過屬性節(jié)點(Property Node)進行,而調(diào)用節(jié)點(Invoke Node)用于對象方法的調(diào)用。其中關鍵的是第二步,只有充分的利用“屬性”和“方法”的設置才能成功地實現(xiàn)對數(shù)據(jù)庫的訪問。 ①建立ADO對象 在前面板控件模板的Refnum子模板中選擇Automation Refnum項,把它拖放到前面板上,在其右鍵菜單中選擇Select ActiveX Class>>Broswer…,彈出Select ActiveX Object對話框,在類型庫Type Library下拉列表中選擇Microsoft ActiveX Data Objects 2.7 Library Version 2.7,在下面的對象Objects列表欄中出現(xiàn)這個庫對LabVIEW可用的對象,選中Connection對象,點擊OK按鈕即可。同樣的方法建立Command、Recordset對象。 ②連接到數(shù)據(jù)源 在程序框圖功能模板中選擇CommuNIcation>>ActiveX子模板,選其中Automation Open與ADODB._Connection相連即可打開Connection對象。接著從ActiveX子模板中選擇Invoke Node并與Automation Open相連,在其上單擊右鍵選擇Methods >>Open,即出現(xiàn)圖4.13中所示的節(jié)點。其中“ConnectionSring”是連接到數(shù)據(jù)源的字符串,“UserID”和“PassWord”是連接到數(shù)據(jù)源的用戶名密碼,正確設置這些參數(shù)后便可連接到數(shù)據(jù)源。 ③生成SQL命令、執(zhí)行命令 與上一步相同,用Invoke Node調(diào)用Connection對象的Execute方法執(zhí)行所要的操作。Execute方法所必需的參數(shù)為CommandText,這里為所要執(zhí)行的SQL語句。例如可以使用Create命令創(chuàng)建表,用Drop命令刪除表,用Insert命令向表中插入數(shù)據(jù),用Select命令進行查詢并返回操作結(jié)果等。本例使用Create命令創(chuàng)建了一個名為Staff的表,包括編號、姓名和年齡三個字段,其中id字段為主鍵,自動編號。對數(shù)據(jù)表的刪除和添加數(shù)據(jù)的操作過程與建表過程類似。如果要對執(zhí)行后的記錄進行顯示或讀取字段值則需要建立Recordset對象,并與Execute相連。 ④關閉連接 對數(shù)據(jù)庫訪問操作完畢后要及時關閉連接對象以釋放內(nèi)存和所用的系統(tǒng)資源。首先使用Connection對象的Close方法關閉數(shù)據(jù)庫連接,然后使用Close Reference關閉ActiveX自動化參數(shù)號,剪標的程序框圖如圖4.14所示。 4.3.2利用LabSQL訪問數(shù)據(jù)庫 通過第三方開發(fā)的免費工具包LabSQL訪問。LabSQL利用Microsoft ADO以及SQL語言來完成數(shù)據(jù)庫訪問,將復雜的底層ADO及SQL操作封裝成一系列的LabSQL VIs,簡單易用。 LabSQL利用Microsoft ADO對象和SQL語言來完成數(shù)據(jù)庫訪問,將復雜的底層ADO及SQL操作封裝成一系列的LabSQL VIs,簡單易用。LabSQL VIs按照功能可以分為四類:Command VIs,Connection VIs,Recordset VIs和Top Level VIs. Command VIs的功能是完成一系列的基本ADO操作,例如,創(chuàng)建或刪除一個Command,對數(shù)據(jù)庫的某一個參數(shù)進行讀或?qū)懙取?br /> Connection VIs的功能是管理LabVIEW與數(shù)據(jù)庫之間的連接。 Recordset VIs用于對數(shù)據(jù)庫中的記錄進行各種操作,例如,創(chuàng)建或刪除一條記錄,對記錄中的某一個條目進行讀或?qū)懙取?br /> Top Level VIs屬于頂層的LabSQL應用,對前三類LabSQL VIs某些功能的封裝,例如,SQL Execute.vi可用于直接執(zhí)行命令。 4.3.3利用LabVIEW SQL Toolkit訪問數(shù)據(jù)庫 利用NI公司的附加工具包中的數(shù)據(jù)庫接口工具包LabVIEW SQL Toolkit進行數(shù)據(jù)庫訪問。該工具包集成了一系列的高級功能模塊,這些模塊封裝了大多數(shù)的數(shù)據(jù)庫操作和一些高級的數(shù)據(jù)庫訪問功能。它的優(yōu)點是易于理解,操作簡單,用戶可以不學習SQL語法。缺點是需要另外購買且價格昂貴,無疑會增加系統(tǒng)成本。 LabVIEW SQL Toolkit (又被稱作為LabVIEW Database Connectivity Toolset)是用于數(shù)據(jù)庫訪問的附加工具包,它集成了一系列的高級功能模塊,這些模塊封裝了大多數(shù)的數(shù)據(jù)庫操作和一些高級的數(shù)據(jù)庫訪問功能。其主要的功能如下: (1)支持ADO所支持的所有的數(shù)據(jù)庫引擎; (2)支持所有與ODBC或OLE DB兼容的數(shù)據(jù)庫驅(qū)動程序; (3)具有高度的可移植性,在任何情況下,用戶通過改變DB Tools Open Connection VI的輸入?yún)?shù)Connection String就可以更換數(shù)據(jù)庫; (4)可以將數(shù)據(jù)庫中Column Values的數(shù)據(jù)類型轉(zhuǎn)換為標準LabVIEW Database Connectivity Toolset的數(shù)據(jù)類型,這進一步增強了它的可移植性; (5)與SQL兼容; (6)不使用SQL語句就可以實現(xiàn)數(shù)據(jù)庫記錄的查詢、添加、修改以及刪除等操作; (7)用戶可以完全不需要學習SQL語法。 用戶可以使用LabVIEW SQL Toolkit在LabVIEW中支持ODBC的本地或遠程數(shù)據(jù)庫,例如Microsoft Access,Microsoft SQL Sever,Sybase SQL Server以及Oracle等。 |