版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LabVIEW8.20程序設(shè)計(jì)從入門到精通樣章試讀: 順序結(jié)構(gòu)、多面板程序設(shè)計(jì)、TCP編程入門篇中 程序結(jié)構(gòu)一章中的內(nèi)容節(jié)選:5.1 順序結(jié)構(gòu)(Sequence Structure)5.1.1 LabVIEW程序的執(zhí)行順序 如果你用傳統(tǒng)的文本程序語(yǔ)言寫過(guò)程序,你一定相當(dāng)然的認(rèn)為程序是按照語(yǔ)句的順序從上到下一條條執(zhí)行的,除非遇到goto語(yǔ)句或是函數(shù)才會(huì)跳到另外一段代碼去執(zhí)行。但是作為一種圖形化開(kāi)發(fā)語(yǔ)言,LabVIEW有它獨(dú)特的方法來(lái)確定它的執(zhí)行順序。首先是根據(jù)數(shù)據(jù)流執(zhí)行,只有當(dāng)節(jié)點(diǎn)的所有輸入點(diǎn)的數(shù)據(jù)都“流到”時(shí),才會(huì)執(zhí)行該節(jié)點(diǎn)。一般來(lái)說(shuō)荻際前湊沾幼蟮接業(yè)姆較頡傲鞫鋇摹繽?/SPAN5.1所示,這
2、段代碼就代表了Result=(5+Rand)2這個(gè)表達(dá)式。 圖5.1 數(shù)據(jù)流式的編程方法 如果你再放一段類似代碼在同一個(gè)Block Diagram里的話,它又是如何執(zhí)行的呢?如圖5.2所示,這兩段代碼并不是按照從左到右或從上到下地順序執(zhí)行的,而是并行獨(dú)立地執(zhí)行的。這是因?yàn)長(zhǎng)abVIEW實(shí)現(xiàn)了自動(dòng)多線程。它使代碼的執(zhí)行效率大大提高了。如果用文本程序語(yǔ)言,實(shí)現(xiàn)多線程編程是非常費(fèi)力的。 圖5.2 多段代碼同時(shí)執(zhí)行5.1.2 Flat Sequence Structure和Stacked Sequence Structure 按照上述辦法雖然能提高代碼執(zhí)行效率,但你不知道哪一段代碼是先執(zhí)行的。在很多情
3、況下,程序員也會(huì)需要多段代碼能按照設(shè)定的順序執(zhí)行。這時(shí)候,我們就需要順序結(jié)構(gòu)(Sequence Structure)來(lái)幫忙了。有兩種順序結(jié)構(gòu),一種是Flat Sequence Structure, 它是按照從左到右的順序執(zhí)行的。這樣的好處是你能看到所有的代碼,但是當(dāng)代碼段數(shù)太多時(shí)就會(huì)很難看了。另一種是Stacked Sequence Structure,它按照標(biāo)定的順序執(zhí)行代碼。與Flat Sequence Structure不同的是,它將每段代碼都“疊放”在了一起,因此你同時(shí)只能看一段代碼。它們?cè)贔unctions Palette中的位置如圖5.3所示。圖5.3 順序結(jié)構(gòu)在Functions
4、 Palette中的位置 當(dāng)鼠標(biāo)單擊Functions Palette中對(duì)應(yīng)的圖標(biāo)后,再在Block Diagram中按住鼠標(biāo)左鍵向右下方拉動(dòng),估計(jì)大小合適的時(shí)候放開(kāi)鼠標(biāo)左鍵即可??梢钥闯鏊芟耠娪澳z片,意思就是一幀一幀的按順序執(zhí)行。通過(guò)右擊其邊框選擇Add Frame Before或Add Frame After來(lái)增加Frame。同理,可以選擇Delete This Frame來(lái)刪除Frame。下面我們將圖5.2中的兩段代碼重新改寫為按照順序結(jié)構(gòu)執(zhí)行的兩段代碼。分別如圖5.4和圖5.5所示。圖5.4 Flat Sequence Structure 圖5.5 Stacked Sequence
5、Structure5.1.3 在Frame間傳遞數(shù)據(jù) 對(duì)于Flat Sequence Structure,只需要將Frame間的數(shù)據(jù)流用線連起來(lái)就能實(shí)現(xiàn)將前一個(gè)Frame的數(shù)據(jù)傳遞到后一個(gè)Frame中去。如圖5.5所示。其中Frame之間的數(shù)據(jù)連接點(diǎn)是可以用鼠標(biāo)拖動(dòng)的,你可以通過(guò)拖動(dòng)來(lái)合理布線。下面介紹到各種程序結(jié)構(gòu)的數(shù)據(jù)連接端子都是一樣可以拖動(dòng)的。 圖5.6 在Flat Sequence Structure的Frame間傳遞數(shù)據(jù) 而對(duì)于Stacked Sequence Structure則要復(fù)雜些。首先右擊前一個(gè)Frame的下邊框,選擇Add Sequence Local,于是右擊之處就出現(xiàn)
6、了一個(gè)小黃色端子,可以將其拖拽到邊框的任何位置。然后將需要傳遞的數(shù)據(jù)與該端子連接。接著進(jìn)入后一個(gè)Frame,這時(shí)你仍然能看到這個(gè)端子,將其與你需要連接的點(diǎn)連接即可。如圖5.7所示。 圖5.7 在Stacked Sequence Structure的Frame間傳遞數(shù)據(jù)高級(jí)篇中 動(dòng)態(tài)程序控制技術(shù)一章中的內(nèi)容節(jié)選: 17.3.3 多面板程序設(shè)計(jì)在設(shè)計(jì)稍具規(guī)模的系統(tǒng)時(shí),往往一個(gè)前面板很難顯示下所有的內(nèi)容,就算勉強(qiáng)顯示得下,也會(huì)使界面臃腫難看。有些情況下,我們可以通過(guò)Tab Control控件進(jìn)行分頁(yè)顯示,但是如果前面板控件過(guò)多,程序框圖必然會(huì)更加繁亂。其實(shí),類似于常見(jiàn)的Windows程序,我們可以通
7、過(guò)按鈕或菜單彈出更多的界面。這樣,無(wú)論多么復(fù)雜的系統(tǒng)都可以用很簡(jiǎn)潔的多面板人機(jī)界面實(shí)現(xiàn)。下面我們來(lái)看如何在LabVIEW中實(shí)現(xiàn)多面板的程序設(shè)計(jì)。這里,我們將多面板程序分為兩種情況:一種是在彈出子面板時(shí),主程序處于等待狀態(tài),直到子面板運(yùn)行完成。另一種是彈出子面板后,子面板與主程序相互獨(dú)立運(yùn)行。對(duì)于第一種情況,我們可以簡(jiǎn)單的通過(guò)子VI實(shí)現(xiàn)。在子VI的File-VI Properties.-Window Appearance-Customize.對(duì)話框中使能“Show front panel when called”選項(xiàng),當(dāng)主VI調(diào)用到該子VI時(shí),該子VI的前面板便會(huì)自動(dòng)彈出。子VI可以是靜態(tài)調(diào)用也
8、可以是動(dòng)態(tài)調(diào)用。對(duì)于第二種情況,則需要通過(guò)VI Reference的方法節(jié)點(diǎn)來(lái)實(shí)現(xiàn)。下面我們通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明,其前面板和程序框圖如圖17.11所示。前面板的Panel1、Panel2和Panel3三個(gè)按鈕分別對(duì)應(yīng)三個(gè)VI面板。每當(dāng)用戶點(diǎn)擊其中一個(gè)按鈕就會(huì)彈出相應(yīng)的程序面板。運(yùn)行過(guò)程中,我們可以看到各個(gè)面板之間是互不相關(guān)的,即其中一個(gè)面板的運(yùn)行不影響另一個(gè)面板的操作。下面來(lái)看程序框圖是如何實(shí)現(xiàn)的。程序框圖中最主要的是一個(gè)事件結(jié)構(gòu),該事件結(jié)構(gòu)的觸發(fā)條件來(lái)源于用戶點(diǎn)擊界面上四個(gè)按鈕中的任何一個(gè)按鈕。譬如當(dāng)用戶點(diǎn)擊Panel1按鈕時(shí),我們通過(guò)CtlRef的Label.Text屬性獲得按鈕的Label
9、,由此得到該按鈕對(duì)應(yīng)VI的絕對(duì)路徑。通過(guò)Open VI Reference函數(shù)獲得VI Reference后,由VI的Execution.State屬性獲得VI的運(yùn)行狀態(tài),如果VI處于Idle狀態(tài)(即不運(yùn)行狀態(tài)),則通過(guò)Run VI方法運(yùn)行該VI,設(shè)置Wait Until Done參數(shù)為False表明該動(dòng)態(tài)加載的VI與主VI相互獨(dú)立運(yùn)行。最后通過(guò)設(shè)置Front Panel Window.Open屬性為True來(lái)打開(kāi)動(dòng)態(tài)加載VI的前面板。 圖17.11 多面板程序示例下面我們來(lái)看子面板的寫法,如圖17.12所示。為了使用戶點(diǎn)擊按鈕Quit實(shí)現(xiàn)面板的關(guān)閉,我們用到了VI的Front Panel.C
10、lose方法。 圖17.12 子面板程序示例子面板可以有不同的行為模式,譬如子面板始終在界面最前面,或者是對(duì)話框方式,即子面板打開(kāi)時(shí)用戶不能操作其它面板。這可以在子面板程序的File-VI Properties.-Window Appearance-Customize.對(duì)話框中設(shè)置,對(duì)應(yīng)與Window Behavior欄。它有三種模式:Default:普通模式,即如同普通面板一樣沒(méi)有特殊行為。Floating:面板總是浮在窗口最前面,用戶此時(shí)仍然可以操作其它面板。Modal:對(duì)話框模式,即如圖對(duì)話框一樣,當(dāng)該面板運(yùn)行時(shí),用戶不可以操作其它面板。 除了通過(guò)按鈕實(shí)現(xiàn)多面板的調(diào)用,我們也可以通過(guò)菜單
11、實(shí)現(xiàn),如圖17.13所示。這里我們是通過(guò)選中菜單項(xiàng)的ItemTag來(lái)實(shí)現(xiàn)菜單項(xiàng)與相應(yīng)面板VI的對(duì)應(yīng)。 圖17.13 通過(guò)菜單實(shí)現(xiàn)多面板程序 以上的例子中,子面板與主面板之間不存在數(shù)據(jù)流,因此可以用同一段代碼實(shí)現(xiàn)打開(kāi)多個(gè)面板。若主面板VI與子面板VI存在數(shù)據(jù)流則會(huì)稍微復(fù)雜一些,請(qǐng)參考圖17.10所示的例子。如果對(duì)數(shù)據(jù)的流向沒(méi)有要求,我們則可以通過(guò)全局變量來(lái)實(shí)現(xiàn)數(shù)據(jù)的交換,從而簡(jiǎn)化編程。高級(jí)篇中 LabVIEW網(wǎng)絡(luò)編程一章中的內(nèi)容節(jié)選: 20.4.2 TCP通信LabVIEW中用于TCP編程的VI函數(shù)位于Functions Palette的Data Communication-Protocols-
12、TCP面板下,如圖20.22所示。 圖20.22 TCP 編程VI函數(shù)面板 通過(guò)這些函數(shù),原本復(fù)雜的TCP編程在LabVIEW中也變得簡(jiǎn)單起來(lái)。具體函數(shù)的含義如表20-4所示。 表20-4 TCP 編程VI函數(shù)列表VI函數(shù)名稱功能TCP Listen在指定端口創(chuàng)建一個(gè)監(jiān)聽(tīng)端(Listener),并等待客戶端的連接。TCP Create Listener在指定端口創(chuàng)建一個(gè)監(jiān)聽(tīng)端(Listener)。TCP Wait On Listener在指定端口等待客戶端的連接。TCP Open Connection打開(kāi)與遠(yuǎn)程Server端的連接。TCP Read從指定的TCP連接讀取數(shù)據(jù)。TCP Write
13、向指定的TCP連接寫入數(shù)據(jù)。TCP Close Connection關(guān)閉指定的TCP連接。IP To String將IP地址轉(zhuǎn)換為計(jì)算機(jī)名稱。String To IP將計(jì)算機(jī)名轉(zhuǎn)換為IP地址。Resolve Machine Alias通過(guò)VI Server或計(jì)算機(jī)別名返回計(jì)算機(jī)的IP地址。 TCP通信的兩端分別為服務(wù)器端(Server)和客戶端(Client)。服務(wù)器端先對(duì)指定的端口(Port)監(jiān)聽(tīng),客戶端向服務(wù)器端被監(jiān)聽(tīng)的端口發(fā)出請(qǐng)求,服務(wù)器端接收到請(qǐng)求后便建立客戶端與服務(wù)器端的連接,然后就可以利用該連接進(jìn)行通信了。通信完畢后,兩端通過(guò)關(guān)閉連接函數(shù)斷開(kāi)連接。其過(guò)程如圖20.23所示。注意:由
14、于有些端口已經(jīng)被分配給指定的用途,例如80被分配給HTTP服務(wù),20通常被分配給FTP服務(wù),因此在選擇端口時(shí),最好不要選擇小于1024的端口號(hào),1024以下的端口號(hào)是保留給特定用途的,例如FTP,HTTP和Telnet等。 圖20.23 雙機(jī)TCP通訊流程圖 下面通過(guò)幾個(gè)代表性的實(shí)例來(lái)介紹具體如何在LabVIEW中進(jìn)行TCP編程。 例20.1 利用TCP協(xié)議進(jìn)行簡(jiǎn)單點(diǎn)對(duì)點(diǎn)通信本例中,Server端不斷的向客戶端發(fā)送數(shù)組數(shù)據(jù),Client不斷接收數(shù)據(jù)。Server端程序如圖20.24所示。首先通過(guò)TCP Listen函數(shù)在指定端口2052監(jiān)聽(tīng)是否有Client端請(qǐng)求連接,當(dāng)Client端發(fā)出連接
15、請(qǐng)求后,進(jìn)入主循環(huán)發(fā)送數(shù)據(jù)。最后關(guān)閉連接,并過(guò)濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯(cuò)誤信息。Client程序如圖20.25所示。首先通過(guò)TCP Open Connection函數(shù)向Server端請(qǐng)求連接并建立連接,建立連接后,進(jìn)入主循環(huán)接收數(shù)據(jù)。最后關(guān)閉連接,并過(guò)濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯(cuò)誤信息。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端。注意: 1. 由于TCP Write函數(shù)的數(shù)據(jù)輸入只能是字符串,因此你需要通過(guò)Type Cast或Flatten To String函數(shù)將數(shù)據(jù)類型轉(zhuǎn)換為字符串。同樣,在接受端需要再通過(guò)Type Cast或Unflatten From String函數(shù)將字符串重
16、新轉(zhuǎn)換為原始數(shù)據(jù)。2.由于TCP傳遞的數(shù)據(jù)沒(méi)有結(jié)束符,因此你最好在數(shù)據(jù)發(fā)送前先發(fā)送該數(shù)據(jù)包的長(zhǎng)度給接收端,接收端獲知數(shù)據(jù)包的長(zhǎng)度后才能知道應(yīng)該從發(fā)送端讀出多少數(shù)據(jù)。 圖20.24 利用TCP協(xié)議進(jìn)行點(diǎn)對(duì)點(diǎn)通信Server端程序 圖20.25 利用TCP協(xié)議進(jìn)行點(diǎn)對(duì)點(diǎn)通信Client端程序 例20.2 利用TCP協(xié)議進(jìn)行交互式點(diǎn)對(duì)點(diǎn)通信在上例中只是進(jìn)行了簡(jiǎn)單的服務(wù)器端發(fā)送數(shù)據(jù),客戶端接收數(shù)據(jù)。實(shí)際上,服務(wù)器端與客戶端可以同時(shí)進(jìn)行交互式通信,即服務(wù)器端可以同時(shí)向客戶端發(fā)送數(shù)據(jù)并從客戶端接收數(shù)據(jù),客戶端也一樣。由于TCP協(xié)議自動(dòng)管理數(shù)據(jù)分組、排隊(duì)等,因此不會(huì)照成沖突。用戶可以打開(kāi)本書自帶實(shí)例:交互式
17、點(diǎn)對(duì)點(diǎn)通訊舉例_TCP Server.vi和交互式點(diǎn)對(duì)點(diǎn)通訊舉例_TCP Client.vi學(xué)習(xí)。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端。 例20.3 利用TCP協(xié)議進(jìn)行一點(diǎn)對(duì)多點(diǎn)通信上面兩個(gè)例子都是點(diǎn)對(duì)點(diǎn)通信,實(shí)際上對(duì)于TCP編程也可以進(jìn)行一點(diǎn)對(duì)多點(diǎn)進(jìn)行通信。Server端只需要添加一個(gè)循環(huán)不斷的監(jiān)聽(tīng)連接,一旦有Client端請(qǐng)求連接,則與該Client建立連接,并將連接放入隊(duì)列。主循環(huán)對(duì)隊(duì)列中的每一個(gè)元素逐個(gè)進(jìn)行讀寫。當(dāng)然,這實(shí)際上仍然利用的是點(diǎn)對(duì)點(diǎn)的通信,即客戶端與服務(wù)器必須建立點(diǎn)對(duì)點(diǎn)的連接。只不過(guò)這里是通過(guò)連接隊(duì)列來(lái)逐個(gè)處理每一個(gè)連接。因此,這里并不是“廣播”通訊,真
18、正的“廣播”需要通過(guò)UDP協(xié)議才能實(shí)現(xiàn)。該例Server端程序框圖和Client端程序框圖分別如圖20.26與圖20.27所示。Server端程序利用到了隊(duì)列,關(guān)于隊(duì)列的知識(shí)將在下一章介紹。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端,Client端可以有多個(gè)。 圖20.26 利用TCP協(xié)議進(jìn)行一點(diǎn)對(duì)多點(diǎn)通信Server端程序框圖 圖20.27 利用TCP協(xié)議進(jìn)行一點(diǎn)對(duì)多點(diǎn)通信Client端程序框圖LabVIEW8.20程序設(shè)計(jì)從入門到精通樣章試讀: 順序結(jié)構(gòu)、多面板程序設(shè)計(jì)、TCP編程入門篇中 程序結(jié)構(gòu)一章中的內(nèi)容節(jié)選:5.1 順序結(jié)構(gòu)(Sequence Structure)5.
19、1.1 LabVIEW程序的執(zhí)行順序 如果你用傳統(tǒng)的文本程序語(yǔ)言寫過(guò)程序,你一定相當(dāng)然的認(rèn)為程序是按照語(yǔ)句的順序從上到下一條條執(zhí)行的,除非遇到goto語(yǔ)句或是函數(shù)才會(huì)跳到另外一段代碼去執(zhí)行。但是作為一種圖形化開(kāi)發(fā)語(yǔ)言,LabVIEW有它獨(dú)特的方法來(lái)確定它的執(zhí)行順序。首先是根據(jù)數(shù)據(jù)流執(zhí)行,只有當(dāng)節(jié)點(diǎn)的所有輸入點(diǎn)的數(shù)據(jù)都“流到”時(shí),才會(huì)執(zhí)行該節(jié)點(diǎn)。一般來(lái)說(shuō)荻際前湊沾幼蟮接業(yè)姆較頡傲鞫鋇摹繽?/SPAN5.1所示,這段代碼就代表了Result=(5+Rand)2這個(gè)表達(dá)式。 圖5.1 數(shù)據(jù)流式的編程方法 如果你再放一段類似代碼在同一個(gè)Block Diagram里的話,它又是如何執(zhí)行的呢?如圖5.2所
20、示,這兩段代碼并不是按照從左到右或從上到下地順序執(zhí)行的,而是并行獨(dú)立地執(zhí)行的。這是因?yàn)長(zhǎng)abVIEW實(shí)現(xiàn)了自動(dòng)多線程。它使代碼的執(zhí)行效率大大提高了。如果用文本程序語(yǔ)言,實(shí)現(xiàn)多線程編程是非常費(fèi)力的。 圖5.2 多段代碼同時(shí)執(zhí)行5.1.2 Flat Sequence Structure和Stacked Sequence Structure 按照上述辦法雖然能提高代碼執(zhí)行效率,但你不知道哪一段代碼是先執(zhí)行的。在很多情況下,程序員也會(huì)需要多段代碼能按照設(shè)定的順序執(zhí)行。這時(shí)候,我們就需要順序結(jié)構(gòu)(Sequence Structure)來(lái)幫忙了。有兩種順序結(jié)構(gòu),一種是Flat Sequence Struc
21、ture, 它是按照從左到右的順序執(zhí)行的。這樣的好處是你能看到所有的代碼,但是當(dāng)代碼段數(shù)太多時(shí)就會(huì)很難看了。另一種是Stacked Sequence Structure,它按照標(biāo)定的順序執(zhí)行代碼。與Flat Sequence Structure不同的是,它將每段代碼都“疊放”在了一起,因此你同時(shí)只能看一段代碼。它們?cè)贔unctions Palette中的位置如圖5.3所示。圖5.3 順序結(jié)構(gòu)在Functions Palette中的位置 當(dāng)鼠標(biāo)單擊Functions Palette中對(duì)應(yīng)的圖標(biāo)后,再在Block Diagram中按住鼠標(biāo)左鍵向右下方拉動(dòng),估計(jì)大小合適的時(shí)候放開(kāi)鼠標(biāo)左鍵即可??梢钥?/p>
22、出它很像電影膠片,意思就是一幀一幀的按順序執(zhí)行。通過(guò)右擊其邊框選擇Add Frame Before或Add Frame After來(lái)增加Frame。同理,可以選擇Delete This Frame來(lái)刪除Frame。下面我們將圖5.2中的兩段代碼重新改寫為按照順序結(jié)構(gòu)執(zhí)行的兩段代碼。分別如圖5.4和圖5.5所示。圖5.4 Flat Sequence Structure 圖5.5 Stacked Sequence Structure5.1.3 在Frame間傳遞數(shù)據(jù) 對(duì)于Flat Sequence Structure,只需要將Frame間的數(shù)據(jù)流用線連起來(lái)就能實(shí)現(xiàn)將前一個(gè)Frame的數(shù)據(jù)傳遞到后一
23、個(gè)Frame中去。如圖5.5所示。其中Frame之間的數(shù)據(jù)連接點(diǎn)是可以用鼠標(biāo)拖動(dòng)的,你可以通過(guò)拖動(dòng)來(lái)合理布線。下面介紹到各種程序結(jié)構(gòu)的數(shù)據(jù)連接端子都是一樣可以拖動(dòng)的。 圖5.6 在Flat Sequence Structure的Frame間傳遞數(shù)據(jù) 而對(duì)于Stacked Sequence Structure則要復(fù)雜些。首先右擊前一個(gè)Frame的下邊框,選擇Add Sequence Local,于是右擊之處就出現(xiàn)了一個(gè)小黃色端子,可以將其拖拽到邊框的任何位置。然后將需要傳遞的數(shù)據(jù)與該端子連接。接著進(jìn)入后一個(gè)Frame,這時(shí)你仍然能看到這個(gè)端子,將其與你需要連接的點(diǎn)連接即可。如圖5.7所示。 圖5
24、.7 在Stacked Sequence Structure的Frame間傳遞數(shù)據(jù)高級(jí)篇中 動(dòng)態(tài)程序控制技術(shù)一章中的內(nèi)容節(jié)選: 17.3.3 多面板程序設(shè)計(jì)在設(shè)計(jì)稍具規(guī)模的系統(tǒng)時(shí),往往一個(gè)前面板很難顯示下所有的內(nèi)容,就算勉強(qiáng)顯示得下,也會(huì)使界面臃腫難看。有些情況下,我們可以通過(guò)Tab Control控件進(jìn)行分頁(yè)顯示,但是如果前面板控件過(guò)多,程序框圖必然會(huì)更加繁亂。其實(shí),類似于常見(jiàn)的Windows程序,我們可以通過(guò)按鈕或菜單彈出更多的界面。這樣,無(wú)論多么復(fù)雜的系統(tǒng)都可以用很簡(jiǎn)潔的多面板人機(jī)界面實(shí)現(xiàn)。下面我們來(lái)看如何在LabVIEW中實(shí)現(xiàn)多面板的程序設(shè)計(jì)。這里,我們將多面板程序分為兩種情況:一種是
25、在彈出子面板時(shí),主程序處于等待狀態(tài),直到子面板運(yùn)行完成。另一種是彈出子面板后,子面板與主程序相互獨(dú)立運(yùn)行。對(duì)于第一種情況,我們可以簡(jiǎn)單的通過(guò)子VI實(shí)現(xiàn)。在子VI的File-VI Properties.-Window Appearance-Customize.對(duì)話框中使能“Show front panel when called”選項(xiàng),當(dāng)主VI調(diào)用到該子VI時(shí),該子VI的前面板便會(huì)自動(dòng)彈出。子VI可以是靜態(tài)調(diào)用也可以是動(dòng)態(tài)調(diào)用。對(duì)于第二種情況,則需要通過(guò)VI Reference的方法節(jié)點(diǎn)來(lái)實(shí)現(xiàn)。下面我們通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明,其前面板和程序框圖如圖17.11所示。前面板的Panel1、Panel2和
26、Panel3三個(gè)按鈕分別對(duì)應(yīng)三個(gè)VI面板。每當(dāng)用戶點(diǎn)擊其中一個(gè)按鈕就會(huì)彈出相應(yīng)的程序面板。運(yùn)行過(guò)程中,我們可以看到各個(gè)面板之間是互不相關(guān)的,即其中一個(gè)面板的運(yùn)行不影響另一個(gè)面板的操作。下面來(lái)看程序框圖是如何實(shí)現(xiàn)的。程序框圖中最主要的是一個(gè)事件結(jié)構(gòu),該事件結(jié)構(gòu)的觸發(fā)條件來(lái)源于用戶點(diǎn)擊界面上四個(gè)按鈕中的任何一個(gè)按鈕。譬如當(dāng)用戶點(diǎn)擊Panel1按鈕時(shí),我們通過(guò)CtlRef的Label.Text屬性獲得按鈕的Label,由此得到該按鈕對(duì)應(yīng)VI的絕對(duì)路徑。通過(guò)Open VI Reference函數(shù)獲得VI Reference后,由VI的Execution.State屬性獲得VI的運(yùn)行狀態(tài),如果VI處于I
27、dle狀態(tài)(即不運(yùn)行狀態(tài)),則通過(guò)Run VI方法運(yùn)行該VI,設(shè)置Wait Until Done參數(shù)為False表明該動(dòng)態(tài)加載的VI與主VI相互獨(dú)立運(yùn)行。最后通過(guò)設(shè)置Front Panel Window.Open屬性為True來(lái)打開(kāi)動(dòng)態(tài)加載VI的前面板。 圖17.11 多面板程序示例下面我們來(lái)看子面板的寫法,如圖17.12所示。為了使用戶點(diǎn)擊按鈕Quit實(shí)現(xiàn)面板的關(guān)閉,我們用到了VI的Front Panel.Close方法。 圖17.12 子面板程序示例子面板可以有不同的行為模式,譬如子面板始終在界面最前面,或者是對(duì)話框方式,即子面板打開(kāi)時(shí)用戶不能操作其它面板。這可以在子面板程序的File-V
28、I Properties.-Window Appearance-Customize.對(duì)話框中設(shè)置,對(duì)應(yīng)與Window Behavior欄。它有三種模式:Default:普通模式,即如同普通面板一樣沒(méi)有特殊行為。Floating:面板總是浮在窗口最前面,用戶此時(shí)仍然可以操作其它面板。Modal:對(duì)話框模式,即如圖對(duì)話框一樣,當(dāng)該面板運(yùn)行時(shí),用戶不可以操作其它面板。 除了通過(guò)按鈕實(shí)現(xiàn)多面板的調(diào)用,我們也可以通過(guò)菜單實(shí)現(xiàn),如圖17.13所示。這里我們是通過(guò)選中菜單項(xiàng)的ItemTag來(lái)實(shí)現(xiàn)菜單項(xiàng)與相應(yīng)面板VI的對(duì)應(yīng)。 圖17.13 通過(guò)菜單實(shí)現(xiàn)多面板程序 以上的例子中,子面板與主面板之間不存在數(shù)據(jù)流,
29、因此可以用同一段代碼實(shí)現(xiàn)打開(kāi)多個(gè)面板。若主面板VI與子面板VI存在數(shù)據(jù)流則會(huì)稍微復(fù)雜一些,請(qǐng)參考圖17.10所示的例子。如果對(duì)數(shù)據(jù)的流向沒(méi)有要求,我們則可以通過(guò)全局變量來(lái)實(shí)現(xiàn)數(shù)據(jù)的交換,從而簡(jiǎn)化編程。高級(jí)篇中 LabVIEW網(wǎng)絡(luò)編程一章中的內(nèi)容節(jié)選: 20.4.2 TCP通信LabVIEW中用于TCP編程的VI函數(shù)位于Functions Palette的Data Communication-Protocols-TCP面板下,如圖20.22所示。 圖20.22 TCP 編程VI函數(shù)面板 通過(guò)這些函數(shù),原本復(fù)雜的TCP編程在LabVIEW中也變得簡(jiǎn)單起來(lái)。具體函數(shù)的含義如表20-4所示。 表20-
30、4 TCP 編程VI函數(shù)列表VI函數(shù)名稱功能TCP Listen在指定端口創(chuàng)建一個(gè)監(jiān)聽(tīng)端(Listener),并等待客戶端的連接。TCP Create Listener在指定端口創(chuàng)建一個(gè)監(jiān)聽(tīng)端(Listener)。TCP Wait On Listener在指定端口等待客戶端的連接。TCP Open Connection打開(kāi)與遠(yuǎn)程Server端的連接。TCP Read從指定的TCP連接讀取數(shù)據(jù)。TCP Write向指定的TCP連接寫入數(shù)據(jù)。TCP Close Connection關(guān)閉指定的TCP連接。IP To String將IP地址轉(zhuǎn)換為計(jì)算機(jī)名稱。String To IP將計(jì)算機(jī)名轉(zhuǎn)換為IP
31、地址。Resolve Machine Alias通過(guò)VI Server或計(jì)算機(jī)別名返回計(jì)算機(jī)的IP地址。 TCP通信的兩端分別為服務(wù)器端(Server)和客戶端(Client)。服務(wù)器端先對(duì)指定的端口(Port)監(jiān)聽(tīng),客戶端向服務(wù)器端被監(jiān)聽(tīng)的端口發(fā)出請(qǐng)求,服務(wù)器端接收到請(qǐng)求后便建立客戶端與服務(wù)器端的連接,然后就可以利用該連接進(jìn)行通信了。通信完畢后,兩端通過(guò)關(guān)閉連接函數(shù)斷開(kāi)連接。其過(guò)程如圖20.23所示。注意:由于有些端口已經(jīng)被分配給指定的用途,例如80被分配給HTTP服務(wù),20通常被分配給FTP服務(wù),因此在選擇端口時(shí),最好不要選擇小于1024的端口號(hào),1024以下的端口號(hào)是保留給特定用途的,例
32、如FTP,HTTP和Telnet等。 圖20.23 雙機(jī)TCP通訊流程圖 下面通過(guò)幾個(gè)代表性的實(shí)例來(lái)介紹具體如何在LabVIEW中進(jìn)行TCP編程。 例20.1 利用TCP協(xié)議進(jìn)行簡(jiǎn)單點(diǎn)對(duì)點(diǎn)通信本例中,Server端不斷的向客戶端發(fā)送數(shù)組數(shù)據(jù),Client不斷接收數(shù)據(jù)。Server端程序如圖20.24所示。首先通過(guò)TCP Listen函數(shù)在指定端口2052監(jiān)聽(tīng)是否有Client端請(qǐng)求連接,當(dāng)Client端發(fā)出連接請(qǐng)求后,進(jìn)入主循環(huán)發(fā)送數(shù)據(jù)。最后關(guān)閉連接,并過(guò)濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯(cuò)誤信息。Client程序如圖20.25所示。首先通過(guò)TCP Open Connection函數(shù)向Server端請(qǐng)求連
33、接并建立連接,建立連接后,進(jìn)入主循環(huán)接收數(shù)據(jù)。最后關(guān)閉連接,并過(guò)濾掉因?yàn)檎jP(guān)閉導(dǎo)致的錯(cuò)誤信息。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端。注意: 1. 由于TCP Write函數(shù)的數(shù)據(jù)輸入只能是字符串,因此你需要通過(guò)Type Cast或Flatten To String函數(shù)將數(shù)據(jù)類型轉(zhuǎn)換為字符串。同樣,在接受端需要再通過(guò)Type Cast或Unflatten From String函數(shù)將字符串重新轉(zhuǎn)換為原始數(shù)據(jù)。2.由于TCP傳遞的數(shù)據(jù)沒(méi)有結(jié)束符,因此你最好在數(shù)據(jù)發(fā)送前先發(fā)送該數(shù)據(jù)包的長(zhǎng)度給接收端,接收端獲知數(shù)據(jù)包的長(zhǎng)度后才能知道應(yīng)該從發(fā)送端讀出多少數(shù)據(jù)。 圖20.24 利用T
34、CP協(xié)議進(jìn)行點(diǎn)對(duì)點(diǎn)通信Server端程序 圖20.25 利用TCP協(xié)議進(jìn)行點(diǎn)對(duì)點(diǎn)通信Client端程序 例20.2 利用TCP協(xié)議進(jìn)行交互式點(diǎn)對(duì)點(diǎn)通信在上例中只是進(jìn)行了簡(jiǎn)單的服務(wù)器端發(fā)送數(shù)據(jù),客戶端接收數(shù)據(jù)。實(shí)際上,服務(wù)器端與客戶端可以同時(shí)進(jìn)行交互式通信,即服務(wù)器端可以同時(shí)向客戶端發(fā)送數(shù)據(jù)并從客戶端接收數(shù)據(jù),客戶端也一樣。由于TCP協(xié)議自動(dòng)管理數(shù)據(jù)分組、排隊(duì)等,因此不會(huì)照成沖突。用戶可以打開(kāi)本書自帶實(shí)例:交互式點(diǎn)對(duì)點(diǎn)通訊舉例_TCP Server.vi和交互式點(diǎn)對(duì)點(diǎn)通訊舉例_TCP Client.vi學(xué)習(xí)。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端。 例20.3 利用TCP協(xié)議進(jìn)
35、行一點(diǎn)對(duì)多點(diǎn)通信上面兩個(gè)例子都是點(diǎn)對(duì)點(diǎn)通信,實(shí)際上對(duì)于TCP編程也可以進(jìn)行一點(diǎn)對(duì)多點(diǎn)進(jìn)行通信。Server端只需要添加一個(gè)循環(huán)不斷的監(jiān)聽(tīng)連接,一旦有Client端請(qǐng)求連接,則與該Client建立連接,并將連接放入隊(duì)列。主循環(huán)對(duì)隊(duì)列中的每一個(gè)元素逐個(gè)進(jìn)行讀寫。當(dāng)然,這實(shí)際上仍然利用的是點(diǎn)對(duì)點(diǎn)的通信,即客戶端與服務(wù)器必須建立點(diǎn)對(duì)點(diǎn)的連接。只不過(guò)這里是通過(guò)連接隊(duì)列來(lái)逐個(gè)處理每一個(gè)連接。因此,這里并不是“廣播”通訊,真正的“廣播”需要通過(guò)UDP協(xié)議才能實(shí)現(xiàn)。該例Server端程序框圖和Client端程序框圖分別如圖20.26與圖20.27所示。Server端程序利用到了隊(duì)列,關(guān)于隊(duì)列的知識(shí)將在下一章介
36、紹。運(yùn)行程序時(shí),必須先運(yùn)行Server端再運(yùn)行Client端,Client端可以有多個(gè)。 圖20.26 利用TCP協(xié)議進(jìn)行一點(diǎn)對(duì)多點(diǎn)通信Server端程序框圖 圖20.27 利用TCP協(xié)議進(jìn)行一點(diǎn)對(duì)多點(diǎn)通信Client端程序框圖基于LabVIEW的虛擬示波器的設(shè)計(jì)和實(shí)現(xiàn) 2007-06-01 10:33:08作者:來(lái)源:中國(guó)電子測(cè)試網(wǎng)瀏覽次數(shù):623文字大?。骸敬蟆俊局小俊拘 亢?jiǎn)介:虛擬儀器的出現(xiàn)使人類的測(cè)試技術(shù)進(jìn)入了新的發(fā)展紀(jì)元。以虛擬雙通道示波器為例,從系統(tǒng)構(gòu)造、軟硬件實(shí)現(xiàn)等方面詳細(xì)介紹了如何應(yīng)用數(shù)據(jù)采集卡和開(kāi)發(fā)工具LabVIEW構(gòu)造和實(shí)現(xiàn)這一儀器。關(guān)鍵字:虛擬儀器; 示波器; 數(shù)據(jù)采集卡
37、; LabVIEW 1 儀器的工作原理及系統(tǒng)構(gòu)成虛擬示波器是由信號(hào)調(diào)理器,PCI總線的數(shù)據(jù)采集卡組成的外部采集系統(tǒng)加上軟件構(gòu)成的分析處理系統(tǒng)組成。被測(cè)信號(hào)送到信號(hào)調(diào)理電路,進(jìn)行隔離、放大、濾波整流后送數(shù)據(jù)采集卡進(jìn)行A/D轉(zhuǎn)換,最后由控制軟件對(duì)測(cè)試信號(hào)進(jìn)行數(shù)據(jù)處理,完成波形顯示,參數(shù)測(cè)量、頻譜分析等功能。系統(tǒng)結(jié)構(gòu)如圖1顯示圖1 系統(tǒng)結(jié)構(gòu)圖2 系統(tǒng)的設(shè)計(jì)及功能實(shí)現(xiàn)2.1硬件部分 硬件部分主要包括傳感器、信號(hào)調(diào)理電路及數(shù)據(jù)采集卡。而傳感器和信號(hào)調(diào)理電路針對(duì)不同的測(cè)試對(duì)象有不同的選擇和設(shè)計(jì)。數(shù)據(jù)采集是硬件部分的核心,它的性能直接影響數(shù)據(jù)采集的速度和精度。另外,LabVIEW可對(duì)NI公司的數(shù)據(jù)采集卡進(jìn)行
38、驅(qū)動(dòng)和配置,可充分利用采集卡的性能?;诖?,我選擇的數(shù)據(jù)采集卡是NI公司生產(chǎn)的。下面主要介紹數(shù)據(jù)采集卡的性能和安裝配置。2.1.1 PCI6010數(shù)據(jù)采集卡的簡(jiǎn)介PCI6010采集卡是基于32位PCI總線的多通道的數(shù)據(jù)采集設(shè)備,具有數(shù)字輸入/輸出、模擬輸入/輸出和計(jì)數(shù)器等功能。它通過(guò)SH37F37M電纜與CB37FLF 輸入輸出接口面板連接,該接口面板具有37個(gè)螺旋狀的接口終端。同時(shí)此數(shù)據(jù)采集卡具有3個(gè)完全獨(dú)立的DMA控制(模擬輸入、定時(shí)/計(jì)數(shù)器0、定時(shí)/計(jì)數(shù)器1)。本卡還具有刻度校準(zhǔn)電路系統(tǒng)。由于運(yùn)行時(shí),時(shí)間和溫度漂移會(huì)引起一定的模擬輸入、輸出誤差,為了使此誤差最小,可以調(diào)整設(shè)備的校準(zhǔn)刻度。
39、而它的出廠校準(zhǔn)信息存儲(chǔ)在EEPROM中,不能修改。而修改此信息必須通過(guò)軟件來(lái)實(shí)現(xiàn)。 該數(shù)據(jù)采集卡具有8個(gè)差動(dòng)模擬輸入通道(即16個(gè)對(duì)地單信號(hào)模擬輸入通道),電壓范圍為5V, 1V,0.2V;2個(gè)模擬輸出通道,電壓范圍為5V。同時(shí)它還具有6個(gè)數(shù)字輸入通道,4個(gè)數(shù)字輸出通道。數(shù)字輸入的VIH(Input high voltage)的最小值是2.0 V, 最大值是5.25 V,VIL(Input low voltage)的最大值是0.8 V, 最小值是0.3 V;數(shù)字輸出的IOH(Output high current)的最大值是6 mA ,IOL (Output low current) 的最大值
40、是2 mA。信號(hào)通道的最大采樣速率是200 kS/s (single channel) ,掃描時(shí)最大采樣速率是33.3 kS/s (scanning)。2.1.2 PCI6010數(shù)據(jù)采集卡的安裝 將NI PCI6010數(shù)據(jù)采集卡插到計(jì)算機(jī)主板的一個(gè)插槽中,接好附件。附件包括一個(gè)型號(hào)為CB37FLF的轉(zhuǎn)接板,和一條SH37F37M電纜。轉(zhuǎn)接板直接與外部信號(hào)連接。在完成了NI PCI6010數(shù)據(jù)采集卡的硬件連接后,就需要安裝該卡的驅(qū)動(dòng)程序。安裝步驟如下:(1) 運(yùn)行程序National Instrument DAQNI-DAQ Setup。在出現(xiàn)對(duì)話框中單擊NEXT按鈕。(2) 在出現(xiàn)的Selet
41、ct DAQ Devices對(duì)話框中選中NI PCI6010,單擊NEXT按鈕。(3) 在后續(xù)出現(xiàn)的全部對(duì)話框中單擊NEXT按鈕,即可完成NI PCI6010數(shù)據(jù)采集卡的安裝。(4) 重新啟動(dòng)計(jì)算機(jī)。完成數(shù)據(jù)采集卡的安裝。2.1.3 PCI6010數(shù)據(jù)采集卡的配置 在安裝好數(shù)據(jù)采集卡后就要對(duì)其進(jìn)行系統(tǒng)配置。點(diǎn)擊圖標(biāo)Measurement & Automation Explorer,在彈出的Devices and Interface 中進(jìn)行I/O配置。(1) 這支采集卡在系統(tǒng)的設(shè)備的編號(hào):將參數(shù)Device值設(shè)為1;(2) 設(shè)置模擬輸入AI的屬性:將Polarity 值設(shè)為-5V+5V,將Mod
42、e屬性設(shè)置為Differentioal(差動(dòng));(3) 設(shè)置模擬輸出AO的屬性:在AO窗口中,將屬性設(shè)為Bipolar(雙極性)。 在完成上述設(shè)定之后,單擊“確定”按鈕。在Systerm窗口中 有“Test Resources”按鈕,可檢驗(yàn)設(shè)備是否正確配置。通過(guò)后再進(jìn)行簡(jiǎn)單的通道配置,即可完成數(shù)據(jù)采集卡的全部設(shè)置。2.2 軟件部分 LabVIEW(laboratory virtual instrument engineering workbench實(shí)驗(yàn)室虛擬儀器工程平臺(tái))是美國(guó)國(guó)家儀器公司(NI公司)推出的一種基于“圖形”方式的集成化程序開(kāi)發(fā)環(huán)境,是目前國(guó)際上唯一的編譯型圖形化編程語(yǔ)言。它是N
43、I公司開(kāi)發(fā)的面向儀器與測(cè)控過(guò)程的圖形化開(kāi)發(fā)平臺(tái),它的概念,是直觀的前面板與流程圖式的編程方法的結(jié)合。本設(shè)計(jì)中采用LabVIEW7.1。 概括地講,系統(tǒng)軟件總體上包括數(shù)據(jù)采集、波形顯示、參數(shù)測(cè)量等三大模塊,其流程如圖2所示:圖2 軟件流程圖2.2.1 數(shù)據(jù)采集模塊的設(shè)計(jì) 數(shù)據(jù)采集模塊式虛擬示波器軟件的核心,主要完成數(shù)據(jù)采集的控制,數(shù)據(jù)的讀取及數(shù)據(jù)的轉(zhuǎn)換。數(shù)據(jù)采集卡通過(guò)多路開(kāi)關(guān)、A/D 轉(zhuǎn)換新片和數(shù)據(jù)緩存的幾個(gè)部件將多通道的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并貯存在其緩存中,而計(jì)算機(jī)通過(guò)LabVIEW中的數(shù)據(jù)采集VI對(duì)數(shù)據(jù)采集卡中的幾個(gè)部件的運(yùn)作進(jìn)行控制,數(shù)據(jù)采集卡和計(jì)算機(jī)之間通過(guò)計(jì)算機(jī)總線含通信,交換數(shù)據(jù)和
44、控制信息。一個(gè)多通道波形數(shù)據(jù)采集的過(guò)程一般包括以下幾個(gè)步驟:(1) 數(shù)據(jù)采集卡有關(guān)的采樣參數(shù)(采集頻率、采集次數(shù)、采集通道、數(shù)據(jù)緩存的大?。?2) 采樣開(kāi)始,多路開(kāi)關(guān)對(duì)采樣通道進(jìn)行一次掃描,每個(gè)通道采樣一個(gè)點(diǎn)。(3)A/D 轉(zhuǎn)換。(4) 數(shù)字信號(hào)存到數(shù)據(jù)緩存。(5)重復(fù)(2)(4),直到采集到了所需的采樣次數(shù),全部數(shù)據(jù)順序存儲(chǔ)到緩存中。(6)從數(shù)據(jù)采集卡的緩存中讀取數(shù)據(jù)到計(jì)算機(jī)的內(nèi)存中。 其程序代碼如圖3:圖3 數(shù)據(jù)采集部件2.2.2 波形顯示模塊 波形顯示模塊主要包括幅值調(diào)整、位移調(diào)整和精度調(diào)整。波形顯示主要用Waveform chart 控件。通過(guò)幅值、位移及精度的調(diào)整,可方便的放大或延展
45、波形,便于觀察。其代碼如圖4:圖4 參數(shù)控制部件 儀器前面板如圖5所示。圖5 儀器面板圖總的程序代碼如圖6所示。圖6 總的程序代碼圖3 結(jié)束語(yǔ) 外接一臺(tái)信號(hào)發(fā)生器,皆能輕松實(shí)現(xiàn)虛擬儀器的調(diào)試和檢驗(yàn)。經(jīng)過(guò)軟件修改,在一臺(tái)示波器上還能實(shí)現(xiàn)頻譜分析、頻率電壓轉(zhuǎn)換等普通示波器所根本不具有的功能,充分體現(xiàn)了軟件設(shè)計(jì)的靈活性。另外,將虛擬儀器技術(shù)與網(wǎng)絡(luò)技術(shù)結(jié)合進(jìn)行遠(yuǎn)程數(shù)據(jù)采集,可以充分發(fā)揮虛擬儀器的優(yōu)勢(shì),最大限度地實(shí)現(xiàn)硬件資源共享,隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展以及各種高性能的數(shù)據(jù)采集卡的大量涌現(xiàn),虛擬儀器的應(yīng)用前景將非常廣闊。LabVIEW是一種通用的編程語(yǔ)言嗎?作者:Jeff Kodosky,LabVIEW
46、之父我經(jīng)常聽(tīng)到,甚至有時(shí)關(guān)注于對(duì)LabVIEW的爭(zhēng)論,即LabVIEW是一種通用的語(yǔ)言還是一種用于測(cè)量和自動(dòng)化的特定應(yīng)用程序的開(kāi)發(fā)環(huán)境。一方面,有經(jīng)驗(yàn)的程序員指出了LabVIEW缺乏的流行編程語(yǔ)言所具有的特性,但是另一方面,一些用戶詳細(xì)闡述了他們使用LabVIEW所建立的通用應(yīng)用程序,而完全沒(méi)有使用任何數(shù)據(jù)采集或分析。對(duì)LabVIEW用戶的調(diào)查可能與最近一個(gè)非正式的對(duì)一個(gè)團(tuán)隊(duì)中的開(kāi)發(fā)者的調(diào)查一致,這個(gè)團(tuán)隊(duì)中的絕大多數(shù)人都認(rèn)為L(zhǎng)abVIEW已具有足夠的功能來(lái)被歸為通用語(yǔ)言類,而且事實(shí)上,正是以這種方式在使用它。LabVIEW被提到次數(shù)最多的不足是常用的遞歸和遞歸式數(shù)據(jù)類型,以及面向?qū)ο蟮慕Y(jié)構(gòu),但
47、是這些都不是建立通用應(yīng)用程序的嚴(yán)重障礙。錯(cuò)誤的問(wèn)題盡管有了調(diào)查結(jié)果,但是我認(rèn)為這是一個(gè)錯(cuò)誤的問(wèn)題而且試圖回答它會(huì)導(dǎo)致錯(cuò)誤的方向。對(duì)我來(lái)說(shuō),這有點(diǎn)像在問(wèn):汽車是不是用來(lái)就座的地方?當(dāng)然你可以在汽車?yán)锞妥?,但是如果那是你利用它所做的全部,那么你失去了擁有它可以得到的主要用途。一個(gè)較好的問(wèn)題是:LabVIEW可以被用作通用編程語(yǔ)言嗎?或者更好的是:LabVIEW能夠被用來(lái)創(chuàng)建通用的應(yīng)用程序嗎?這個(gè)問(wèn)題的新表述在什么被視為通用這個(gè)方面仍然是同樣模糊的,但是它沒(méi)有強(qiáng)調(diào)有時(shí)顯得嚴(yán)謹(jǐn)?shù)臓?zhēng)論,即LabVIEW是不是一種編程語(yǔ)言?一些人并不認(rèn)為它是一種語(yǔ)言,因?yàn)樗皇腔谖谋镜亩宜皇琼樞蚧摹8鼮槠婀值氖牵?/p>
48、關(guān)于什么被看作是一種編程語(yǔ)言的這個(gè)問(wèn)題上,那些具有計(jì)算機(jī)科學(xué)背景的人持有最為狹隘的觀點(diǎn)。但是,經(jīng)過(guò)改正后的問(wèn)題最為重要的一個(gè)方面是它將包容性轉(zhuǎn)換到了正確的方向。換一種方式來(lái)表達(dá),即最初的問(wèn)題間接地暗示了通用編程語(yǔ)言在某種程度上是一個(gè)更大的問(wèn)題或者是測(cè)量和自動(dòng)化編程的一個(gè)父集,然而,實(shí)際上子集卻在其他的方向。通常,測(cè)量和自動(dòng)化的程序必須處理所有與通用程序一樣的問(wèn)題,如數(shù)據(jù)結(jié)構(gòu)和算法、文件I/O、網(wǎng)絡(luò)I/O、用戶I/O和數(shù)據(jù)庫(kù)存取、打印等等這些常見(jiàn)的問(wèn)題。但是測(cè)量和自動(dòng)化程序也必須處理比通用程序更多的問(wèn)題,例如物理I/O、實(shí)時(shí)性約束和硬件配置。它們也可以具有一些最為苛刻的用戶界面要求。測(cè)量和自動(dòng)化
49、程序處理了一個(gè)通用程序所處理問(wèn)題的父集。如果工具A和工具B可以被用于一定的任務(wù)集,但是工具B具有更多的功能可使它益于完成額外的任務(wù),哪一種工具是事實(shí)上更為通用的呢?這正是我們關(guān)于LabVIEW問(wèn)題。LabVIEW適于測(cè)量和自動(dòng)化應(yīng)用程序的能力不是來(lái)自于它的基本編程能力被某種方式所限制,而是因?yàn)樗鼈兘?jīng)過(guò)了增強(qiáng)和擴(kuò)展。這就是為什么有必要提出“LabVIEW能夠被用來(lái)創(chuàng)建通用的應(yīng)用程序嗎?”這個(gè)問(wèn)題而不是“LabVIEW是一種通用編程語(yǔ)言嗎?”。我們不希望通過(guò)把LabVIEW僅視為一種編程語(yǔ)言而限制了它的范圍或它將來(lái)的發(fā)展。LabVIEW不僅僅是一種編程語(yǔ)言。它是一種高度交互式的開(kāi)發(fā)環(huán)境用來(lái)快速設(shè)計(jì)
50、原型和應(yīng)用程序的漸進(jìn)式開(kāi)發(fā),從測(cè)量和自動(dòng)化到實(shí)時(shí)嵌入式系統(tǒng),再到通用場(chǎng)合。而且現(xiàn)在,LabVIEW具有了對(duì)FPGA編程下載的能力,所以LabVIEW也是一個(gè)硬件設(shè)計(jì)工具。數(shù)據(jù)流 LabVIEW的核心是結(jié)構(gòu)化的數(shù)據(jù)流圖。數(shù)據(jù)流已存在了很長(zhǎng)一段時(shí)間而且已被深入地理解。事實(shí)上,它是一個(gè)比流行的基于文本語(yǔ)言的控制流更為豐富的計(jì)算模型,因?yàn)樗谋举|(zhì)是并行的,而C/C+和BASIC則不是它們必須依賴于對(duì)操作系統(tǒng)的庫(kù)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)并行機(jī)制。因此,編譯器不能確保代碼的共享部分被適當(dāng)?shù)乇Wo(hù),這使得它難以建立并行程序。這些問(wèn)題在LabVIEW中則不存在。甚至一個(gè)初學(xué)者都可以設(shè)計(jì)一個(gè)高度并行的應(yīng)用程序,而且無(wú)需額外的努力或知識(shí)就可以自動(dòng)地將它擴(kuò)展至多個(gè)緊密連接的處理器。數(shù)據(jù)流一直被倡導(dǎo)為一個(gè)用于商業(yè)應(yīng)用程序的設(shè)計(jì)工具。它被改進(jìn)為一種備選的計(jì)算機(jī)體系結(jié)構(gòu)來(lái)避免馮諾依曼(von Neumann)瓶頸。數(shù)據(jù)流分析是優(yōu)化編譯器的核心。為什么應(yīng)用程序不使用數(shù)據(jù)流?一個(gè)數(shù)據(jù)流的自然表示是一個(gè)圖形或圖表,因此在鼠標(biāo)和計(jì)算機(jī)圖形產(chǎn)生之前,它幾乎是不實(shí)際的;一個(gè)數(shù)據(jù)流圖的文本描述與對(duì)一個(gè)街道地圖的文本描述類似,既耗時(shí)又容易產(chǎn)生錯(cuò)誤。但是現(xiàn)在,計(jì)算機(jī)速度不斷加快,存儲(chǔ)容量不斷增長(zhǎng),計(jì)算機(jī)屏幕不斷加大,直接進(jìn)行交
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省宣城市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版階段練習(xí)(下學(xué)期)試卷及答案
- 國(guó)外買房合同范本
- 加工夾具合同范本
- 視頻審判合同范本
- 消防行業(yè)安全管理制度與風(fēng)險(xiǎn)管控
- 內(nèi)蒙古烏蘭察布市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版能力評(píng)測(cè)(上學(xué)期)試卷及答案
- 高校辯論賽活動(dòng)方案
- 公共交通監(jiān)控系統(tǒng)SIS方案設(shè)計(jì)
- 大學(xué)生課外實(shí)踐服務(wù)制度
- 商業(yè)綜合體綠化施工方案
- 鐵路物資管理模擬考試試題
- 初中歷史課堂教學(xué)如何體現(xiàn)學(xué)生的主體地位
- 部編版三年級(jí)上冊(cè)語(yǔ)文課件-習(xí)作六:這兒真美---(共19張PPT)部編版
- 2020湖南湖南省建筑施工開(kāi)工安全生產(chǎn)條件承諾書
- 《白內(nèi)障》PPT課件.ppt
- 先進(jìn)先出(FIFO)
- 2020年四年級(jí)上冊(cè)語(yǔ)文素材-全冊(cè)課文梳理(1-27課)-人教(部編版)全冊(cè)可修改打印
- 汽輪機(jī)本體檢修規(guī)程
- 檔案數(shù)字化實(shí)施說(shuō)明及報(bào)價(jià)表
- 翻板濾池設(shè)計(jì)計(jì)算
- 紅樓夢(mèng)1——40回考點(diǎn)梳理
評(píng)論
0/150
提交評(píng)論