LabVIEW如何实现高性能串口助手-附代码

news2024/11/20 2:41:34

LabVIEW基本上还是在Windows系统下进行开发。在Windows下,提供了非常多的系统接口,供应用开发时调用来实现各种功能,在LabVIEW里面也是可以通过对这些系统接口进行封装,形成LabVIEW里面的控件,供LabVIEW程序开发时调用。在之前的文章里面有提到过,在嵌入式开发领域,PC端的串口工具是非常重要的,但是有不少串口工具因为性能原因,在数据量较大时,经常会出现卡死的问题。另外固有的串口工具无法进行改造,来实现串口数据采集后的更多应用功能。前面的文章有用LabVIEW VISA API快速的开发了串口助手,但是串口数据接收效率比较低,因此本文将详细介绍,怎么用LabVIEW来快速开发更高性能的串口程序。

一 如何实现高性能的串口收发

我们知道一般单片机、ARM、FPGA等嵌入式系统的板子基本都会带有串口,因为协议简单,而且成熟,有许多现成的东西可以借鉴使用。在PC通过串口获取嵌入式系统传来的信息或数据,LabVIEW在Windows下一般有几种可选方案:

  1. 使用开发环境自身提供的串口操作接口函数;
  2. 使用ActiveX控件MSComm;
  3. 直接调用WindowsAPI实现串口操作。

直接调用WindowsAPI实现串口操作实现难度相对要大一些,要对Windows底层API比较熟悉,而且这些API的封装,MSComm控件已经实现好了。另外前面介绍过LabVIEW的VISA接口操作串口,收发效率是比较低的,因此选择MSComm控件来实现高性能的串口程序。

二 什么是MSComm

每个MSComm控件,都对应一个串口,若需访问多个串口时必须使用多个MSComm控件。

MSComm是ActiveX控件,可以在PC上控制串口数据的发送和接收,支持查询方式和中断方式(Windows下称为事件驱动方式)。

  • 中断方式:当串口有数据到达或有数据写入到串口缓冲中时,就会触发中断,可以使用OnComm捕获事件并进行处理。这种方式响应及时,比轮询方式效率要高。
  • 查询方式:实际上仍热是事件驱动的,需要检查CommEvent属性值来查询事件。

2.1 MSComm的常用属性

  • CommPort:设置并返回通讯端口号
  • Settings:以字符串形式设置并返回波特率、奇偶校验、数据位、停止位
  • PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口
  • Input:从接收缓冲区返回和删除字符
  • InputLen:设置并返回input属性从接收缓冲区读取的字符数
  • Output:向传输缓冲区写一个字符串
  • RThreshold:在设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回要接收的字符数
  • CTSHolding:确定是否可通过查询CTS线的状态发送数据
  • SThreshold:设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数
  • CDHolding:通过查询CD线的状态确定当前是否有传输
  • DSRHolding:确定DSR线的状态
  • EOFEnable:确定在输入过程中MSComm控件是否寻找文件结尾(EOF)

2.2 MSComm控件的事件

MSCOMM控件只使用一个事件OnComm,用属性CommEvent的十七个值来区分不同的触发时机。主要有以下几个:

  • CommEvent=1时:传输缓冲区中的字符个数已少于Sthreshold(可设置的属性值)个
  • CommEvent=2时:接收缓冲区中收到Rthreshold(可设置的属性值)个字符,利用此事件可编写接收数据的过程
  • CommEvent=3时:CTS线发生变化
  • CommEvent=4时:DSR线发生变化
  • CommEvent=5时:CD线发生变化
  • CommEvent=6时:检测到振铃信号

另外十种情况是通信错误时产生,即错误代码。关于MSComm的更详细的资料可参考Microsoft的msdn网站。

三 MSComm控件的注册

在LabVIEW中使用MSComm控件时,需要导入--ActiveX控制至选板才可以看到MSComm控件。但是如果Windows PC的MSComm控件注册有问题,那么通过导入也是看不到的,那么就需要先下载注册MSComm控件。

首先将下载的mscomm32.ocx文件放到C:\windows\system32下,然后在运行中输入Regsvr32 C:\windows\system32,这时会弹出注册成功的提示框:

再在运行中输入Regedit命令打开注册表,找到HKEY_CLASSES_ROOT\Licenses,在里面添加主键,右键选择“新建”--“项”,然后将该项命名为4250E830-6AC2-11cf-8ADB-00AA00C00905,在右边右键“默认”选择“修改”,然后输入数值kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun。注册mscomm32.ocx控件防止在LabVIEW中导入时发生“类别未授权使用”错误。
注册完成后,重启一下电脑,此时就可以看到MSComm控件了(图中第三个):

四 LabVIEW使用MSComm控件实现串口程序

前面提到过一般的应用,LabVIEW中直接用VISA串口API函数就可以实现,方便快捷,但是对于需要使用中断方式进行串口通信的,就得使用MSComm控件了。操作ActiveX控件,最主要的就是要使用好它的属性、方法函数,并做好中断事件的回调处理。LabVIEW针对ActiveX设置的控件在“互连接口”的“ActiveX”中提供了8个功能函数:Automation Open, Close Reference, To Variant, Variant to Data, Invoke Node, Property Node, Register Event Callback, UnRegister Event Callback。

4.1 LabVIEW中使用MSComm控件

首先需要在LabVIEW中加入MSComm,在“工具”--“导入”--“ActiveX至选板”中将MSComm添加到LabVIEW环境,选择默认路径。然后可以在前面板的".Net与ActiveX"中找到mscomm然后拖拽到前面板中。也可以先在前面板放置ActiveX容器,然后右键选择mscomm控件:

调用ActiveX控件创建客户端应用程序:主要用到“互连接口”--“ActiveX”中的8个函数:

ActiveX事件注册相关:即使用事件回调处理中断事件等,

4.2 编程注意事项

对于MSComm控件,编程时使用的都是其自动化引用,即LabVIEW将ActiveX控件作为对象来处理。连接属性节点到控件,可以查看所有属性,连接调用节点时,MSComm没有提供方法,所以会显示没有方法。以下是LabVIEW中看到的MSComm的属性:

另外,回调事件注册首先要确定好需要传输什么样的数据,如果包含多种数据类型,可以使用簇来解决,回调函数中会自动创建与该数据类型相同的事件参数,并提供ActiveX控件的引用。

五 文末活动

对于LabVIEW的串口实现源码,感兴趣的朋友可以在本公号(技塑未来)回复“LABV_UART”获取。同时前面提到的LabVIEW VISA串口助手的实现,也一并放在这一个LabVIEW project下了。

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

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

相关文章

mongo实时导入到clickhouse案例(包含复杂嵌套json的解析)

(一)案例介绍 本案例是把Mongo数据库的数据通过FlinkCDC实时导入到Kafka&#xff0c;消费Kafka数据把维表数据写入到MySQL。读取MySQL维表数据和消费Kafka的数据通过Flink SQL Join后导入到ClickHouse。 (二) maven依赖 <?xml version"1.0" encoding"UTF-…

数字人的生死疲劳

你看好数字人吗&#xff1f;这个问题在今天似乎颇难回答。如果从宏观趋势上看&#xff0c;数字人的利好要素似乎已经达到了一个空前的高度。比如有市场分析机构预测&#xff0c;到2026年中国AI数字人的市场规模将突破100亿人民币&#xff0c;整体市场呈现高速增长态势。又比如今…

git基础之三|初始化本地库、新建文件、提交代码、版本回退、穿梭等使用命令集合【2022最全版】

Git作为版本管理的软件&#xff0c;在我们的协同工作中非常重要。因此&#xff0c;对于Git的常见命令&#xff0c;如新建、编辑文件、提交版本、版本回退等操作必须要熟悉。 Git常用命令一、初始化本地库1、创建项目文件夹2、右击选择Git bash3、在bash中输入4、查看创建的结果…

mysql索引中最左前缀原则

最左前缀原则 最先匹配最左边的索引&#xff0c;匹配上就继续&#xff0c;如果匹配不上就检索不到 (a,b,c是索引) where后面的条件有没有给a对应的条件 不给定a等于几&#xff0c;是没法儿查询出结果的&#xff0c; 因为辅助聚簇索引是把索引按照组合索引的顺序存到一起的&…

IoTDB 可实现的基本操作 —— 数据写入、删除、导出、元数据管理、时区设置 | 小白教程文档(四)...

前言上篇教程介绍了 Apache IoTDB 处理时序数据时&#xff0c;能够实现的部分具体功能和具体的操作命令&#xff0c;包括数据导入、基本查询、和聚合查询。本篇将继续介绍 Apache IoTDB 可实现的其他功能和相关 SQL 语句命令&#xff0c;包括数据的写入、删除、导出、元数据操作…

python 解析库Beautiful Soup的安装

Beautiful Soup的安装一、Beautiful Soup的安装1.1 安装lxml库1.2 安装beautifulsoup41.3 验证beautifulsoup4能否运行一、Beautiful Soup的安装 Beautiful Soup是Python的一个HTML或XML的解析库&#xff0c;使用它可以很方便地从网页中提取数据。它的解析器是依赖于lxml库的&…

数组元素循环右移问题

目录 1008 数组元素循环右移问题 输入格式: 输出格式: 输入样例: 输出样例: 代码长度限制 时间限制 内存限制 思路: 1.右移函数 1.2函数代码: 2.main函数中 2.2main函数代码: 完整代码: 时间复杂度: 总结: 题目的链接: 1008 数组元素循环右移问题 一个数组A中存有…

MongoDB(一)【概念介绍安装】

MongoDB 概念以及安装 官方文档&#xff1a;https://www.mongodb.com/docs/manual/ 简介 官方介绍 MongoDB是一个文档数据库&#xff0c;旨在方便应用开发和扩展 百度百科 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解…

【web前端期末大作业】html在线网上书店 基于html制作我的书屋(23页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

反序列化漏洞原理

序列化及其出现场景 ●远程和进程间通信&#xff08;RPC/IPC&#xff09; ●连线协议、Web服务、消息代理 ●缓存/持久性存储区 ●数据库、缓存服务器、文件系统 ●HTTP cookie、HTML参数、API身份验证令牌 序列化 (serialize)是将对象的状态信息转换为可以存储或传输的形…

基于java+springmvc+mybatis+jsp+mysql的电动车实名制挂牌管理系统

项目介绍 电动车实名制挂牌管理系统的需求和管理上的不断提升&#xff0c;电动车实名制挂牌管理的潜力将无限扩大&#xff0c;电动车实名制挂牌管理系统在业界被广泛关注&#xff0c;本网站及对此进行总体分析&#xff0c;将电动车实名制挂牌信息管理的发展提供参考。电动车实…

微信接入ChatGPT,使用Node+ChatGPT+Wechaty做一个微信机器人

目录 前言 准备工作 起步 实践 写在最后 前言 接上篇文章&#xff1a;站在巨人的肩膀上&#xff0c;用NodeChatGPT模块实现一个接口_DieHunter1024的博客-CSDN博客 我将ChatGPT模块的使用介绍了一下&#xff0c;使用自己的session发送请求达到调用ChatGPT进行聊天的目的&…

动态规划——背包问题(2)

文章目录多重背包的单调队列优化例题思路代码二维费用背包问题例题背包问题装法的总结&#xff1a;至多、恰好、至少背包最多装V体积背包恰好装V体积背包最少装V体积例题求解方案数初始化和循环顺序例题求解具体方案思路例题考察思维的一些题目多重背包与分组背包机器分配金明的…

原生JS开发手机端H5项目总结(FamilyChallenge)

一、 插件文件 &#xff08;可多选&#xff09; JQuery &#xff08;操作dom&#xff09;lottie.js &#xff08;播放动效&#xff09;preload-0.6.2.min.js&#xff08;资源预加载&#xff09;jweixin-1.6.0.js &#xff08;h5跳转微信小程序&#xff09;TweenMax.min.js &am…

Lidar based off-road negative obstacle detection and analysis(论文翻译)

&#xff08;机翻 自己留作资料的 大家辩证使用 论文地址&#xff1a;https://ieeexplore.ieee.org/document/6083105&#xff09; Abstract: 无人驾驶地面车辆 (UGV) 要想在越野地形中高速行驶&#xff0c;就必须实时分析和了解周围的地形&#xff1a;它必须知道它打算去哪里&…

备忘录模式

一、备忘录模式 1、定义 备忘录模式&#xff08;Memento Pattern&#xff09;又称作快照模式&#xff08;Snapshot Pattern&#xff09;&#xff0c;指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可将该对象恢复…

你好,Cartesi Rollups Alpha 0.8.0

支持 Arbitrum 和 Optimism 部署&#xff0c;并使内部增强。我们通过这个新版本支持在Optimism和Arbitrum L2 链上的部署&#xff0c;为 Cartesi Rollups DApp 开发人员带来了更低的延迟和更低的gas费用。我们致力于提高 Cartesi 技术的多样性和性能提升&#xff0c;并且通过 R…

【MySQL】视图

文章目录视图基本使用视图规则与限制视图 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会影响到基表,基表的数据变化也会影响到视图, 主要作用是,将表的内容,常用需要的部分创建一个部分,这样使用视图的时候,可以减…

CAS:1407166-70-4,NODA-GA-NHS ester大环化合物供应

基本信息 名称&#xff1a; NODA-GA-NHS ester 2,2′-(7-(1-carboxy-4-((2,5-dioxopyrrolidin-1-yl)oxy)-4-oxobutyl)-1,4,7-triazonane-1,4-diyl)diacetic acid CAS编号&#xff1a;1407166-70-4 分子式&#xff1a;C19H28N4O10&#xff0c;HPF6&#xff0c;TFA 分子量&a…

HTTP MIME类型

文章目录HTTP MIME类型HTTP MIME类型 HTTP 请求头中的 Accept 头是客户端用来告诉服务器&#xff0c;客户端可以处理什么类型的内容&#xff0c;这种内容类型使用 MIME 类型来表示。借助内容协商机制&#xff0c;服务器可以从诸多 MIME 中选择一项进行应用&#xff0c;并使用 …