LabVIEW串口通信实际操作

理论基础:
LabVIEW串口通信基础知识

读取串口字节

我们新建一个空白 VI,借助串口调试助手和虚拟串口,在 LabVIEW 中编写的一个最简单的例子:写一个基本的读取串口字节的程序,在程序框图中编程如下:
在这里插入图片描述
注意这里,串口配置放到循环外,不要往复让这个执行。运行程序,在前面板我们可以看到:
在这里插入图片描述
在这里插入图片描述
以下几点必须注意:
(1)串口有个缓冲区,存在计算机内存里,VISA 读取,就是从缓冲区读取数据,读完之后,读取的就不存在缓冲区里了。如果你没读取,那就一直在缓冲区里,直到缓冲区溢出。
(2)如果有多个线程,都有读 VISA,或者一个 while循环 里,多个地方同时读,这样,肯定会有错。记住,保证一个串口,只有一个读,或者写。232 接口里,读和写可以同时进行,因为他是全双工的。而 485 半双工 2 线制时候,请注意,读和写不可以同时,因为是半双工。
(3) 如果你单片机数据是间隔的,而且每次发送的是固定的数据。请自己设定VISA 读取的,字节数,比如设置为 8。这样的话,比延时读取要靠谱的多。
如果我们需要传递的数据是数值型数据呢?我们重新发送:

在这里插入图片描述
在这里插入图片描述
这是怎么回事呢?
LabVIEW 从串口接收数据时要注意:
①假设 LabVIEW 从串口接收到的数据为 “1234”(正常显示模式下),那么这个数据在串口底层的时候其实是这样的二进制数据:00110001 00110010 00110011 00110100。只是在 LabVIEW 中,这些二进制数据是以字符串形式显示出来的,它们的实质还是二进制数据,这几个二进制数据转换为十进制数据分别是“49,50,51,52”,由于字符串都是以ASCII 码形式保存在计算机中的,那么 49,50,51,52 这几个数在 ASCII 表中就表示是字符串“1,2,3,4”。所以这几个数据在 LabVIEW 中就显示为字符串的 1,2,3,4 了。

如果明白这里面的转换关系,那么要进行数据转换时就很容易了,比如上面的VI中,如果LabVIEW 中接收到的是字符串 “XYabcdrfg0123456789”,而原本下位机传送的是数值型数据,只需要将 “XYabcdrfg0123456789” 字符串转换为对应的 ASCII 值就是实际上下位机传上来的数据了。LabVIEW 中将字符串转换为对应的 ASCII 值的函数是 “字符串至字节数组转换” 这个函数,如下所示:
在这里插入图片描述
在这里插入图片描述
这个时候有人要问了,如果我们想把所有的字符串接收完后一次性取出来,也就是将串口没有接收的数据拼接到一起,然后集体提取,怎么办呢?这个,可以用移位寄存器或者反馈节点,然后用连接字符串拼接。我们稍微修改下程序框图,修改部分用红框框起来:

在这里插入图片描述
接下来,我们用串口助手给 Labview程序发生一段文字,看看它的拼接效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当串口资源被占用时,在 LabVIEW 中会报错,提示串口号存在,但当前不能对其进行操作,同时打开 MAX时也可以在对应的串口号下看到同样的错误,这表示这个串口已经被其它程序占用了,比如有时候打开了串口调试助手来调试串口,然后又想在 LabVIEW 里面试一下,这时就会报这个错,因为串口已经被串口调试助手调用了,它不能被二个程序同时使用。解决的方法是关掉其它程序即可,串口调试助手里也可以关闭这个串口。还有一种情况是调试 OK 后生成 EXE,运行 EXE 也出现这个问题,这时是因为串口被原来的 LabVIEW 程序打开,再用 EXE 打开时就会报错,解决办法是关掉原来的 LabVIEW 程序。最好是关掉 LabVIEW。在使用串口的过程中一定要关闭串口(使用 VISA CLOSE),否则程序在退出的时候会报错说数据丢失。

写入和读取串口字节

上一节我们了解了基本的读取串口字节的程序,接下来我们写一个稍微复杂点的程序,来实现即可写入又可读取串口的程序,如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行程序,用Labview程序向串口调试助手发生数据:
在这里插入图片描述
在这里插入图片描述
显然,通信没有问题!

官方示例

我们打开Labview中的一个官方示例,来欣赏下官方的基本串行写入和读取程序,打开程序框图如下:
在这里插入图片描述
再看看对应的前面板如下所示:
在这里插入图片描述

  • 13
    点赞
  • 254
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
附件内容分享的是基于LabVIEW上位机与串口通信,通过LabVIEW上位机显示波形,在分享其实现的源码同时,分享一段LabVIEW上位机与串口通信工作原理。 基于LabVIEW的串口波形上位机界面展示: 定义通信格式及功能 因为数据不算复杂,所以定义简单下位机帧格式:帧头(0xAA) 类型字节 数据低8位 数据高8位 保留字节1 保留字节2 校验字节 如果要传送的数据比较多/复杂,则可以参考ModuleBus协议! 主要功能包括: 对帧中的类型字节进行解析,并多通道显示在示波器上 帧偏差校正(这个一般人可能都没有做,造成数据丢失,而我这只要串口传输的数据没错,就能无错漏的解析每一帧) 实时显示读取的每个字节/双字节/4字节 信号保存,保存文件名自动按时间命名,适合查阅 信号回放 对信号进行解析,用指示灯显示 程序关键点展示: 上面虽然简单,但却是功能的最主要部分,包括帧头查找和错帧处理的程序。错帧发送的情况是:比如从串口中独到的帧并不是从帧头开始而是帧中间开始,如 0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00 其前面一帧可能是这样:... 0xAA(帧头) 0x01(类型) 0x01(数据) 这样,按查找帧头的方法,数据0x12就会丢失,实际数据按理应该是0x02*256+0x01,错帧处理就是将上一帧尾部不足一帧的部分加到下一帧中,这样下一帧就变成了:0xAA(帧头) 0x01(类型) 0x01(数据) 0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00 判断类型过程很简单,使用switch结构就行了(LabVIEW中就是条件结构同时实现了if和switch),编程时就是注意必须设置默认分支就行! 文件保存我使用了数据表,因为它确实简单,这里的亮点是增加了按时间保存的功能,相当于将时间字符串加入到文件名中,这样便于后期对采集的数据进行查找,不至于混乱。 波形回放就是将存储在数据表中的程序重新显示一遍,比较简单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值