LabVIEW開發(fā)TCP網(wǎng)絡(luò)通訊程序1
LabVIEW開發(fā)TCP網(wǎng)絡(luò)通訊程序1
雖然創(chuàng)建“服務(wù)器”的想法可能有一定的神秘感,但其實沒有太多的意義–至少在使用LabVIEW時是這樣。該過程的基本假設(shè)是,有一些東西監(jiān)視計算機的網(wǎng)絡(luò)接口,等待客戶端應(yīng)用程序請求TCP/IP連接。在網(wǎng)絡(luò)術(shù)語中,這個“東西”被稱為“偵聽器”,因為偵聽以太網(wǎng)接口進行連接。然而,給定的偵聽器不僅僅是偵聽任何連接嘗試,而是網(wǎng)絡(luò)標(biāo)準(zhǔn)定義了在單個接口上創(chuàng)建多個“端口”的能力,然后將特定端口與特定應(yīng)用程序相關(guān)聯(lián)。因此,當(dāng)用戶創(chuàng)建偵聽器時,用戶必須告訴它要監(jiān)視的端口。
理論上,端口號可以是任何U32值,但現(xiàn)有標(biāo)準(zhǔn)指定了某些端口號上預(yù)期的流量類型。例如,默認情況下,端口80或8080上應(yīng)有HTTP連接,F(xiàn)TP的默認端口21和LabVIEW默認偵聽端口3363。用戶所要做的就是選擇一個不用于計算機上其他任何內(nèi)容的數(shù)字。要在LabVIEW中創(chuàng)建偵聽器,有一個內(nèi)置函數(shù)TCP?Create?Listener,它需要一個端口號,并返回對它創(chuàng)建的偵聽器的引用。但是果用戶選擇其他應(yīng)用程序已經(jīng)在偵聽的端口,則返回錯誤。
創(chuàng)建偵聽器后,用戶必須通過調(diào)用內(nèi)置函數(shù)TCP?Wait?On?Listener來告訴它開始偵聽。顧名思義,它會等到在關(guān)聯(lián)的端口上建立連接,不過用戶通常需要指定超時。當(dāng)此函數(shù)看到并建立傳入連接時,它會輸出特定于該特定連接的新引用。然后,連接處理程序VI可以使用該引用來管理與該特定遠程設(shè)備或進程的交互。
最后,完成工作后,通過關(guān)閉偵聽器引用TCP?Close?Connection和已打開的所有連接引用來終止服務(wù)器。把這三個階段放在一起,就是如下所示的內(nèi)容。

這個簡單的代碼創(chuàng)建一個偵聽器、等待連接、為該連接提供服務(wù)(它從中讀取4個字節(jié)),然后退出。雖然這段代碼原理沒問題,但并不是太實用。例如,只等待一個連接然后退出的服務(wù)器有什么用?值得慶幸的是,擴展此示例并不難。用戶所要做的就是將其變成一個狀態(tài)機。
一步一個腳印---事緩則圓
眾所周知,狀態(tài)機內(nèi)置超時事件,因此以下狀態(tài)包括指向下一個要執(zhí)行的狀態(tài)的移位寄存器,以及第二個帶有代碼在進入該狀態(tài)之前將施加的延遲的寄存器。這里有一個狀態(tài)圖,顯示了流程的基本流程。

執(zhí)行從狀態(tài)開始。此時的主要工作是創(chuàng)建TCP偵聽器。接下來耐心地等待連接,在短時間內(nèi)循環(huán)回自身。只要沒有建立連接,這種狀態(tài)就會一遍又一遍地執(zhí)行。這一系列的短暫等待為其他事件(如關(guān)閉服務(wù)器的事件)提供了執(zhí)行的機會。
建立連接后,程序?qū)⑦\行該狀態(tài)。由于狀態(tài)機盡快返回等待新連接至關(guān)重要,因此該狀態(tài)會動態(tài)啟動可重入連接處理程序VI,并立即轉(zhuǎn)換回該狀態(tài)。
狀態(tài)機繼續(xù)在最后兩種狀態(tài)之間運行,直到請求服務(wù)器停止。此時,代碼將轉(zhuǎn)換為釋放偵聽器并停止?fàn)顟B(tài)機的狀態(tài)。
未完待續(xù)
需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復(fù)制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個問題就不用加微信咨詢了。有關(guān)LabVIEW編程、LabVIEW開發(fā)等相關(guān)項目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。