LabVIEW编程实例:如何使用UDP协议进行数据通信

UDP协议

UDP(User Datagram Protocol,用户数据报协议)同TCP协议类似,它也是LabVIEW编程中一种常用的数据通信方式。与TCP不同的是,它是一种无连接模式协议,当数据内容发送之后,自己是无法得知对方是否已经安全完整的接收到了所有的数据信息。这意味着UDP提供的不是面向连接的、可靠的数据传输,而是面向操作的、不可靠的数据传输,应用程序必须自己确定信息是否完全正确的到达目的地。

但是UDP也有明显的优点,由于它不属于连接型协议,而是采用广播的方式来发布数据,因而数据传输时资源消耗小,处理速度快,特别适合于一点对多点的通信情况。所以通常音频、视频等传输时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大的影响。

在LabVIEW软件中提供了UDP的相关操作函数,对这种协议的实现进行了高度集成,用户通过简单调用就可以实现UDP协议的网络通信。在程序框图的函数模板中选择函数-->数据通信-->协议中选择UDP可以进入UDP子模板,主要节点函数如下图所示:

前面一篇文章已经讲解了TCP协议通信的方法,这儿再通过一个例子看下在LabVIEW中如何使用UDP协议进行数据通信。

示例说明

该例分为两部分程序:发送端程序和接收端程序,两者采用UDP协议进行通信,前者为连续产生一组随机数据发送给后者,后者将接收到的数据在前面板上进行连续显示。

发送端程序设计

发送端程序前面板设计如下图所示,“远程地址”设置要发送的程序即接收端程序所在的远程主机IP地址,“远程端口”设置接收端程序的端口标识值;“本地端口”设置发送端程序的端口标识值,“停止”按钮结束程序的运行。

发送端框图程序如下所示:

在程序框图中,首先利用“打开UDP”函数打开“本地端口”控件上指定的端口上的一个UDP套接字,返回一个连接ID参数同,此处本地端口设置为2000。在While循环内部,每隔200ms向接收端程序发送一次波形数据。每次运行时,用For循环产生50个点的随机数数组,将该数组使用“强制类型转换”函数将双精度类型的波形数组转换为字符串,利用“写入UDP数据”函数发送到接收端程序即可。此处,“写入UDP数据”函数必需设置远程接收端程序对应的IP地址和端口号,这是该节点函数发送数据的目的地,前面板上“远程地址”控件是一个字符串类型,使用“字符串至IP地址转换”函数可以得到对应的IP地址,端口号本例设置为2001。点击“停止”按钮,可以退出While循环。最后调用“关闭UDP”函数,退出程序。

接收端程序设计

接收端程序前面板设计如下图所示,“本地端口”为本程序(接收端程序)的端口标识值,“波形”控件连续显示接收到的发送端程序发送的波形数据,“停止”按钮结束程序的运行。

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

在程序框图中,与发送端程序类似,首先调用“打开UDP”函数打开“本地端口”控件上指定的端口上的一个UDP套接字,返回一个连接ID参数,此处本地端口设置为2001。在While循环内部,连续接收发送端程序发送的波形数据并在波形图上显示,最后调用“关闭UDP”函数,退出程序。

此处在While循环内,与服务器端程序相对应,每隔200ms读取一次服务器端程序发送的波形数据。每次读取波形数据时,通过调用“读取UDP数据”节点函数接收波形数据,此波形数据为字符串类型,所以需要调用“强制类型转换”函数转换为双精度类型的一维数组,将该数组送到前面板的“波形”显示控件上进行显示即可。另外,在“读取UDP数据”节点函数中设置超时时间为1000ms,当1000ms内未接收到数据时该函数将返回一个错误信息,利用该错误信息值可以作为退出While循环的条件,当然,直接点击“停止”按钮也可以直接退出循环。

总结

本例演示了在LabVIEW中如何使用UDP协议进行数据通信的方法,大家也可以结合前面文章TCP协议通信的例子,进行对比练习,更有助于两种不同协议的编程理解。

本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190408A08T8000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券