LabVIEW串口通信
- Instrument I/O
利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线)、Ethernet(以太网)接口、RS-232(标准串行接口总线)/RS-485 等 I/O 仪器设备进行控制。在LabVIEW的仪器I/O子模板上提供了多种图标可对各种I/O仪器设备进行驱动。
在LabVIEW功能模板的Instrument I/O→Serial中包含进行串行通信操作的多个功能模块,如下图所示,分别可实现串口缓存检测、串口写、串口读、中断、串口设置、关闭串口驱动等功能。
利用计算机的RS-232串行口,实现双机通信的硬件连接线路如下图所示,图中采用的是最简单的三线制连接方式。TxD 为发送数据端,RxD 为接收数据端,GND 为接地端。
- VISA
VISA是Virtual Instrument Software Architecture的简称,是由组成 VXI plug & play 系统联盟的 35 家最大的仪器仪表公司所统一制定的 I/O 接口软件标准及其相关规范的总称。一般称这个 I/O 函数库为 VISA 库(用于仪器编程的标准 I/O 函数库)。VISA 函数库是计算机与仪器之间的标准软件通信接口,用以实现对仪器的程控。VISA对于测试软件开发者来说是一个可调用的操作函数集,本身并不提供仪器编程能力,它只是一个高层 API,通过调用低层的驱动程序来控制仪器。NI-VISA 的层次结构如下图所示:
VISA是整个仪器行业用于仪器驱动程序的标准 API ,用户可以用一个 API 控制包括 VXI、GPIB、RS-232 串口、USB(通用串行通信总线)串口等不同类型的仪器(根据所使用的仪器类型调用相应的驱动程序)。使用 VISA 有许多优点,它方便用户在不同的平台对不同类型的仪器进行开发移植及升级测控系统。
1. 大多数的VISA功能模块使用了VISA resource name控制参数,该参数标识了与之通信的设备名称以及进行I/O操作必须的配置信息。MAX可用于配置VISA资源名称。
2. 使VISA资源名称指定的串口按特定设置初始化。具体信息可参考LabVIEW的帮助文档
3. VISA Write 模块把write buffer中的字符串(命令或数据)写入VISA Resource Name端参数指定的设备。return count返回实际传送的字节数。error in 和 error out 字串包含出错状况。
4. VISA Read函数读取由 VISA Resource Name指定设备中的数据。byte count 指明读入 read buffer 中的字节数。
5. VISA Bytes at Serial Port返回指定串口的输入缓冲区的字节数。
6. 打开与 VISA 资源的会话连接也会占用计算机的系统资源,因此当VISA 程序结束时,必须关闭所有打开的会话通道。LabVIEW 为此提供了VISA Close函数。该函数关闭由 VISA Resource Name 端参数指定的设备的通信过程,释放 VISA Session占用的计算机系统资源。
- 一个简单的串口通信程序
在定时模块中找到等待(ms)子模块,放置在while循环中进行延时。等待指定长度的毫秒数,并返回毫秒计时器的值。计时器的精度由系统确定,依据使用平台的不同,精度有可能低于1毫秒。
添加布尔类型的确定按钮和停止按钮,更改属性为“保持转换直到释放”,即按下去的时候会变true,释放会变false
添加4个数值常量:编程(Programming)→数值(Numeric)→ 数值常量(数值常量(Numeric Constant),值分别为9600(波特率:波特率定义为每秒钟传送二进制数码的位数,以位/秒(bit/s)为单位,亦称“波特”。)、8(数据位)、0(校验位,无)、10(对应停止位1)。
添加一个比较函数,将输入缓冲区的字节数与0比较,只有当串口接收缓冲区的数据个数不等于 0 时,才将数据读入到接收区。
注意在条件结构(case structure)的false条件下也要接好到VISA Close模块的线,否则会出错。
将全部模块连接好之后,点击运行按钮。如果运行程序发现弹出如下错误,说明没有安装VISA驱动,可以在这里下载合适的VISA驱动程序。
装完后可以打开NI MAX,在软件这个模块下可以查看目前已经安装的一些软件,可以看到NI-VISA已经装好。NI MAX即NI的配置管理软件(Measurement & Automation Explorer),主要用来配置管理本机和远程系统上的各种软硬件资源。它可以执行系统诊断,添加新的通道、接口和虚拟通道,还可以查看连接在系统上的设备和仪器。
再次运行还是弹出了错误,如下图所示。网上查找了相关原因和解决方法,很可能是由于串口被占用导致。按照网上的方法通过删除注册表中的一个数值项来清除串口配置:在“运行”对话框中输入“regedit”进入注册表;然后进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter这时我们可以找到该数值项:ComDB,它的值代表目前使用中的串口端号。比如1d,它的二进制:0001 1101,则从右往左数代表第1,3,4,5端口被占用。这样我们只需要把ComDB这个数据项删除,关闭注册表(不用重启电脑)即可。然后在设备管理器中通过串口“属性”中的“高级”来重新配置端口的编号。
将USB转串口线的RXD和TXD接到一起进行单机测试,如下图所示,在发送区写入字符串"hello,world!"之后点击发送字符按钮发送,接收区会显示发送的字符串。
参考: