LabVIEW-TCP/IP資料傳輸

更新於 發佈於 閱讀時間約 3 分鐘

LabVIEW做最基本的TCP/IP資料傳輸和可能遇到的問題處裡

準備兩個VI, 分別是傳輸端(TX)和接收端(RX)

流程是: TX先啟動等待連線-->RX建立連線-->TX送出資料-->RX接收資料-->結束

 

詳細說明如下:

傳輸端利用TCP listen來建立一個listner(或server)等待接收端連線

連線建立後, 用TCP write將資料字串送出

其中TCP listen的Service name接點其實是非必要的, 除非把port設成0讓程式隨機設定

另外TCP listen僅能提供一組連線, 如果要建立多組連線需使用TCP Create Listener

搭配TCP Wait On Listener

raw-image

 

接收端(RX)的部份用TCP Open Connection來建立連線

連線成功後用TCP Read來接收TX傳出的資料

Remote port接點可以選擇輸入特定port或者是service name

取決於TX端的設定

輸入listner IP是必要的, 這邊用本機伺服器127.0.0.1來測試

用localhost也是可以, 但他是不通過網卡傳輸

也有可能因為變更過系統host文件而不是127.0.0.x

raw-image

 

資料傳送接收的部份

可以看到不是直接一個指令就把資料處理掉

當然我們可以跟範例一樣隨便設定一個數字為byte to read

但這樣連續傳輸時就會讀到不正確的字串

為了精準的傳送接收正確大小的資料, 避免接收過多或過少

TX端傳送前我們用string length先取得字串長度, 會得到型態是 I32的數字

再把數字casting成字串,放在要傳送的資料前先傳出

 

RX接收時先讀取4個Byte的資料, casting回 I32就是正確的資料長度

4個Byte是因為 I32的儲存空間就是32bits=4Bytes

I32數值範圍可以到2,147,483,647足夠應付一般的一次傳輸量了

程式碼裡的數值常數"4"資料型態就是 I32

所以他除了設定第一次讀取的byte數外,同時還有設定casting型態的功用

=================================

raw-image

在做傳輸測試時偶而會出現像這樣記憶體不足的錯誤訊息

這不是因為硬體的記憶體不足, 而是程式在處理byte to read的數字時出了錯

導致讀取資料需要的記憶體太大

 

找到的解法有兩個

第一個是在兩次傳輸/接收間放一個delay指定, 設為0ms也可以

這個方法實際測試結果是可以改善, 但無法完全根除問題

raw-image

 

另一個解法是TX端傳輸長度和傳輸資料本體合併成一筆資料一次傳出

反正RX端有正確資料長度就可以分別正確讀出兩筆資料

目前用這個解法完全不會再出現記憶體不足的錯誤訊息

raw-image

 

另外在用兩台電腦做連線測試時發現有些電腦會有無法連接的狀況

推測是防火牆或某些網路設定被關閉造成

目前我是把共享檔案和印表機選項啟用就可以了

接下來要用TCP/IP功能製作LabVIEW多人連線通訊系統 (AKA 聊天室)

 

avatar-img
6會員
63內容數
ktest
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
※ 介面是什麼: 介面:人跟電腦互相溝通的管道。 使用者與電腦互相溝通的方式稱為使用者的介面。 ※ 使用者的介面類型: 文字使用者介面:CUI。使用純鍵盤來下指令溝通,對象是伺服器(SERVER)。 圖型使用者介面:GUI。使用圖像去做點擊或拖拉的方式。 ※ 命令列(Command li
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
這篇文章將介紹在vCenter中新增網路和VMkernel介面的操作步驟,包括進入設定、新增標準交換器群組、命名交換器、觀察狀態、新增VMkernel介面、命名和啟用服務等。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
※ 介面是什麼: 介面:人跟電腦互相溝通的管道。 使用者與電腦互相溝通的方式稱為使用者的介面。 ※ 使用者的介面類型: 文字使用者介面:CUI。使用純鍵盤來下指令溝通,對象是伺服器(SERVER)。 圖型使用者介面:GUI。使用圖像去做點擊或拖拉的方式。 ※ 命令列(Command li
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
這篇文章將介紹在vCenter中新增網路和VMkernel介面的操作步驟,包括進入設定、新增標準交換器群組、命名交換器、觀察狀態、新增VMkernel介面、命名和啟用服務等。