LabVIEW编程实例:如何通过TCP协议进行数据通信
对于网络通信来说,LabVIEW平台本身提供了多种方法加以实现,如可以通过TCP协议、UDP协议、DataSocket技术、甚至远程面板通信技术等方式进行通信。
下面通过一个简单的例子,演示在LabVIEW中如何通过TCP协议实现两个程序之间的数据通信功能。
实例说明
编写两个程序,分别为服务器端程序和客户端程序。其中,服务器端程序开始运行时,处于等待客户端连接的状态中,一旦有客户端成功连接,则向客户端发送带有时间信息的字符串“I`m sever!”;客户端程序与服务器成功建立连接后,则读取服务器端发送的信息,并在前面板上显示出来,以此来实现服务器端与客户端的通信。
编程思路
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。使用LabVIEW基于TCP协议编写通信软件时,一般其整个传输过程如下:
(1)服务器通过主机名或者IP地址与端口号,建立侦听,等待客户端连接;
(2)客户端根据主机的IP地址和端口号发出连接请求;
(3)服务器与客户端建立连接后,通过读写函数进行TCP数据通信;
(4)关闭连接。
在LabVIEW中,提供了一组专门的相关TCP的操作函数,在后面板程序框图中进入函数®数据通信®协议中选择TCP可以进入TCP子模板,主要节点函数如下图所示。
使用上面的函数,下面分别给出服务器端程序和客户端程序的具体实现方法。
服务器端程序
服务器端前面板如下图所示,其中,“端口号”设置服务器程序的端口,该值即为客户端程序的要连接的服务器程序的端口标识值;“待发送字符串”为发送给客户端程序的内容,该处设置为“I`m sever!”。
服务器端程序框图如下:
在程序框图中,首先利用“TCP侦听”函数创建一个侦听,该函数需要2个关键参数:端口号和超时时间(单位为ms)。该示例超时时间设为-1表示永远不超时,即无限等待下去直到有一个客户端程序连接。该函数运行后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。利用“格式化日期/时间字符串”函数取得当前的系统日期及时间,然后与待发送的字符串连接后得到实际发送的消息内容,利用“写入TCP数据”函数发送到客户端程序即可。该例中采用了两个“写入TCP数据”节点函数发送数据,首先发送消息内容的字节数(此处使用“强制类型转换”函数将“I32”类型的长度数据转换为字符串),其次发送实际的内容字符串数据。这种先发字符串长度再发字符串内容的发送方式有利于客户端正确的接收数据。最后调用“关闭TCP连接”函数,退出程序。
客户端程序
客户端前面板如下图所示,其中,“端口号”即为服务器端程序设置的端口标识值;“IP地址”设置服务器端程序的IP地址,“已接收字符串”显示服务器端程序发送的消息及收到该消息时的时间信息。
客户端端程序框图如下:
在程序框图中,首先调用“打开TCP连接”函数建立与服务器端程序的连接,该函数需要2个关键参数:IP地址和端口号,即服务器端程序所在的主机的IP地址及服务器端程序设置的端口号。该函数与服务器端程序正确建立连接后返回一个“连接ID”参数,该参数是其它TCP相关操作函数的输入参数接口。与服务器端框图程序相对应,该程序也采用了2个“读取TCP数据”节点函数读取服务器端程序发送的数据,与“写入TCP数据”节点函数不同的是,该函数还需要一个参数:要读取的字节数。由于服务器端程序先发送的是总字节信息,因此客户端首先读取接收消息内容的字节信息,输入I32类型的常数“4”,表示读取4个字节的内容,然后将读取的字符串内容使用“强制类型转换”函数转换为“I32”类型的字节值,将字节值作为第2个“读取TCP数据”节点函数的读取的字节值参数,然后将实际的消息内容读出显示到前面板的“已接收字符串”控件上即可。这种方法是TCP通信中常用的方法,可以保证在不丢失数据的前提下有效地发送或接收数据。最后调用“关闭TCP连接”函数,退出程序。
总结
通过上面的程序可以看出,由于LabVIEW对TCP协议通信底层的具体实现方法进行了高度的封装,因此使用这些函数构建复杂、灵活的网络测试系统时,相对于其它高级编程语言,将会大大降低编程人员的开发难度,提高编程效率,这也是图形化编程语言的高效、简洁的魅力所在。
另外,需要说明的是:
(1)采用TCP节点通信时,在服务器端框图程序中必须指定网络通信端口,客户端也要指定相同的端口,才能与服务器之间进行正确的通信,如上面例子中指定端口号为1800。在一次通信连接建立后,就不能改变端口的值了。如的确需要改变端口值,则必须首先断开连接,才能重新设置新的端口值。
(2)在客户端要指定服务器的IP地址才能与服务器之间建立连接。若服务器和客户机在同一台机子上运行时,客户端框图程序中输入的服务器地址可以设置为下面任意一个值:“localhost”、“127.0.0.1”、空字符串或者当前计算机的名称。
如果你觉得这篇文章对你有用的话,收藏 +点赞 吧。
LabVIEW编程实例:如何使用UDP协议进行数据通信
UDP协议
UDP(User Datagram Protocol,用户数据报协议)同TCP协议类似,它也是LabVIEW编程中一种常用的数据通信方式。与TCP不同的是,它是一种无连接模式协议,当数据内容发送之后,自己是无法得知对方是否已经安全完整的接收到了所有的数据信息。这意味着UDP提供的不是面向连接的、可靠的数据传输,而是面向操作的、不可靠的数据传输,应用程序必须自己确定信息是否完全正确的到达目的地。
但是UDP也有明显的优点,由于它不属于连接型协议,而是采用广播的方式来发布数据,因而数据传输时资源消耗小,处理速度快,特别适合于一点对多点的通信情况。所以通常音频、视频等传输时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大的影响。
在LabVIEW软件中提供了UDP的相关操作函数,对这种协议的实现进行了高度集成,用户通过简单调用就可以实现UDP协议的网络通信。在程序框图的函数模板中选择函数-->数据通信-->协议中选择UDP可以进入UDP子模板,主要节点函数如下图所示:
前面一篇文章已经讲解了TCP协议通信的方法,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协议通信的例子,进行对比练习,更有助于两种不同协议的编程理解。
本文由编码那些事原创,请关注 +转发 +收藏 +点赞 ,带你一起长知识!
相关问答
labview如何用tcp实现telnet通讯?
LabVIEW下面互连接口,VISA里面就有模块,初始化串口,写入串口、读取串口等,按操作流程做就可以。LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制...L...
S7-300如何通过串口与LABVIEW通讯?
S7-300是PLC,1.建立硬件链接,工控机方使用串口PCI卡与PLC端串口连接2.编写PLC端T型图程序3.找LV自带的OPC驱动程序,做上位机程序多了别问了,自己查...
labview怎么与设备的网口通讯?
在LabVIEW中,可以使用TCP/IP或UDP协议来与设备的网口进行通讯。首先,在LabVIEW中创建一个TCP/IP或UDP连接,然后使用相应的函数来发送和接收数据。可以使用“T...
使用labview与i2c怎么通信?
在LabVIEW中,可以使用NII2C工具包来通过I2C总线与设备通信。首先需要创建一个NII2C对象,并设置它的地址和速率。然后,使用读取和写入I2C数据的VI来与设备进...
labview串口485通讯指令怎么写?
labview串口485通讯指令编写方法第一步:先设置串口参数,确保和被测试设备串口参数一致。第二步:打开串口,如果打开失败,检查串口是否被占用或者串口号是否...
labview怎么与单片机通信?
可通过以下步骤实现labview和单片机的wifi通信:1、labview搜索安装于上位机,单片机是下位机;2、上位机是电脑,下位机是单片机,两个设备都能够接入wifi无线...
labview如何检测网络是否联通?
在LabVIEW中,可以使用ping命令来检测网络是否联通。使用“SystemExec.vi”模块,可以在LabVIEW中执行ping命令,并检测返回结果。如果返回结果为“Replyfrom.....
labview串口通信同时数据采集?
1.你的程序有些问题,你不能每次都打开串口,在循环中,这样会导致串口不断的开启和关闭。2.数据接收时,只有长度大于0,才去读取信息。不要每次都强行读取。3...
关于labview和单片机通过网口(网线接口)进行通信的問...
这两个IP就能完成通讯了。首先你要确定labview2010你所有的组件都装全了,有3个部分,multisim可以不装,labview和NIE..的组件,这个必须装其次,重点不在你激活...
labview怎么通过modbus和plc通讯?
在LabVIEW中通过Modbus与PLC进行通信,可以使用NI的Modbus库或第三方库来实现。下面是一般的步骤:1.准备硬件:首先,连接您的PLC设备和计算机。通常使用串口...