基于 LabVIEW 串口通信的研究

摘 要: LabVIEW 是 NI 公司开发的图形化编程开发平台, 具备强大的实时数据处理功能与显示功能。通常情况下, 在 LabVIEW 开发环境中进行串口通信使用 VISA 和 ActiveX 控件两种方式均可以进行, 通过结合实例比较, 发现 VISA 方式只能提供查询缓冲区方式接收数据, 这需要占用大量的 CPU 时间, 且实时性不佳。相对而言, 使用微软提供的 MSCOM M32 控件的中断函数处理功能, 可以实现中断方式的接收数据。同时, MSCOMM32 控件可以单独设置串口的每一个引脚, 便于实现高级的用户自定义功能。
关键词: LabVIEW; 串口; 通信; VISA; ActiveX

0 引 言

在现场总线普及之前, 非常多的仪表或者设备都是通过 RS232 或者 RS 485 通讯接口来和计算机进行通讯。串口是常用的计算机与外部串行设备之间的数据传输通道, 通过 RS 232 串口总线与 PC 计算机组成虚拟仪器系统, 仍是目前虚拟仪器的构成方式之一, 主要适用于速度较低的测试系统, 它具有接口简单, 使用方便的特点。
在应用开发层, 开发者总是希望使用符合行业标准的软件开发环境来进行整个系统软件的开发。在虚拟仪器领域, 当前最引人注目的开发语言是N I 公司的LabVIEW( laboratory virtual instrument engineering workbench, 实验室虚拟仪器集成环境)。LabVIEW 作为一个专为测试测量设计的编程语言, 使用了工程师们最熟悉的图形化的编程方式, 能够帮助用户高效和快速的开发测试应用。伴随着 LabV IEW2009 的推出, 使用 LabVIEW 进行数据采集和仪器控制的功能被进一步的加强, 目前, LabVIEW 已逐渐地成为测试测量行业标准的软件开发平台。在L abVIEW 中实现串行通信的方式主要有利用VISA 和使用 Act iveX 控件两种。

1 使用 VISA 实现串行通信

虚拟仪器的软件系统框架包括三个部分: VISA 库、仪器驱动程序、应用软件。VISA 作为测试程序和数据传输总线的中间层, 为应用程序和仪器总线的通信建立了通道。VISAI/ O 库为应用程序的建立提供了一致的接口, 因而应用程序不需要关心实际的数据传输介质是GPIB 电缆还是串口线, 可以认为在 VISA 库中包含了与各种接口进行连接所需的程序。VISA 是应用于仪器编程的标准 I/O 应用程序接口( API) , V ISA 本身并不具有仪器编程能力, VISA 是调用低层驱动器的高层 API 。使用时需要安装 VISA 驱动程序。

1. 1 LabVIEW串口 VI 介绍

LabVIEW 的串口通讯 VI 位于 InstrumentI/ O Plat te 的 Serial 中, 常用的 VI 节点[ 4] 如表 1 所示:

1. 2 开发流程

在 LabV IEW 环境中使用串口与在其他开发环境中开发过程类似, 基本的流程框如图 1 所示。首先需要调用 VISA Configure Serial Port 完成串口参数的设置, 包括串口资源分配、波特率、数据位、停止位、校验位和流控等, 如图 2 所示。

如果初始化没有问题, 就可以使用这个串口进行数据收发。发送数据使用 VISA Write, 如图 3 所示。接收数据使用V ISA Read, 如图 4 所示。在接收数据之前需要使用V ISA Bytes at Serial Port 查询当前串口接收缓冲区中的数据字节数, 如果 VISA Read 要读取的字节数大于缓冲区中的数据字节数, VISA Read 操作将一直等待, 直至T imeout 或者缓冲区中的数据字节数达到要求的字节数。当然也可以分批读取接收缓冲区或者只从中读取一定字节的数据。

在某些特殊情况下, 需要设置串口接收/ 发送缓冲区的大小, 此时可以使用 VISA Set I/ O Buff er Size; 而使用VISA Flush I/ O Buf fer 则可以清空接收与发送缓冲区。在串口使用结束后, 使用 VISA Close 结束与 VISA resource name 指定的串口之间的会话。

2 使用 ActiveX 控件实现串行通信

ActiveX 通常翻译为 微软倡导的网络化多媒体对象技术 , 实际上它是一整套跨越编程语言的软件开发方法与规范。利用 LabV IEW 的 ActiveX 控件容器, 可以调用
第三方提供的 ActiveX 控件, 从而使程序功能更加强大,
节省程序开发时间[6] 。

2. 1 MSCOMM32 控件

M SComm32 控件, 即 M icrosoft Communicat ion Control, 是 M icrosoft 为简化 Windows 下串口通信而专门提供的 ActiveX 控件如图 5 所示。它提供了一系列标准通信命令的使用接口, 利用它可以建立与串口通信, 并可以通过串口连接到其他通信设备、发出命令、交换数据以及监视和响应串行连接中发生的事件和错误。它使用户能够方便地访问 Windows 串行通信驱动程序的大多数特
性, 包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等, 使得此控件在工业控制上需要串行通信的场合变得流行起来。

M SComm32 控件共有 27 个属性。使用前一定要对常用的属性进行设置。指定串口号, 设置通信参数, 指定接收缓冲区大小, 清空接收缓冲区, 设置数据获取方式, 设置读取方式, 打开指定的串口。打开所需串口后, 就考虑串口通信的时机。在接收或发送数据过程中, 可能需要监视并响应一些事件和错误, 所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用 OnComm 事件和
Com mEvent 属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发 OnComm 事件, Corn mEvent属性的值将被改变, 应用程序通过检查 CommEvent 属性值并作出相应的反应。串口的中断需要通过 Register ForEvents 来注册中断事件, 串口使用完毕需要关闭串口, 通
过 U nregister ForEvents 撤销对中断节点的注册, 并通过Close Ref erience 关闭 Axt ivex 自动化控件。
由于 LabVIEW 对于 ActiveX 良好的支持性, 我们可以很方便的借助 Act iveX 技术来扩展 LabVIEW 的功能。在串口通信方面, 我们采用微软提供的 M scomm32 控件来实现串口的通信。将 M SCOM M32. OCX 文件注册并且导入到 LabVIEW 当中, 这样我 们的 U SER. CONTROL 下面有 M icrosoft Communication Control. ctl。这样我们可以很方便的使用 A ctiveX 组件从而实现串口通信。

2. 2 MSCOMM32 控件初始化

将串口控件放置在 Front Panel 上, 在框图程序中用控件属性就可以对其进行编程, 实现所需要的功能。在实际操 作的 时候, 一个 串口 资源 只可 以有 一个M SCOM M 控件与之相对应, 如果在一个程序中同时需要进行多个串口的通信, 则必须调出多个 M SCOMM控件进行编程。
首先把 LabV IEW 中切换到框图程序环境, 可以发现一个带有 M SCOM M 字样的控件。现在就可以按照VC+ + 等代码式编程语言的编程思想, 对此控件进行属 性 的 配 置。 在
A I
LFU NCT 10N S >
>
C0M M U NICA T ION >
>
Axt ivex 下, 调 出 Property
Node 节点, 放于 Block Diagram 中。如果把其 Refum 和M SCOM M 32 控件的 Refum 相联接, 就可以发现其对应的所有属性函数, 只要按照要求设置其属性, 就可以操作这个控件了。

2. 3 数据的发送和接收

MSGOM M32 控件可以接收二进制字节型数据或者字符串, 这个可以通过 Input M ode 属性设置, 0 默认为ComInputM odeT ext, l 为 ComlnputM ode Binary。使用out put 函数发送数据, 使用 input 函数接收接收数据。在数据的发送和接收前的串口初始化程序里需要提前设置好发送缓存和接收缓存的大小, 控件默认为 InBufferSize1024byte, Out Buff erS ize= 512byte。
在发送数据时, 如果是静态数据, 可以直接通过一个 H ex String 的常数与数据发送区联接, 或者通过一个 10 进制的常量经 Numeric to HexS tring 的转换送数据发送区; 如果是动态数据, 比如: D7H 、F5H、00H、01H, 则需要通过字节型数组进行数据的转换后, 进行发送。
Variant to Data 节点和 T o Variant 节点存放在 ALLFUNCT IONS> > COM MU NICAT ION > > Axtivex 下。数据接收的时候, 通过V ariant tOData 节点把变体数据转换成 LabV IEW 可以显示的数据类型, 如果是字节型数组就设置转换为 ByteArray 类型; 如果是字符型数据, 就转换成 String 格式。串口数据的转换界面和流程图, 如图6、7 所示。

2. 4 开发应用实例

某型武器的指挥控制检测系统由 PC 机和 PLC 通过串口连接。系统的 PC 机部分, 用 LabV IEW 绘制系统的检测界面和定义系统的全局变量。下位机 PLC 使用A DVA NT ECH公司生产的 ADAM 5510、ADAM5050 数字 I/ O 模块与 ADAM 5017 模拟 I/ O 模块。经过反复试验, 使用M SComm32 控件方式进行串口通信控制时, 对系统资源占用低, 实时性强, 工作稳定, 较好地满足了项目预期的检测功能。如图 8 所示, 依据采集来的数据, 本系统可实时显示指控系统末端的能量输出变化情况, 当数据值超出安全范围时, 本系统将发出声光报警。

3 结束语

LabVIEW 是一种图形化编程语言, 专门用于计算机测控技术。LabVIEW 内置了串口通信的 8 个功能函数, 可以分别实现串口初始化、串口写、串口读、检测串口缓存、中断 以 及 关闭 串 口 等 功能。但 是, 比 较而 言, M SCOMM 32 控件具备中断函数处理功能, 可以实现中断方式的接收数据, 而 LabV IEW 自带的串口通信功能节点却只可以实现查询式的数据接收。查询方式, 即一个进程中的某一线程定时地查询串口的接收缓冲区, 如果缓冲区中有数据, 就读取数据; 若缓冲区中没有数据, 该线程将继续执行, 因此会占用大量的 CPU 时间。在一些实时性要求高的场合, 采用查询处理不符合现场需要。另外, 由于M SCOMM 32 控件可以单独设置串口的每一个引脚, 便于实现高级的用户自定义功能, 而 LabVlEW 自带的串口通信节点却无法实现。
采用 LabVIEW 调用 M SCOMM 32. OCX 可以实现中断式的串口数据接收, 扩展了 LabVIEW 软件自带的串口通信方式; 同时由于 LabVIEW 具有事件处理结构, 也可以采用事件思想发送数据; 再加上 LabVIEW 的打包程序, 就可以快速生成脱离 LabV IEW 而运行的安装软件。综合使用, 就可以根据应用的需要, 利用 LabVIEW的图形化编程语言的优势, 快速的构建一个基于数据流的
串口通信软件, 从而加快项目进程。
总之, 使用串口通信方式对仪器进行控制具有简单易行、成本低的优点, 希望本文对串口节点的分析可作为串口通信程序设计的参考。

相关推荐
电气_空空2 小时前
基于 LabVIEW 的 PID 控制系统设计与实现
嵌入式硬件·毕业设计·labview
weixin_456808382 小时前
【沁恒蓝牙开发】关闭独立看门狗
c语言·单片机·嵌入式硬件
weixin_456808382 小时前
【沁恒蓝牙开发】拓展广播 Code PHY-从机
c语言·嵌入式硬件
LCG元2 小时前
STM32实战:基于DHT11的智能温湿度监测与OLED显示
stm32·单片机·嵌入式硬件
qq_411262423 小时前
ESP32-C3 内置 USB Serial/JTAG 在 Windows下,不同板子不同端口
stm32·单片机·嵌入式硬件
最好有梦想~3 小时前
嵌入式Linux Lua使用ZeroBrane远程调试
linux·嵌入式硬件·lua
aini_lovee3 小时前
基于STM32的光电感烟火灾报警器设计
stm32·单片机·嵌入式硬件
拒朽3 小时前
51单片机学习(六)模块化编程和LCD调试工具
嵌入式硬件·学习·51单片机
somi74 小时前
ARM-09-I.MX6U-I2C
单片机·嵌入式硬件·i2c·自用