LabVIEW实现TCP/IP通信

目录

1、TCP通信原理

2、硬件环境部署

3、云端环境部署

4、TCP通信函数

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


在本节中,我们将简要探讨TCP通信的基础知识,并以工业物联网平台TLINK中的云端设备数据发布设计为例,详细阐述在互联网环境下TCP客户端应用程序设计的基本方法。

同时,我们还将介绍如何在TLINK平台上创建TCP设备、构造通信数据帧以及进行测试。

除此之外,我们将在TCP客户端应用程序设计框架的基础上,给出数据采集计算机与物联网云端设备之间通信程序实现的完整步骤,以及程序运行结果的测试方法。

本节的例子旨在为基于TCP的数据采集终端实现物联网云端数据发布功能的相关应用程序设计提供一些参考和借鉴。

1、TCP通信原理

TCP是一种基于连接、可靠且基于字节流的传输层通信协议。在数据交换之前,客户端和服务器会先建立TCP连接,以便相互传输数据。TCP还提供超时重发、丢弃重复数据、检验数据、流量控制等功能,确保数据能从一端顺利传至另一端。

TCP通信的主要优点是可靠和稳定。TCP在传递数据之前会进行"三次握手"以建立连接,并在数据传输过程中采用确认、窗口、重传和拥塞控制机制。数据传输完成后,TCP会断开连接,避免占用系统资源。

然而,TCP也存在传输速度慢、效率低、占用系统资源多以及易受攻击等缺点。TCP建立连接需要时间,数据传输过程中的确认机制、重传机制和拥塞控制机制也会消耗大量时间。此外,每台设备都需要维护所有传输连接,实际上每个连接都会占用系统的CPU和内存等资源。TCP的确认机制和三次握手机制使其容易受到DoS、DDoS、CC等攻击。

TCP通信适用于对网络通信质量有较高要求的场景,例如需要确保数据准确无误地传递给对方的应用,如HTTP、HTTPS、FTP等传输文件的协议,以及POP、SMTP等邮件传输协议。在物联网应用开发中,除了直接使用TCP通信,还常使用其应用层协议,如HTTP、MQTT协议等。

TCP的通信过程类似于打电话。一方负责监听特定号码的电话,另一方需要拨通这个号码与对方建立连接。双方都可以通过听筒(输入流)接收对方的信息,通过话筒(输出流)向对方发送信息,整个过程实现双工通信。"客户端-服务器"模式贯穿整个过程,程序设计需要编写客户端应用程序和服务器应用程序。

基于TCP编写通信软件时,整个传输过程如下:

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

对应的TCP通信中的客户端与服务器工作基本流程如下图所示。

2、硬件环境部署

基于TCP的通信程序得设计,得保证电脑能连上网(不管是有线还是无线,方式不限)。

但是因为路由器的限制,普通的TCP通信程序只能在局域网里的电脑之间传数据。

而物联网很多时候是要在很大范围、很多平台上通信,这时候就可以用物联网平台做中介——数据采集系统把数据上传到物联网平台,其他终端再从物联网平台下载数据,这样就能实现物联网,达到数据交换、共享的目的。只要电脑能上网,能ping通远处的物联网服务器,就可以写基于TCP的数据通信程序了。

如下图,电脑用无线网卡通过本地热点连互联网,和TLINK物联网云平台建立连接。

这种组网方式,通过物联网云平台,可以让不同网段的终端互相通信。在这个例子中,电脑通过家用或办公室的路由器连互联网,就能访问TLINK物联网平台了。

3、云端环境部署

一般来说,TCP通信需要设计客户端和服务器两部分程序。

在物联网应用开发中,服务器部分的功能需求很多,一般程序员很难掌握。因此,大型物联网应用开发通常是多学科成员共同完成的项目,一个人很难进行系统级的开发。这也让许多非计算机专业的技术人员对大型复杂的物联网系统望而却步。

然而,近年来物联网开发平台的广泛应用,使得物联网系统开发模式发生了根本性的变化。通过物联网开发平台,可以将物联网应用系统中的服务器功能委托给平台,从而使应用系统开发更侧重于客户端开发。

这样,就可以实现基于系统集成思想的物联网应用的快速、高效开发,为非计算机专业人员快速入门物联网应用开发提供了新的思路。

在这个例子中,我们使用工业物联网平台TLINK创建了一个TCP虚拟设备,相关信息如下图所示。

此时,TLINK物联网开发平台相当于一个功能完备的服务器。通常,物联网应用开发只需要关注客户端采集状态数据、连接TLINK物联网平台并将采集的数据发布到物联网开发平台即可。

向TLINK物联网云平台上传测量数据的TCP通信程序实现的具体功能如下:

  • 使用随机数模拟2路数据的定时采集(采样速率可由用户控制)。
  • 将采集的数据封装为TLINK中自定义数据协议对应的数据包。
  • 在本机以多路信号波形图表的形式显示采集的数据。
  • 分别显示系统当前时间、数据采集时间以及最新采集的2路数据值。

利用TCP通信技术将采集数据传输至TLINK物联网平台,实现指定设备相关数据的更新。

4、TCP通信函数

在LabVIEW里,要找TCP通信的节点,你得去"函数→数据通信→协议→TCP"这个子选板找,就像下图这样。

TCP通信主要函数节点和VI及其功能如下表所示。

在进行LabVIEW的TCP通信程序设计时,我们至少需要3个节点,程序框图就像下图这样。

在实际应用中,你可以灵活地运用这3个节点,在轮询、事件响应、状态机等各种程序设计模式中实现TCP发送数据功能。

而接收TCP数据时,最少也需要用到“打开TCP连接”、“读取TCP数据”和“关闭TCP连接”这三个函数节点,再加上一个While循环结构。同时,接收TCP数据时,还需要根据接收节点的工作模式来设置接收字节数和超时参数。

在大多数场景下,TCP通信中的发送和接收数据是并行进行的。一个典型的TCP并行收发应用程序的框图如下所示。

5、程序架构

程序要实现模拟人工控制的数据采集,然后把数据上传到云端。用户只要点击“开始数据采集”按钮,程序就会按照用户设定的时间间隔不停地采集和上传数据。

当用户再次点击时,程序就会暂停采集和上传,如此反复。为了简化程序设计,我们采用了轮询设计模式——在While循环结构中,程序用条件结构检测前面板上的“启动数据采集”按钮的状态,以及“已用时间”节点的状态,然后根据检测结果进行相应处理。主要检测和处理的状态有:

  • “数据采集”按钮操作状态检测——这个按钮在“开始数据采集”和“暂停数据采集”之间切换,按钮的机械动作模式是“单击时转换”,当按钮状态为“真”时,采集数据并上传云端,否则什么都不做。
  • “已用时间”节点状态检测——检测是否达到了指定的目标时间,如果达到了,就开始进行数据采集和云端上传。
  • “停止”按钮操作状态检测——检测是否存在点击按钮导致其值发生变化的条件,如果满足条件,就退出程序。

为了让程序的人机交互效果更好,我们在循环事件处理结构的基础上,增加了顺序结构,把程序分成了两个顺序帧。第一个帧是程序初始化帧,用于完成程序运行前各种控件的初始化;第二个帧是主程序帧,也就是前面创建的循环事件处理程序结构,用于实时检测程序中的各种状态,并根据检测结果进行相应处理。

6、前面板设计

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

步骤1:添加一个字符串类控件叫做“字符串控件”(控件→新式→字符串与路径→字符串控件),设置标签为“TLINKTCP服务器”。

步骤2:添加一个数值类控件叫做“数值输入控件”(控件→新式→数值→数值输入控件),设置标签为“远程端口”,数据类型选择U16(16位整数数据类型)。

步骤3:再次添加一个数值类控件叫做“数值输入控件”,设置标签为“本地端口”,数据类型选择U16。

步骤4:添加一个数值类控件叫做“数值输入控件”,设置标签为“采集间隔(s)”,数据类型选择U8。

步骤5:添加一个布尔类控件叫做“确定按钮”(控件→新式→布尔→确定按钮),设置标签为“采集按钮”,按钮显示文本为“启动数据采集”。

步骤6:添加一个布尔类控件叫做“停止按钮”(控件→新式→布尔→停止按钮),按钮标签和显示文本保持默认值。

步骤7:添加一个图形类控件叫做“波形图表”(控件→新式→图形→波形图表)。

步骤8:添加一个字符串类控件叫做“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),设置标签为“系统时间”。

步骤9:再次添加一个字符串类控件叫做“字符串显示控件”,设置标签为“采集时间”。

步骤10:添加一个字符串类控件叫做“字符串显示控件”,设置标签为“当前数据”。

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

7、程序框图设计

步骤1:做个两帧的顺序结构,第一帧是初始化帧。把第一帧的“子程序框图标签”改成“初始化”,这样程序框图就更好看了。

创建一个“采集按钮”的局部变量,设置成可写的,初始值是个布尔类型的“假”。(在前面的板子上右键点击这个按钮,选“机械动作→单击时转换”,让按钮变成单击时状态转换并保持的那种)。

然后在前面板子上右键点击“波形图表”,选“创建→属性节点→历史数据”,创建一个“波形图表”的属性节点,也是可写的,初始值是一个包含两个数值的簇。

这样波形图表在程序开始的时候就能清空画面了。

再创建几个字符串类控件“系统时间”、“采集时间”、“当前数据”的局部变量,初始值都设为空字符串,这样一开始运行的时候控件显示的内容就是空的。

接着,创建一个“采样间隔(s)”的数值类局部变量,初始值设为U8类型的2。然后是“本地端口”的数值类局部变量,初始值设为U16类型的8888。

再来是“远程端口”的数值类局部变量,初始值设为U16类型的8647。最后,创建一个“TLINKTCP服务器”的字符串类局部变量,初始值设为TLINK平台TCP服务器的域名“tcp.tlink.io”。

完成后的初始化帧程序子框图设计效果就像下图那样。

第二步:在顺序结构里,把第二帧的“子程序框图标签”改成“主程序”,这样能让程序框图更好懂。主程序就是“While循环结构+条件结构+移位寄存器”这种轮询式的整体结构,看下图就知道了。

在开始循环之前,我们用“打开TCP连接”节点(函数→数据通信→协议→TCP→打开TCP连接)来建立本机和物联网平台的连接。循环结束后,再用“关闭TCP连接”节点(函数→数据通信→协议→TCP→关闭TCP连接)来释放程序占用的资源。

步骤3:在“采集按钮”的连接条件里,搞定程序轮询状态,检查要不要开始采集数据,以及定时采集的条件达不达到。如果“采集数据”的条件是“真”,那就用属性节点把“采集按钮”的文本改成“暂停数据采集”。

为了能让用户指定时间间隔来采一次数据,我们用一下“已用时间”节点(函数→编程→定时→已用时间),然后看看它的输出端口“结束”状态。要是状态是“真”,那就说明定时条件满足了,可以开始采集数据并且上传到物联网云平台。具体的程序子框图,看下图就行了。

步骤4:在While循环结构里,添加一个“获取日期/时间字符串”节点(函数→编程→定时→获取日期/时间字符串),把“需要秒?”端口设为真。接着调用“连接字符串”节点,将“获取日期/时间字符串”节点输出的日期和时间字符串合并成一个带空格的完整字符串。

最后,把结果放到“系统时间”控件里,这样程序运行时就能显示当前时间信息了。对应的程序子框图如下图所示。

步骤5:当"已用时间"节点满足条件(2秒间隔时间到)时,开始数据采集。在对应的分支子框图中,我们通过生成随机数来模拟数据采集过程。

接着,我们调用"转换为无符号单字节整型"节点将模拟采集的数据转换为字节类型。然后,使用"创建数组"节点将采集到的两组数据封装成符合TLINK物联网平台创建TCP设备用户协议的数据帧。

之后,通过"字节数组至字符串转换"节点将封装好的数据帧转换为LabVIEW中的字符串类型通信数据。按照TLINK平台的规定,我们首先调用"写入TCP数据"节点发送拟连接的设备序列号,延时50ms后,再发送封装好的数据帧对应的通信字符串。这样就可以完成本地采集数据上传物联网平台的功能。

为了增强程序功能,我们用波形图表和数值显示控件来展示采集到的数据,同时用字符串显示控件显示采集数据的时间。这样方便我们后续与物联网平台接收到的数据进行比对。对应的程序子框图如下图所示。

步骤6:在节点“已用时间”连接的条件结构里,当满足“假”(也就是指定的间隔时间还没到)时,不启动数据采集。在这个分支子框图里,直接连接左右两边的TCP资源引用和错误信息传递,如下图所示。

步骤7:在按钮控件“采集按钮”连接的假分支子框图里,右键点击“采集按钮”,选择“创建→属性节点→布尔文本→文本”,新建一个属性节点。将这个节点设置为写入模式,并填入“启动数据采集”(这样当你再次点击按钮时,采集工作就会开始)。然后,直接连接左右两边的TCP资源引用和错误信息传递。对应的程序子框图就像下图这样。

步骤8:为了让应用程序更“优雅”地退出,除了使用While循环结构之外,我们还需要调用“关闭TCP连接”节点(函数→数据通信→协议→TCP→关闭TCP连接)来释放TCP通信占用的资源,同时调用“清除错误”节点(函数→编程→对话框与用户界面→清除错误)来简单、直接地清除程序执行过程中出现的错误。

这样,一个基于TCP通信技术的物联网平台采集数据上传程序就全部完成了。完整的程序框图如下所示。

8、测试验证

点击工具栏上的“运行”按钮,让程序功能接受检验。然后,按下“启动数据采集”按钮,你会看到数据每隔2秒钟被采集一次,波形图中展示了2路数据的波动,系统时间、采集时间以及当前数据都准确无误地呈现出来,就像下图所展示的那样。

此时,打开TLINK物联网平台用户账号对应的监控中心,您会看到本地采集的数据正如期上传至云端,如图所示(设备名为“sustei_TCP03”)

物联网平台上创建的TCP设备实时数据显示结果与本地采集数据完全一致,由此可见,传统互联网通信技术中的TCP通信在物联网应用中仍具有举足轻重的地位。利用LabVIEW,我们可以非常便捷地建立起与物联网云平台的TCP连接,从而实现本地采集数据的上载至物联网云平台。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程

目录 ⛳️推荐 前言 1. 安装docker与docker-compose 2. 启动容器运行镜像 3. 本地访问测试 4.安装内网穿透 5. 创建公网地址 6. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

Linux关于vim的笔记

Linux关于vim的笔记:(vimtutor打开vim 教程) --------------------------------------------------------------------------------------------------------------------------------- 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键…

Swift 实现链表重新排列:L0 → Ln → L1 → Ln-1

前言 本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。 143. 重排链表 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会…

C++ —— 以真我之名 如飞花般绚丽 - 智能指针

目录 1. RAII和智能指针的设计思路 2. C标准库智能指针的使用 2.1 auto_ptr 2.2 unique_ptr 2.3 简单模拟实现auto_ptr和unique_ptr的核心功能 2.4 shared_ptr 2.4.1 make_shared 2.5 weak_ptr 2.6 shared_ptr的缺陷:循环引用问题 3. shared_ptr 和 unique_…

Macos远程连接Linux桌面教程;Ubuntu配置远程桌面;Mac端远程登陆Linux桌面;可能出现的问题

文章目录 1. Ubuntu配置远程桌面2. Mac端远程登陆Linux桌面3. 可能出现的问题1.您用来登录计算机的密码与登录密钥环里的密码不再匹配2. 找不到org->gnome->desktop->remote-access 1. Ubuntu配置远程桌面 打开设置->共享->屏幕共享。勾选允许连接控制屏幕&…

ElasticSearch学习了解笔记

搜索引擎的原理: 1、查询分析(自然语言处理)理解用户需求 2、分词技术 3、关键词搜索匹配 4、搜索排序 lucence Lucene 是一个成熟的权威检索库 Elasticsearch 的搜索原理简单过程是,索引系统通过扫描文章中的每一个词&#xff…

GoF设计模式——结构型设计模式分析与应用

文章目录 UML图的结构主要表现为:继承(抽象)、关联 、组合或聚合 的三种关系。1. 继承(抽象,泛化关系)2. 关联3. 组合/聚合各种可能的配合:1. 关联后抽象2. 关联的集合3. 组合接口4. 递归聚合接…

【C++】C++11新特性详解:可变参数模板与emplace系列的应用

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

多模态大型语言模型(MLLM)综述

目录 多模态大语言模型的基础 长短期网络结构(LSTM) 自注意力机制 基于Transformer架构的自然语言处理模型 多模态嵌入的关键步骤 TF-IDF TF-IDF的概念 TF-IDF的计算公式 TF-IDF的主要思路 TF-IDF的案例 训练和微调多模态大语言模型(MLLM) 对比学习 (CLIP, ALIG…

Otter 安装流程

优质博文:IT-BLOG-CN 一、背景 随着公司的发展,订单库的数据目前已达到千万级别,需要进行分表分库,就需要对数据进行迁移,我们使用了otter,这里简单整理下,otter 的安装过程,希望对…

Web3 游戏周报(11.17 - 11.23)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【11.17 - 11.23】Web3 游戏行业动态: 加密游戏开发商 Gunzilla Games 发推表示,其已与 Coinbase Ventures 达成合作并获得其投资。 国际足联将与 Mythica…

【linux学习指南】初识Linux进程信号与使用

文章目录 📝信号快速认识📶⽣活⻆度的信号📶 技术应⽤⻆度的信号🌉 前台进程(键盘)🌉⼀个系统函数 📶信号概念📶查看信号 🌠 信号处理🌉 忽略此信…

3DEXPERIENCE软件是干什么的—3DE软件代理商微辰三维

在当今数字化转型浪潮席卷全球各个行业的大背景下,3DEXPERIENCE 软件宛如一颗璀璨的明星,闪耀在产品设计、制造以及协同创新等诸多领域。它是由达索系统公司推出的一款综合性的、功能强大的商业软件平台,为企业的整个产品生命周期管理带来了前…

【大数据学习 | Spark-Core】广播变量和累加器

1. 共享变量 Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。 累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象&#xff0c…

STM32编程小工具FlyMcu和STLINK Utility 《通俗易懂》破解

FlyMcu FlyMcu 模拟仿真软件是一款用于 STM32 芯片 ISP 串口烧录程序的专用工具,免费,且较为非常容易下手,好用便捷。 注意:STM32 芯片的 ISP 下载,只能使用串口1(USART1),对应的串口…

MTK主板_安卓主板方案_MTK联发科主板定制开发

联发科(MTK)主板以其强大的性能和多样化的功能而受到广泛关注。该平台包括多个型号,例如MT6761、MT8766、MT6762、MT6765、MT8768和MT8788等,均配置了四核或八核64位处理器,主频可高达2.0GHz。采用先进的12nm工艺,搭载Android 11.…

信息收集(1)

学习视频引路信息收集(1)_哔哩哔哩_bilibili View信息收集(1) 分享一个漏洞挖掘平台:补天 以吉林通用航空职业技术学院|官网 (jlthedu.com)为目标 第一步:查看cdn和域名被注册的信息 可以查询域名信息的…

React(六)——Redux

文章目录 项目地址基本理解一、配置Redux store二、创建slice配置到store里并使用三、给Slice配置reducers,用来修改初始值 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow基本理解 s…

如何利用ATECLOUD平台来实现数据报告的导出和数据分析?-纳米软件

1.数据报告导出 选择报告模板:ATECLOUD 平台通常会提供多种预设的数据报告模板,这些模板是根据不同的测试场景和需求设计的。例如,在电源模块测试中,有针对输出电压、电流、功率等基本参数的报告模板,也有包含纹波系数…