在学习Labview和串口的通讯和调试的时候。首先必须先了解一些Labview的基础知识,然后就是了解串口,在调试的过程中,我们需要下位机来辅助我们的程序编写与调试,也就是我们平时使用的单片机,如果没有单片机也不要紧,可以使用虚拟串口来把电脑的串口相连接,这样也可以达到我们的预期效果
- 工欲善其事,必先利其器
让我们先来做一些准备工作
在这里可以把两个虚拟的串口相连接,在上图的左边,可以看到我已经把COM1和COM2相连接,虚拟串口的下载链接我已经放在下面了,大家可以自行下载
链接: https://pan.baidu.com/s/1yEeb3NbJJSXEtgry3zPEKw?pwd=3pwt 提取码: 3pwt
在进行串口调试时必须下载NI-VISA
https://www.ni.com/zh-cn/support/downloads/drivers/download.ni-visa.html#544206
驱动链接放在这了下载完成之后需要用破解软件进行破解具体流程与破解Labciew时相同,点绿即可
串口调试同时也离不开调试工具,这是我常用的串口调试工具也将下载链接放在下面了
链接: https://pan.baidu.com/s/1S894W_KrHFf2F_dXLRu3Yw?pwd=9nqf 提取码: 9nqf
当以上三个步骤都完成了之后我们就可以进行Labview程序的编写了
注:演示使用Labview2024
- 上手编程
首先创建一个新的vi
创建完了新的vi以后我们在前面板上放置一个VISA资源名称(也就是端口)
创建好端口后我们再放置一个显示控件,用于显示接收的数据;一个输入控件,用于发送数据,再创建一个布尔用于发送
进行到这里可以使用修饰控件对我们的框架进行修饰使它看起来更加的美观
前面板布置完成然后我们完成程序框图的搭建。
到手一个程序最先做的应该就是放置一个while,使程序可以重复运行 接着将我们配置串口助手所需要的控件拉出来
然后搭出一个最简单的框架,再给他加一个发送的条件结构,简单的连续过后基本的程序框架就搭建完成了。最后也不要忘记while里放置一个延时,防止程序卡死
当我们进行到这一步时发现程序任然无法运行,还存在错误
问题在于visa读取有未连接或错误的接线端
这里需要注意,这个visa读取控件的字节总数是必须要接线的,如果不接或接错就会出现刚才上述问题
那要如何去解决?字节总数这部分又该怎么去解决?这里我有两种方法
- 直接放置常量,这种办法快捷
可以在放置你个visa串口字节数控件
这个控件可以把读取缓冲区的数据读取,如下图一样把他接在电路中即可
最后把串口和终止符连上一个简易的串口助手就完成了
注意调试工具的波特率需要和Labview程序的波特率相同,默认未配置的波特率为9600
我们使用调试工具进行发值,发现发送值只能停留一段很短的时间,这是因为我们的程序只能接受一段时间,而如果让他显示更多的时间,改变当时设置防止程序卡死的延时时间即可
值得注意的是:如果这里在运行的时候报了读取的错误我总结了几个可疑的地方
- 串口冲突,两个地方连接了相同的串口
- 延时时间设置不正确,程序卡死
- 虚拟串口设置有问题
- 串口长期未接收到数据
修改while延时时间后就可以达到我们想要延长显示时间的目的
但是单单只是延长显示时间是不够的我们要想办法把接收到的数据一直显示在接收的显示控件里
想要达到这一效果只需要在接收部分加上一个条件判断即可
如下图所示,我没有改变延时的时间,没有在调试工具定时发送,但是可以长期保持在接收界面里
解决了这一问题之后,我们尝试用自制的串口助手对调试工具发数据
多次发送,调试工具可以把每一次的结果保留在显示界面上,而我们的串口助手只能保留最近一次的结果,如何才可以做到这一点呢?我有两招来解决
1.我们可以用连接字符串控件与接收的局部变量来完成
像这样连接就可以达到我们预期的效果
- 我们可以用连接字符串控件与反馈节点来完成
像这样
完美解决
如何发送16进制呢?其实非常简单
把输入控件处转换为16进制显示即可
注意调试工具处也要转换成16进制
发送部分同理
除了上述的方法,我们还可以从Labview自带的查找范例
双击即可打开范例
但是在使用的过程中我发现了这个范例有不足之处,他只能做到单收单发,但是稍加修改也能达到理想的效果,程序的思路是,while循环每进行一次都会计数,利用这一点,我们可以对循环次数进行判断,当循环次数为单数时程序进入读取状态,当循环次数为双数时程序进入写入状态。
这就是第二种方法,相比较第一种这种更快跟方便
上述的调试都是介于虚拟串口调试,我们自制的串口用于硬件上也是可以的
用下载器把电脑与单片机连接
调试的思路是通过自制的串口助手对单片机开发板发值,电亮led灯
这是发送06的结果
这是发送0f的结果
然后就是验证串口助手是否可以接收到单片机发送的数据
程序的思路是每当按键按下,都会发送一个0xff
链接: https://pan.baidu.com/s/1gIlobwjBXSnPL3CC0Atosg?pwd=6cjy 提取码: 6cjy
本次硬件调试的单片机代码我已上传至网盘
Labview 程序链接,这是我的串口助手: https://pan.baidu.com/s/1ehjF7ZN43wdzDhZGvQUBaQ?pwd=iw2t 提取码: iw2t