大家好~本文是0基础串口通讯文章,无需Labview基础,读完即可完成串口通讯设计。
之前给大家出过一期有关于串口通讯硬件配置的文章,那么本期着重讲一下从硬件连接到纠错再到软件如何设计,并针对之前的文章中大家提问到的问题做出相应的答疑,针对串口连接时存在的一系列连接错误、软件不通等问题展开要论,优化了设计结构,最终生成一个结构稳定不复杂的程序,所以本文的题目是串口通讯程序设计,请看题注。
①在串口通信上最重要的两个方面,一个是硬件一个是软件,那么本章着重介绍一下串口线连接以后我们该如何在labview上进行串口通讯程序的设计与优化。
②关于关于硬件的设计部分,题主之前写过一篇有关于串口硬件配置的文章质量较好且非常详细,大家如果想了解的话可以点击下边的链接补充一下相关知识。
串口与仪器连接、通讯等前期配置点击下文查看:
3.详解Labview串口通讯–从串口线连接到串口通讯保姆级教程
想获取文章中程序请在百度网盘下载,下载方式:
复制下面橙色口令,打开百度网盘手机APP后等待2s即可保存并在电脑端下载:
觅且俗盒梦形瓜冗川欢
串口通讯程序设计
1. 串口通讯基本原理
我们先大致花费一点时间了解一下串口,本章主要教大家理解一下串口在电脑和仪器及两者 数据传输 上扮演着什么样的角色,通过形象的图文并茂的方式帮助大家深入理解,以便于更好的在编程对串口理解和控制。
1.1 串口的基本概念
①串口是什么样子的?
串口通常呈现为设备上的一个物理接口,如计算机上的COM端口或其他设备上的DB9接口。这些接口通常具有特定的针脚排列,用于数据的传输和接收,也就是说电脑上的USB接口是可以转串口的。大致如下:
②串口如何连接?
一般串口线都是一边是USB接口,一边是DB9接口的,将USB接口接到电脑上,DB9接到仪器上即可,长度不足时可以使用公头转母头的DB9延伸。
③数据传输方式:
串口通信是一种全双工(双向传递数据)扩展接口,数据在一位接一位的顺序传输。它使用一对传输线进行双向通信。也就是说,可以边发边收而不是只发完再收、数据是一个接一个的排队发,如下图。
④传输速度怎么设置?
串口的传输速率通常由波特率来衡量,表示每秒传输多少比特(Bit),常见波特率包括9600、38400、56000、115200等。
1.2 图解电脑与仪器的数据传输流程
本节大致讲解一下我们的Labview是如何通过电脑、串口线、仪器实现仪器控制或者板卡信号传输的,大家可以根据图中的六个步骤来对应题主的描述,看看自己的程序卡在哪个步骤。
① 将串口线的USB端接到电脑/工控机,将DB9接到仪器或板卡的端口,这一步较为简单,连接完成后查看接触情况,避免出现接触不良的情况。
② 检查电脑是否识别串口线,以下提供两个方法,这个之前文章中讲过,不再过多赘述:
方法一:右键“此电脑”-----单击管理-----单击“设备管理器”-----打开“端口(COM和LPT)”—插拔连接的串口线----发现图中红框处端口消失又出现,则说明串口连接正常。
方法二:打开NI MAX软件,展开“设备与接口”一项,即可查看当前连接的串口,如下图所示
③若以上两种方式均正常,则跳过这一步骤查看下一步,若发现上方两种方式均未连接时,则需排除未连接的错误,错误有以下几种:
- 串口连接接触不良: 这种情况重新连接一下就好了,并且判断一下是否是接触不良。
- 串口线发行时间比较老: 有些实验室留下的老旧仪器常带着一根旧的串口线,这种串口线往往是在Win7系统盛行时发布,那时的设备管理器大多兼容该类串口线,但到了win10/win11后,可能该串口线需要更新或下载驱动才可以运行,这个根据串口线的不同,大家自行下载串口驱动。
- 缺少串口驱动程序: 缺少Labview连接电脑串口的程序,这个也是导致程序出问题的重要因素,初次进行串口通讯的电脑必须安装该串口驱动才能使用Labview控制。如果有需要的话,可以在题主的百度网盘中下载。
下载链接:
文章中串口驱动及通讯程序已上传百度网盘,下载地址:
复制下面橙色口令,打开百度网盘手机APP后等待2s即可保存并在电脑端下载:
尔狍礼乘也芬乙搁野旅
下载后可以看到题主在上述文件中给大家用word编写了一个很详细的安装教程,如下所示,大家下载后可以根据word中的详细步骤安装驱动即可,省时省力。
这里需注意,如果设备管理器中识别了串口,但在Labview中找不到,同样需要安装该文件,否则就会导致程序运行时正常但找不到串口或报错VISA不存在等。
4. 电脑系统不兼容: win11系统近几年才出现,针对过去库存的串口线无法识别,请联系提供串口线的客服人员下载对应win11驱动。
5. 仪器或电脑自身故障: 排除以上问题后就要确认是否是仪器或者电脑本身的问题了,可关闭电脑的防火墙或仪器防火墙尝试。
④编写通讯程序:这一部分内容将着重在文章第二章中单独讲解。
⑤使用软件完成指令收发测试: 第四步我们将程序编写完成后,就可以尝试在程序中向仪器发送指令并接收了。这一步也着重在第二章中讲解。
⑥搭建采集框架: 根据用户需求完成程序的整体设计。
2. Labview程序设计
上文讲解了硬件连接的一些问题,本文讲解软件相关设计。
2.1 串口通信程序的重要参数解析
这些参数一般在串口程序中可以提前设置,下面针对每个函数讲解参数的原理。
常用函数如下所示:
①VISA配置串口
该函数完成串口的基础属性配置,其中VISA资源名称为串口编号,如“CO3”,可设置波特率、比特、奇偶校验等参数并将配置好的是串口数据向后传递。
- **VISA资源名称:**这个是串口编号。
- 波特率:每秒通讯的数据数量,单位是Bit,这个参数题主之前在数据类型中讲解过,需要补充的同学自行去搜索。
- 数据比特: 传输数据的大小,一般默认为8比特,因为一个字节就是8比特,按照字节来传输。
- 超时时间: 采集或发送一次数据的延迟时间,比如设置为1000ms,如果串口在500ms内采集完成数据了,但由于超时时间的存在,需要再等待500ms直到1000ms延时时间到达后再执行后续程序。这种情况多用于数据刷新较慢的情况,如果采集较快,可能会存在数据包重复或丢包的现象。
②VISA打开
打开VISA资源名称指定端口的会话句柄并返回句柄标识符,该函数用于打开串口操作。
③VISA写入
将字符串数据写入到对应的串口上,并返回实际写入的字节数。
- 写入缓冲区: 向仪器发送的指令。这个指令是指仪器能够识别的指令集,通常有标准型号的仪器都有一个指令集手册manual,可以在指令集中找到自己想要的指令,如果没有这个手册,建议大家网上搜索这个仪器型号并获取其仪器指令手册。
众所周知我们可以将仪器和电脑理解成两个人,指令就是这两个人彼此对话的语言,一问一答。
- 返回数:返回的数据数量。
④VISA读取
读取仪器返回的数据值,以字符串格式显示,注意:读取的字符串字节数为设定的“字节总数”
4. 字节总数: 一次读取多少个字节。
5. 读取缓冲区: 读回来的数据内容。
⑤VISA关闭
释放串口资源占用。
下面是一个万能串口读写框架,各位同学后续读写操作可基于题主的本VI做出更改。
其实这个程序是不完善的,只是粗略的完成了数据的收和发,还是会出现数据报错和连接为不稳定等问题,那么题主针对这个问题,优化了该程序结构并上传了程序。
2.2 串口通信函数的优化稳定程序
2.2.1 采集一次数据程序
程序的下载连接在下面。我把优化后稳定的串口通讯程序发给大家,个人觉得比较好用。该程序对多种仪器具有非常好的兼容性和实用性,下载后可以直接拿来用,当然如果大家想自己写也可以跟着题主来写,下面我直接讲解该程序。
该程序在百度网盘下载,下载方式:
复制下面橙色口令,打开百度网盘手机APP后等待2s即可保存并在电脑端下载:
付兆录琳钉冶炉筱工烙
该文件中中包含五个子程序,串口读写及初始化、关闭等。
①程序总结构
结构包含一个串口的初始化程序,配置串口的基本参数,初始化完成后,将指令输入到串口读写程序中,该VI是写入指令后直接读取返回串口扔给我们的数据,串口关闭采集完成后解除串口占用。内部函数运行期间使用条件结构判断资源错误,一旦有报错不会中断采集而是将程序继续循环以保证采集效率。
仅需输入串口号和指令就能采集到仪器的当前参数,如图是题主输入指令后收到的仪器返回指令。
①串口初始化:
使用属性节点设置串口的波特率,更加稳定,设置更加严谨。
②串口读写
包含了“高级串口读”和“高级串口写”两个vi,采用条件结构保证参数的传递时错误生成后直接判断,若有错误直接跳过该执行步骤,保证了仪器的安全和程序的稳定。
③高级串口写
组成②的基本程序,也可以单独作为写入程序的判断。
④串口高级读
这个结构也已经优化过,这种写法保证程序更准确的在超时时间内结束或得到结束符提示时直接结束程序,逻辑更为清晰,在程序达到超时时释放程序循环并向后传递超时标志。
⑤串口关闭
为防止缓冲区数据遗留,在关闭串口前将数据区缓存清除了。
经测试,代码稳定可靠,报错后不会因弹窗中断程序运行,适合于搭建在实时采集的程序框架中。
2.2.2 连续采集数据的程序
本文提供一种框架程序如下。
先看程序:
其前面板结构如下图所示:
程序运行时,我们输入端口号,输入指令。当我们不操作时,程序一直在获取串口里面的数据(超时分支),当我们点下“发送一次指令”按钮(按钮值改变)时,我们向仪器发送了一次指令,此时程序发送完后又回到超时分支一直获取串口内的数据值。
程序包含两个结构,首先是while循环套事件结构,超时分支内执行一直采集的程序,按钮按下的分支执行发送指令的程序。该结构适合一直采集数据,偶尔手动发送一条指令的情况。此程序也上传至上述网盘中,大家可自行下载使用。
本博客会定时更新技巧,后期会逐步更新相关技巧,找到适合自己的学习方法才是最重要的,希望学习这条路上,我能陪大家一起进步,加油!