网口通讯(3) 您所在的位置:网站首页 labview多个循环并行 网口通讯(3)

网口通讯(3)

2024-07-05 16:10| 来源: 网络整理| 查看: 265

网口通讯(3)——LabVIEW平台下的TCP与UDP通讯

文章目录 网口通讯(3)——LabVIEW平台下的TCP与UDP通讯一、基础了解1、HTTP报文格式2、TCP/UDP协议2.1 基本概念2.2 数据格式与通信 二、LabVIEW平台使用TCP通讯范例程序解读延伸思考 Reference 引言:

网口通讯包含较多层次的协议,而LabVIEW已经对TCP/UDP协议通信底层的具体实现方法进行了高度的封装,因此对于LabVIEW使用者而言,只需简单了解TCP/UDP协议的规则,以便同其他平台交互或同人沟通,而在编程角度无需过多关心复杂的通信原理,即可快速建立LabVIEW平台下的通讯连接。

一、基础了解 1、HTTP报文格式

报文概念

报文(message)是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不一,并在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,即报文头。

传输原理及过程

利用TCP/IP进行网络通信时,数据包会按照分层顺序与对方进行通信。 发送端从应用层往下走,接收端从链路层往上走。 从客户端到服务器的数据,每一帧数据的传输的顺序都为: 应用层->运输层->网络层->链路层->链路层->网络层->运输层->应用层。

以一个HTTP请求的传输为例,请求从HTTP客户端(如浏览器)和HTTP服务端应用的传输过程,如下图所示:

img

数据封装和分用

数据通过互联网传输的时候,需要加上特定标识,该过程即为数据的封装。 在数据使用的时候需去掉特定标识,去掉特定标识的过程就叫做分用。

TCP/IP协议的数据封装和分用过程,大致如下图所示:

img

在数据封装时,数据经过每个层都会打上该层特定标识,添加上头部。

数据封装和分用的过程大致为: 发送端每通过一层会增加该层的首部,接收端每通过一层则删除该层的首部。

原文链接:https://blog.csdn.net/stone_tmp/article/details/118386484

2、TCP/UDP协议 2.1 基本概念

TCP (Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,提供超时重发,丢弃重复数据,检验数据,流量控制、全双工操作和多路复用等功能,保证数据能从一端传到另一端。同时,具有效率低,占用系统资源高的问题。

UDP(User Datagram Protocol)协议是用户数据包协议,是一个简单的面向数据报的传输层协议,不提供可靠性,只是把应用程序传给IP层的数据报发送出去,不能保证它们能到达目的地,因而传输速度快。 如果需要传输可靠性,则必须在用户应用程序中实现。

可见,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

TCP支持的应用协议主要有:Telnet、FTP、SMTP等。

UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系 统)、TFTP(通用文件传输协议)等。

2.2 数据格式与通信

(1)TCP协议

数据帧格式如下图:

img

TCP连接是需要客户端和服务端达成三个信息的共识:

Socket:IP地址 + 端口号序列号:用来解决乱序问题窗口大小:流量控制

通信建立过程

TCP连接的建立时,双方需要经过三次握手。

img

TCP断开连接时,双方需要经过四次分手。

img

详细过程及相关疑问可参考:https://blog.csdn.net/stone_tmp/article/details/118386484 / 【网络通信】TCP的通信过程 - 知乎 (zhihu.com)/ TCP/IP协议详解 - 知乎 (zhihu.com)/【TCP通信】原理详解与编程实现(一)_如何使用tcp-CSDN博客

(2)UDP协议

UDP使用具有最小协议机制的简单无连接通信模型,是基于IP的简单协议,提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号,因而应用程序可以通过增加确认和重传机制,自己实现可靠的数据传输。

数据格式如下:

在这里插入图片描述

16位UDP长度表示整个数据报(UDP首部+UDP数据)的长度如果校验和出错,就会直接丢弃(UDP校验首部和数据部分)

UDP只要知道对端的IP和端口号就可以发送,不需要实现建立连接。

应用层交给UDP多长的报文, UDP将原样发送既不会拆分,也不会合并,不能够灵活的控制读写数据的次数和数量。

UDP存在接收缓冲区,但不存在发送缓冲区 但是这个缓冲区不能保证UDP报文的顺序和发送UDP报的顺序一致,如果缓冲区满了后边的UDP数据报就会被丢弃。

UDP接收缓冲区和丢包问题:https://blog.csdn.net/ljh0302/article/details/49738191

UDP也是全双工通信。 UDP协议首部中有一个16位的大长度. 也就是说一个UDP能传输的报文长度是64K(包含UDP首部)。如果我们需要传输的数据超过64K, 就需要在应用层手动的分包发送, 并在接收端手动拼装。

二、LabVIEW平台使用TCP通讯

LabVIEW平台提供了多种方法实现网络通信,如可以通过TCP协议、UDP协议、DataSocket技术、甚至远程面板通信技术等方式进行通信。而在工控领域,一般常基于TCP/UDP协议进行网口通讯控制,为此,对LabVIEW平台下先基于TCP/UDP协议的通讯方法进行说明记录。

函数选板

在LabVIEW中,已封装好TCP相关的操作函数,基于这些函数实现通讯。

img

对范例进行解析学习是快速理解和掌握LabVIEW使用方法的有效途径。

范例程序解读

服务端程序框图如下:

在这里插入图片描述

服务器端首先建立侦听,自主设定端口号和超时时间,等待客户端数据请求(程序运行后会在此等待)当客户端打开连接并与服务器成功建立联系后,生成连接ID(即图中绿色连接线信号)服务器进入循环,周期性向客户端发送信息,并首先发送数据长度,再发送数据内容,同时每次读取来自客户端的断开信号数据(详情可见图示)当条件触发后,循环停止,关闭连接,并清除报警错误,程序退出运行

客户端程序框图如下:

在这里插入图片描述

客户端配置请求地址及端口,并发送TCP连接请求当客户端打开连接并与服务器成功建立联系后,生成连接ID,并进入数据读取循环数据读取时,对应服务器端程序,每次先读取数据包长度(4字节为I32数据类型长度),超时时长为1s,判定数据不为空,再读取对应长度的数据包内容超过1s没有有效数据或主动停止读取数据,则触发停止条件,退出循环在关闭TCP前发送一任一标志信号给服务器,告知客户端已停止若是因无数据读取,表明服务器端中止发送或连接断开,程序为自动停止,并弹出服务器关闭对话框

服务器端面板界面如下:

在这里插入图片描述

客户端面板界面如下(对比可见数据一致,收发可靠):

在这里插入图片描述

可就上述解析过程自行对比研究

解析收获

程序作用

实现基于LabVIEW的TCP协议下数据可靠收发

学到知识点

LabVIEW下的TCP数据收发用法规则,总结流程如下

服务器通过主机名或者IP地址与端口号,建立侦听,等待客户端连接客户端根据主机的IP地址和端口号发出连接请求服务器与客户端建立连接后,通过读/写函数进行TCP数据通信关闭连接

各个子VI简单用法

侦听VI:用于本地主机,省略了地址,只需要端口号和超时设置(-1为永不超时)

写入VI:必须采用**字符串**格式数据

读取VI:需要设置读取字节数,输出相应大小的数据

打开连接:设置远程请求地址和端口(端口号必须对应服务器端保持一致且不为0)

关闭连接:完成数据收发需要关闭,并记得清除尾端错误信息

若服务器和客户机在同一台机子上运行时,客户端框图程序中输入的服务器地址可以设置为下面任意一个值:“localhost”、“127.0.0.1”、空字符串或者当前计算机的名称。

范例中通过先发送数据总字节数,再发送数据正文(读取也是)的方式保证数据准确可靠传输

提供了一种错误处理方法,保障连接中断后程序自行停止无报错

延伸思考 根据客户端程序在关闭连接时的标志反馈设计可以发现 实际数据传输过程中若明确数据大小,可直接进行进行数据读取,而不必先发送数据包大小(数据较小且长度固定时比较适用)同一个程序除单独读取或发送命令外,也可以同时作为对应的发送方或读取方,即一旦连接建立,同一程序或单端,均是“可读可写”的,体现了TCP的双工属性 对比协议内容理解程序逻辑: LabVIEW将TCP通信过程简化为打开连接(分为服务器等待连接和客户端请求连接两个部分)、传输数据和关闭连接三个过程,分别对应TCP协议中的握手、通信和分手LabVIEW大大简化了握手和分手流程,使用户只需使用封装好的连接或关闭VI即可通信过程中无需考虑或设置帧头,只需设置好地址与端口即可,说明至少在范例的标准模式下,子VI内部已设置好序号、确认号和标志位等,用户可专注于数据传输 循环中不同延时时间对数据传输的影响放到后边研究

未曾深入研究代码底层逻辑的个人拙见,仅供参考

Reference 太棒了!TCP/IP协议 (图解+秒懂+史上最全)_图解tcpip-CSDN博客【TCP通信】原理详解与编程实现(一)_如何使用tcp-CSDN博客TCP/IP协议、HTTP协议、SOCKET通讯详解 - jking10 - 博客园 (cnblogs.com)网络通信总结(TCP/IP协议、HTTP协议等) - 知乎 (zhihu.com)【网络通信】TCP的通信过程 - 知乎 (zhihu.com)TCP/IP协议详解 - 知乎 (zhihu.com)TCP和UDP详解(非常详细)_tcpipudp-CSDN博客在LabVIEW平台中,你会编程实现TCP数据通信么? (baidu.com)LabVIEW-TCP通信-百度经验 (baidu.com)【LabVIEW开发】如何使用LabVIEW进行TCP通信? - 简书 (jianshu.com)LabVIEW中的基本TCP/IP通信 - NI【LabVIEW开发】如何使用UDP协议进行通信 - 简书 (jianshu.com)labview进行tcp通信设计简要教程 - 蜂鸟0256 - 博客园 (cnblogs.com)LabVIEW编程实例:如何通过TCP协议进行数据通信_labwindows的tcp-CSDN博客干货来了,跟我学LabVIEW中如何通过网口发送参数命令包 (baidu.com)

les/4546393.html)

LabVIEW编程实例:如何通过TCP协议进行数据通信_labwindows的tcp-CSDN博客干货来了,跟我学LabVIEW中如何通过网口发送参数命令包 (baidu.com)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有