LabVIEW实现UDP通信

news2024/11/28 17:01:36

目录

1、UDP通信原理

2、硬件环境部署

3、云端环境部署

4、UDP通信函数

5、程序架构

6、前面板设计

7、程序框图设计

8、测试验证


本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。

结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系统的快速开发与原型设计,助你从基础到实战,全面掌握物联网开发技能。


开源免费LabVIEW学习专栏分享:

LabVIEW仪器控制专栏:https://blog.csdn.net/m0_38106923/category_11798471.html?spm=1001.2014.3001.5482

LabVIEW开发技巧专栏:https://blog.csdn.net/m0_38106923/category_11616435.html?spm=1001.2014.3001.5482

LabVIEW和单片机(Arduino)专栏:https://blog.csdn.net/m0_38106923/category_11828609.html?spm=1001.2014.3001.5482

LabVIEW工业图像处理与机器视觉实战专栏:https://blog.csdn.net/m0_38106923/category_10963783.html?spm=1001.2014.3001.5482

LabVIEW物联网开发实战专栏:https://blog.csdn.net/m0_38106923/category_12839370.html?spm=1001.2014.3001.5482


本章节将简要阐述UDP通信的基本原理,以工业物联网平台TLINK中云端设备的数据发布设计为对象,阐明互联网环境下UDP客户端应用程序设计的基本方法,以及工业物联网平台TLINK中UDP设备的创建、通信数据帧的构造和测试。

在UDP客户端应用程序设计框架的基础上,将提供数据采集计算机与物联网云端设备之间通信程序实现的完整步骤以及程序运行结果的测试。

项目资源下载:https://download.csdn.net/download/m0_38106923/87404748

1、UDP通信原理

UDP(用户数据报协议)是个简单的数据报传输层协议,用来处理网络中的数据包,它是一个无连接的协议。UDP不保证传输的可靠性,只是把数据报从应用程序传到IP层,但不能保证它们一定能到达目的地。因为UDP在传输数据报前不需要建立连接,也没有超时重发等机制,所以传输速度较快。

UDP通信有以下特点:

  • 每个分组都有完整的目的地址;
  • 发送数据前不需要建立连接;
  • 不检查数据包的顺序,不能保证分组的先后顺序;
  • 不进行分组出错的恢复和重传;
  • 不保证数据传输的可靠性。

在网络质量差的环境下,UDP数据包丢失会比较严重。但由于UDP的特性(非连接型协议,资源消耗小、处理速度快),在传输音频、视频和普通数据时常用UDP,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

使用UDP网络发送数据时要注意:必须在同一个局域网中,且要在一个网段,跨网不能直接通信;互相ping通后才能通信。进行UDP通信时,要明确发送端(有时也叫客户端)和接收端(有时也叫服务器)。基于UDP编写通信软件时,程序设计的基本流程如下图所示。

UDP通信有单播、广播、组播三种模式:

  • 单播用于两个主机之间的端对端通信,即一对一;
  • 广播用于一个主机与整个局域网上所有主机的通信,即一对所有。广播在Internet宽带网上传输是被禁止的,否则容易引发广播风暴。主机发送广播消息时,需要指定目的IP地址(255.255.255.255)和接收者的端口号;
  • 组播(多播)用于一组特定主机的通信,而不是整个局域网上的所有主机,即一对一组。在多播系统中,有一个源点、一组终点,这是一对多的关系。在这种通信中,源地址是一个单播地址,而目的地址是一个组地址。

在IPv4中,组地址是一个D类IP地址,范围从224.0.0.0到239.255.255.255,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址三类。

单播和广播是两个极端,要么实现一个主机的通信,要么实现整个局域网上的主机的通信。

实际情况下,经常需要实现一组特定主机的通信,而不是整个局域网上的所有主机的通信,这就是组播的用途。

2、硬件环境部署

基于UDP的通信程序设计,得保证电脑能连上网(不管是有线还是无线,方式不限)。因为路由器的限制,普通的UDP通信程序只能在局域网里的电脑之间传数据。

但物联网经常要跨大范围、多平台地通信。这可以通过物联网平台来实现——数据采集系统把数据上传到物联网平台,然后其他设备从平台那儿获取数据,这样就能实现物联网,达到数据交换和共享的目的。

只要电脑能上网,还能ping通远程物联网服务器,就可以写基于UDP的数据通信程序了。下图展示的是用路由器连上互联网,实现电脑和TLINK物联网云平台的连接。

这种组网方式靠物联网云平台,能让不同网段的设备之间传数据。在这个例子中,电脑通过家用或办公室的路由器连上互联网,就能访问TLINK物联网平台了。

3、云端环境部署

UDP通信得让客户端和服务器两部分程序都做好,不过为了让系统开发简单点,这里用物联网开发平台来搞UDP服务器的事儿,应用系统开发就可以主要关注UDP客户端啦,这样就能实现一种基于系统集成思想的物联网应用快速、高效开发。在这个例子里面,我们用工业物联网平台TLINK来创建一个UDP的虚拟设备,相关信息看下面的图哦。

这时候,TLINK物联网开发平台就像是个功能齐全的服务器。通常,开发物联网应用的时候,你只需要关注怎么从客户端收集数据,然后连接到TLINK物联网平台,把数据发布上去就行了。

下面是这个向TLINK物联网云平台上传测量数据的UDP通信程序具体能干点啥:

  • 用随机数生成的办法,模拟定时采集两路数据。
  • 能把采集到的数据打包成TLINK自定义数据协议对应的包。
  • 在本地,能用多路信号波形图表展示采集到的数据。
  • 能分别显示系统当前时间、数据采集时间,还有最新采集的两路数据值。
  • 还能用UDP通信技术把数据传到TLINK物联网平台,实现给指定设备更新相关数据。

4、UDP通信函数

在LabVIEW里,你要找UDP串行通信的节点,就在“函数→数据通信→协议→UDP”里头,看下图就知道啦。

UDP通信的主要函数节点和VI以及它们的功能都在下表里。

LabVIEW里设计UDP通信程序挺简单的,拿数据发送来说,最少用“打开UDP”​“写入UDP数据”​“关闭UDP”这3个函数节点,再加上While循环结构,就能连续发送了,看下图。

在实际应用里,你可以在轮询设计模式、事件响应设计模式、状态机设计模式等等里面灵活用这3个节点,实现UDP数据发送。接收UDP数据也差不多,最少也是用那3个节点和While循环,不过大多数情况下,UDP通信的发送和接收数据是并行工作的。

一个典型的UDP并行收发程序框图如下图所示。

5、程序架构

程序将模拟人工控制的数据采集,并把数据上传到云端。当用户点击“开始数据采集”按钮时,程序会按照用户设定的时间间隔不断采集和上传数据。

用户再次点击按钮,程序就会暂停采集和上传,然后再次循环。为了简化程序设计,我们采用了轮询设计模式——在While循环结构中,程序使用条件结构检测前面板上的布尔类控件操作状态和“已用时间”节点状态,并根据检测结果进行处理。

主要检测和处理的状态有:

  • 数据采集按钮操作状态检测:按钮在“开始数据采集”和“暂停数据采集”之间切换。当按钮状态为“真”时,采集数据并上传云端;否则不处理。
  • “已用时间”节点状态检测:检查指定目标时间是否已到。如果已到,开始依次进行数据采集和云端上传。
  • “停止”按钮操作状态检测:检测点击按钮是否导致其值发生改变。如果满足条件,则退出程序。

为了让程序的人机交互效果更好,我们在循环事件处理结构的基础上,添加了顺序结构,将程序分为两个顺序帧。

  • 第一个帧是程序初始化帧,用于完成程序运行前各类控件的初始化;
  • 第二个帧是主程序帧,即前面创建的循环事件处理程序结构,用于实时检测程序中的各类状态,并根据检测结果进行处理。

6、前面板设计

按照以下步骤来完成前面板的控件设置:

步骤1:要设置TLINK平台中UDP服务器的IP地址,就得添加一个字符串类控件,叫“字符串控件”(控件→新式→字符串与路径→字符串控件),然后把标签设为“服务器”。

步骤2:要设置TLINK平台中UDP服务器对应的端口,就得添加一个数值类控件,叫“数值输入控件”(控件→新式→数值→数值输入控件),然后把标签设为“远程端口”,数据类型设为U16。

步骤3:要设置TLINK平台中本机对应的端口,就得添加一个数值类控件,叫“数值输入控件”(控件→新式→数值→数值输入控件),然后把标签设为“本地端口”,数据类型设为U16。

步骤4:要触发数据采集事件,就得添加一个布尔类控件,叫“确定按钮”(控件→新式→布尔→确定按钮),然后把标签设为“采集按钮”,按钮显示文本设为“启动数据采集”。

步骤5:要确定用户结束程序操作,就得添加一个布尔类控件,叫“停止按钮”(控件→新式→布尔→停止按钮),按钮标签和显示文本保持默认值。

步骤6:要显示2路数据采集波形,就得添加一个图形类控件,叫“波形图表”(控件→新式→图形→波形图表)。

步骤7:要显示系统当前时间,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“系统时间”。

步骤8:要显示每一次数据采集时间,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“采集时间”。

步骤9:要显示当前采集的2路数据取值,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“当前数据”。

接下来,要调整各个控件的大小和位置,让操作界面看起来更和谐、友好。最后完成的程序前面板设计结果如下图所示。

7、程序框图设计

步骤1:程序的整体结构分为两帧,第一帧是初始化设置,第二帧是实现主要功能。

创建一个两帧的顺序结构,将第一帧的“子程序框图标签”设为“初始化”,在第一帧中调用“打开UDP”(函数→数据通信→协议→UDP→打开UDP)节点,设置连接参数,实现本地UDP端口的创建和打开;通过局部变量赋值、属性节点调用等方式,实现程序运行初始状态下相关控件的初始化赋值。最后,完成的初始化帧程序子框图设计结果如下图所示。

第二步:在顺序结构里,把第二帧的“子程序框图标签”改成“主程序”,这样能让程序框图更好读懂。

主程序就是“While循环结构+条件结构+移位寄存器”的轮询方式,用来检查程序界面里“数据采集”按钮的动作状态,参照下图。

步骤3:在While循环里,把“采集按钮”控件与条件结构连起来,以便在程序轮询状态下判断是否开始采集数据。

调用“获取日期/时间字符串”节点(函数→编程→定时→获取日期/时间字符串),把“需要秒?”端口设为真,然后调用“连接字符串”节点,把“获取日期/时间字符串”节点的日期和时间字符串用空格连接起来,形成完整的字符串。最后,把结果放到“系统时间”控件上,这样就能实时更新显示了,如下图所示。

步骤4:在“采集按钮”连接的条件结构里,当满足“真”(点击按钮,开始采集)时,用属性节点把“采集按钮”的显示文本改成“停止数据采集”,让一个按钮具备两种功能的操作提示。

为了让程序每隔3秒采集一次数据(采样速率小于1Hz,物联网开发平台会禁用访问设备),我们添加一个“已用时间”节点(函数→编程→定时→已用时间),设置“目标时间”为3秒,并勾选“超过目标时间后自动重置”。

它的输出端口“结束”连接条件结构(函数→编程→结构→条件结构),用来判断目标时间是否到达,从而实现用户点击“启动数据采集”按钮后,程序定时执行后续工作的结构,如下图所示。

步骤5:当“已用时间”节点满足条件结构为“真”(3秒间隔时间到,开始一次数据采集)时,在分支子框图中,我们通过生成随机数来模拟数据采集。

将采集到的两组数据打包成符合TLINK物联网平台创建UDP设备用户协议的数据帧。首先,根据TLINK平台的要求,我们调用“打开UDP”节点(函数→数据通信→协议→UDP→打开UDP),然后按照TLINK定义的数据帧格式,以设备序列号作为前缀,将采集的数值类型转换为字符串类型,接着调用“连接字符串”节点(函数→编程→字符串→连接字符串),构建发送数据帧。

最后,调用“写入UDP数据”节点(函数→数据通信→协议→UDP→写入UDP数据),实现本地采集数据上传物联网平台的功能。

同时,我们还需要调用“捆绑”节点(函数→编程→簇、类与变体→捆绑),将采集的数据封装为簇数据类型,并通过波形图表进行显示。相应的程序子框图如下所示。

步骤6:在“采集按钮”控件连接的假条件结构分支里,创建一个“采集按钮”控件属性节点,将其设置为写入模式,并赋值为“启动数据采集”(这样就可以再次点击按钮开始采集了)。

然后,直接连接左右两边的UDP资源引用和错误信息传递,相关的程序子框图如下所示。

步骤7:为了实现应用程序能比较“优雅”地退出,While循环结构之外,还需完成以下操作。

调用节点“关闭UDP”​(函数→数据通信→协议→UDP→关闭UDP)​,实现UDP通信中资源引用的释放。

调用节点“清除错误”​(函数→编程→对话框与用户界面→清除错误)​,采取简单、直接的方式清除程序执行过程中出现的错误。

至此,完整的基于UDP通信技术的物联网平台采集数据上传程序全部完成,对应的完整程序框图如下图所示。

8、测试验证

点击工具栏上的“运行”按钮,测试程序功能。

点击“启动数据采集”按钮,你会发现每3秒钟就会采集一次数据,波形图表中会显示两路数据的波形。系统时间、采集时间、当前数据都能正确显示,结构如下图所示。

此时,进入TLINK物联网平台用户账号对应的监控中心,你会发现本地采集的数据已经按预期上传到云端,如下图所示。

物联网平台创建UDP设备实时数据显示结果与本地采集数据完全一致,这说明在物联网应用中,传统的互联网通信技术中的UDP通信仍然有其地位。使用LabVIEW可以非常轻松地建立与物联网云平台的UDP连接,实现本地采集数据的物联网云平台上传。

项目资源下载:https://download.csdn.net/download/m0_38106923/87404748
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java——Spring MVC的工作流程

Spring MVC的工作流程是基于模型-视图-控制器(MVC)设计模式的一个典型实现,以下是其主要工作流程步骤: 客户端请求提交: 用户通过浏览器向服务器发送请求,该请求首先到达Spring MVC的前端控制器DispatcherS…

带有悬浮窗功能的Android应用

android api29 gradle 8.9 要求 布局文件 (floating_window_layout.xml): 增加、删除、关闭按钮默认隐藏。使用“开始”按钮来控制这些按钮的显示和隐藏。 服务类 (FloatingWindowService.kt): 实现“开始”按钮的功能,点击时切换增加、删除、关闭按钮的可见性。处…

【编译原理】词法、语法、语义实验流程内容梳理

编译原理实验有点难,但是加上ai的辅助就会很简单,下面梳理一下代码流程。 全代码在github仓库中,链接:NeiFeiTiii/CompilerOriginTest at Version2.0,感谢star一下 一、项目结构 关键内容就是里面的那几个.c和.h文件。…

Linux介绍与安装指南:从入门到精通

1. Linux简介 1.1 什么是Linux? Linux是一种基于Unix的操作系统,由Linus Torvalds于1991年首次发布。Linux的核心(Kernel)是开源的,允许任何人自由使用、修改和分发。Linux操作系统通常包括Linux内核、GNU工具集、图…

MFC图形函数学习12——位图操作函数

位图即后缀为bmp的图形文件,MFC中有专门的函数处理这种格式的图形文件。这些函数只能处理作为MFC资源的bmp图,没有操作文件的功能,受限较多,一般常作为程序窗口界面图片、显示背景图片等用途。有关位图操作的步骤、相关函数等介绍…

12.Three.js纹理动画与动效墙案例

12.Three.js纹理动画与动效墙案例 在Three.js的数字孪生场景应用中,我们通常会使用到一些动画渲染效果,如动效墙,飞线、雷达等等,今天主要了解一下其中一种动画渲染效果:纹理动画。下面实现以下动效墙效果&#xff08…

SJYP 24冬季系列 FROZEN CHARISMA发布

近日,女装品牌SJYP 2024年冬季系列——FROZEN CHARISMA已正式发布,展现了更加干练的法式风格。此次新品发布不仅延续了SJYP一贯的强烈设计风格和个性时尚,更融入了法式风情的干练元素,为消费者带来了一场视觉与穿着的双重盛宴。  …

无人机产业发展如何?如何进行产业分析?

▶无人机产业发展现状:高速增长 1.市场规模和增长趋势: 全球无人机市场规模在2021年约为256亿美元,同比增长14%。中国民用无人机市场规模在2021年达到869.12亿元,显示出市场的快速增长。 预计到2029年,中国无人机市…

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

DVWA靶场——File Inclusion

File Inclusion(文件包含)漏洞 指攻击者通过恶意构造输入,利用应用程序错误的文件包含机制,导致程序包含并执行未经授权的本地或远程文件。这类漏洞广泛存在于Web应用程序中,尤其是在那些允许用户提供文件路径或URL的地…

Ubuntu下用Docker部署群晖系统---Virtual DSM --zerotier实现连接

Ubuntu下用Docker部署群晖系统—Virtual DSM --zerotier实现连接 1. Docker 安装 安装最新docker curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo docker run hello-world2.docker-compose 安装 sudo pip install docker-compose测试安装是否成功…

神经网络(系统性学习四):深度学习——卷积神经网络(CNN)

相关文章: 神经网络中常用的激活函数神经网络(系统性学习一):入门篇神经网络(系统性学习二):单层神经网络(感知机)神经网络(系统性学习三)&#…

数据结构C语言描述5(图文结合)--队列,数组、链式、优先队列的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

打开windows 的字符映射表

快捷键 win R 打开资源管理器 输入: charmap 点击确定

EPS生成垂直模型闪退

问题描述 EPS在生成垂直模型时闪退。 解决办法在这里插入图片描述 原DSM文件和DOM文件分别在单独文件夹中。 将这几个文件统一放在一个文件夹中,并且注意路径不要太复杂。 成功运行,文件大时,处理会非常缓慢。

4——单页面应用程序,vue-cli脚手架

单页面应用程序(英文名:Single Page Application)简称 SPA,顾名 思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。 1、脚手架 ① 什么是脚手架 vue-cli 是 Vue.js 开发的标准工具。它简化了程序员基于 webpack …

嵌入式Qt使用ffmpeg视频开发记录

在此记录一下Qt下视频应用开发的自学历程,可供初学者参考和避雷。 了解常用音频格式yuv420p、h264等了解QML,了解QVideoOutput类的使用,实现播放yuv420p流参考ffmpeg官方例程,调用解码器实现h264解码播放 不需要手动分帧。ffmpeg…

kmeans 最佳聚类个数 | 轮廓系数(越大越好)

轮廓系数越大,表示簇内实例之间紧凑,簇间距离大,这正是聚类的标准概念。 簇内的样本应该尽可能相似。不同簇之间应该尽可能不相似。 目的:鸢尾花数据进行kmeans聚类,最佳聚类个数是多少? plot(iris[,1:4…

【大数据学习 | Spark-Core】详解Spark的Shuffle阶段

1. shuffle前言 对spark任务划分阶段,遇到宽依赖会断开,所以在stage 与 stage 之间会产生shuffle,大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。 负责shuffle…

Ubuntu20.04安装kalibr

文章目录 环境配置安装wxPython下载编译测试报错1问题描述问题分析问题解决 参考 环境配置 Ubuntu20.04,python3.8.10,boost自带的1.71 sudo apt update sudo apt-get install python3-setuptools python3-rosinstall ipython3 libeigen3-dev libboost…