labview入门到出家9(进阶)——串口通讯

Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多。(很多开发者习惯把UART称为232,但很多萌新容易被误导。其实UART≠RS232,UART是TTL电平的,一般和单片机通讯时用的是TTL电平的串口信号。232,485和UART的电平都不同,这里不多说,不清楚的同仁找度娘呗)。串口通讯在应用上已经很成熟,无外乎是初始化配置波特率,数据位,停止位等,然后往寄存器或者往某个封装好的串口读写函数中,读取或写入对应的数据。而Labview对串口的运行显得更加的简单。

1、初始化配置

仪器IO->串口->VISA配置串口。VISA是NI自己开发的虚拟仪器软件包,包括还有其他的如DAQ,NI-Vision数据采集,视觉之类的软件包。这些都是和NI自主研发的仪器相配套的,也就是如果使用NI的采集卡或者其他仪器板卡,你可以直接使用DAQ的工具包对采集卡直接操作,并且配套有现成的程序例程,可以大大加快监控仪器或者产线自动化设备的开发。当然只要是标准的通讯设备,也是可以用NI工具包的。这里就拿串口通讯示例一下吧。

右键新建输入常量,端口号,波特率,数据位,检验方式等。一般按默认设置即可,如有特殊配置,请点击右侧“?”的按键,挪到该函数上了解各个接口的作用后自行配置。

2、添加“VISA打开”函数

仪器IO->VISA->高级VISA->VISA打开。

配置完串口后加20ms延时是为了连接更稳定一些,一般可不加。但是按以往的经验,不加一点延时的话,在某些快速打开和关闭串口的逻辑功能中,会出现偶尔通讯不上的情况,加了延时后该情况没有再复现。

3、添加“VISA写入”和“VISA读取”函数

仪器IO->VISA->VISA写入;仪器IO->VISA->VISA读取。

在“VISA读取”前面添加一个串口引用的属性节点,添加串口读取的数据量(字节数)。

该Serial Settings ->Number of Bytes at Serial Port属性节点,可预先获取串口缓存的数据大小。如果不给“VISA读取”输入数据大小参数的话,串口缓存上数据可能会没读完,需要读取两次以上(当然可以用程序逻辑处理这个问题,不过本次示例是单步写入读取串口数据,我们还是稳妥一点)

最后再添加一个“VISA关闭”,结束串口通讯。

4、添加“VISA写入”的数据

如果直接添加字符串数据到“VISA写入”函数,从单片机或者虚拟串口上读取的将是一组乱码。在Labview中,该函数写入的数据应该要转成字节数组,再由字节数组转成16进制的字符串发送到电脑串口上,这样在单片机或在虚拟串口上读取的才是16进制的一组数据。否则传进去的将是这组字符对应的ASCII码。

操作如下所示:将要传输的数据通过 创建数组(编程->数组->创建数组)的方式生成字节数据,再通过字节数组转字符串(编程->字符串->路径/数组/字符串转换->字节数组转字符串)的方式生成16进制的字符串给到“VISA写入”。

最后选择端口 如左侧所示COM8,运行即可发送010203的串口数据,如果单片机或者虚拟串口没有返回数据,则读取的数据为空。

将左侧数值常量转成u8类型。

大家可以尝试用状态机写一个串口助手,或者做个虚拟示波器的小工具,由单片机ADC采集电压,将电压值通过串口传给Labview上位机显示电压波形。串口助手我有空上传一个自己写的。虚拟示波器的话,倒有一个以前的毕业设计,如果有需要的话可以留下邮箱,我有空单独发过去,可能会缺少一些库,但是逻辑参考一下就好了。(脸皮较薄,以前写的代码太乱,就不放在的资源上了,有兴趣的我单独给,哈哈。。。。。手动滑稽)

经验分享 程序员 微信小程序 职场和发展