LabVIEW編程示例:如何使用UDP協議進行數據通信

飛來科技  發布時間:2019-11-08 04:04:09

本文關鍵詞:labview udp 傳輸數據

labview udp_labview udp 傳輸數據_傳輸 udp

UDP協議

UDP(User Datagram Protocollabview udp 傳輸數據,用戶數據報協議)同TCP協議類似,它只是LabVIEW編程中一種常用的數據通信手段。與TCP不同的是,它是一種無連接方式協議,當數據內容發送時候,自己是能夠得知他人是否早已安全完整的接收到了所有的數據信息。這意味著UDP提供的不是面向連接的、可靠的數據存儲,而是面向操作的、不可靠的數據存儲,應用程序必須自己確認信息能否完全恰當的抵達目的地。

但是UDP也有顯著的缺點,由于它不屬于連接型協議,而是采取廣播的方法來公布數據,因而數據存儲時資源耗費小,處理速度快,特別適合于一點對多點的通信狀況。所以一般音頻、視頻等存儲時使用UDP較多,因為他們雖然經常丟失一兩個數據包,也不會對接收結果造成太大的影響。

在LabVIEW軟件中提供了UDP的相關操作函數,對這些協議的推動進行了高度集成,用戶借助簡單讀取就可以推動UDP協議的網路通訊。在程序框圖的變量模板中選取函數-->數據通信-->協議中選取UDP可以開啟UDP子模板,主要節點變量如下圖所示:

labview udp_labview udp 傳輸數據_傳輸 udp

048-1

前面一篇文章將要講解了TCP協議通信的方式,這兒再借助一個例子看下在LabVIEW中怎樣使用UDP協議進行數據通信。

示例說明

該例分為兩個別程序:發送端程序和接收端程序,兩者運用UDP協議進行通信,前者為連續形成一組隨機數據發送給前者,后者將接收到的數據在前面板上進行連續顯示。

labview udp 傳輸數據_傳輸 udp_labview udp

發送端程序設計

發送端程序前面板設計如下圖右圖,“遠程地址”設置要發送的程序即接收端程序所在的遠程主機IP地址,“遠程網關”設置接收端程序的網關標識值;“本地端口”設置發送端程序的網關標識值,“停止”按鈕結束程序的運行。

048-2

發送端框圖程序如下所示:

labview udp_傳輸 udp_labview udp 傳輸數據

048-3

在程序框圖中,首先運用“打開UDP”函數打開“本地端口”控件上指定的網關上的一個UDP套接字,返回一個連接ID參數同,此處本地端口修改為2000。在While循環內部,每隔200ms向接收端程序發送一次波形數據。每次運行時,用For循環產生50個點的隨機數數組,將該字段使用“強制類型轉換”函數將雙精度類別的波形數組轉化為字符串,利用“寫入UDP數據”函數發送到接收端程序即可。此處,“寫入UDP數據”函數必需設定遠程接收端程序對應的IP地址和端口號,這是該結點函數發送數據的目的地,前面板上“遠程地址”控件是一個字符串類型,使用“字符串至IP地址轉換”函數可以得到對應的IP地址,端口號本例修改為2001。點擊“停止”按鈕,可以退出While循環。最后調用“關閉UDP”函數,退出程序。

接收端程序設計

接收端程序前面板設計如下圖右圖,“本地端口”為本程序(接收端程序)的網關標識值,“波形”控件連續顯示接收到的發送端程序發送的波形數據,“停止”按鈕結束程序的運行。

labview udp 傳輸數據_labview udp_傳輸 udp

048-4

接收端框圖程序如下所示:

048-5

對一個已經收到fin包的socket讀取read方式,如果接收緩沖區已空,則返回0,這就是常說的表示連接關閉,但第一次對其調用write方法時,如果發送緩沖區沒問題,會返回正確讀取(發送),但發送的輪詢會導致對端發送rst報文,因為對端的socket已經讀取了close,完全關掉,既不發送,也不接收數據。內容:連接好串口以及usb轉串口至手機,下載該程序,打開電源關掉串口調試程序,將寄存器設定為9600,無奇偶校驗,晶振11.0592mhz,發送和接收使用的格式相似,如都使用字符型格式,按復位重啟程序,可以發現接收到“請在發送區輸入任意信息 ”, 然后在發送區發送任意信息,接收區返回相同信息,表明串口收發無誤。3.2 仿真波形本文中設計的集線器是多端口的,可編程器件實現完成后進行了模擬仿真,圖3是無沖突的狀況的仿真波形,集線器將收到的網關1的數據轉發給所有端口,圖中rx_dv_in是端口的載波偵聽/數據有效標志,rxd rmii0是端口0的接收數據,tx en 0ut是網關的發送使能,txd_mii0、txd_rmii2、txd_rmii3是其中3個端口的發送數據。

此處在While循環內,與服務器端程序相對應,每隔200ms讀取一次服務器端程序發送的波形數據。每次抓取波形數據時,通過讀入“讀取UDP數據”節點變量接收波形數據,此波形數據為字符串類型,所以必須讀取“強制類型轉換”函數轉化為雙精度類別的一維數組,將該數組送到前面板的“波形”顯示控件上進行顯示就能。另外,在“讀取UDP數據”節點變量中修改超時時間為1000ms,當1000ms內未接收到數據時該變量將返回一個錯誤信息,利用該出錯信息值可以成為退出While循環的條件,當然,直接點擊“停止”按鈕也可以直接退出循環。

總結

本例演示了在LabVIEW中怎樣使用UDP協議進行數據通信的方式,大家也可以結合上面文章TCP協議通信的事例,進行對比練習labview udp 傳輸數據,更有助于兩種不同協議的編程理解。

本文由編碼那些事原創,請關注+轉發+收藏+點贊,帶你一起長知識!

本文來自互聯網,由機器人自動采編,文章內容不代表本站觀點,請讀者自行辨別信息真偽,如有發現不適內容,請及時聯系站長處理。

    广东快乐十分诈骗