2. 仪器控制通信基础与VISA体系

在LabVIEW中做仪器控制,真正决定程序能否跑通的往往不是界面,而是“程序通过什么物理通道、用什么地址、按什么协议去和仪器说话”。本节围绕物理总线、VISA统一I/O模型、资源地址命名、MAX配置自检以及VISA读写函数展开,目标是让你能独立完成一台仪器的连接、识别与一次简单读写。

一、物理总线:先看清“路”的差别

仪器与计算机之间的物理连接方式决定了带宽、延迟、拓扑和可挂载设备数量。常见总线可归纳为下表。

总线典型速率拓扑与距离典型场景
GPIB(IEEE-488)约1.5~8 MB/s总线型,最多15台,线缆总长≤20 m台式电源、万用表、老式仪器
串口 RS-232常用9600~115200 bps点对点,约15 mPLC、温控器、简单仪表
USB(USBTMC)USB2.0 约480 Mbps星型,单段5 m现代台式仪器、模块化设备
TCP/IP(LAN)100 Mbps~1 Gbps星型/交换网络,可跨机房远程测控、多机并行
VXI / PXIVXI约40 MB/s,PXI更高机箱背板,插卡式高通道数、高同步测试系统

选择总线的核心判断是:需要多高吞吐、是否需要硬同步、仪器是否固定、布线距离多远。GPIB稳定但慢,USB即插即用,LAN灵活,PXI/VXI适合高密度同步采集。

二、VISA统一I/O接口模型

VISA(Virtual Instrument Software Architecture)是NI等厂商推动的I/O软件标准。它的价值在于:无论底层是GPIB、串口、USB还是TCP/IP,上层调用同一套函数(如VISA Open、VISA Write、VISA Read、VISA Close),只通过“资源地址”区分设备。这样程序结构不随总线改变,换总线时主要改地址和少量属性。

VISA的层次可理解为:应用层(LabVIEW VISA函数)→ VISA库 → 各总线驱动(GPIB驱动、串口驱动、VISA USB、TCP/IP)→ 物理接口 → 仪器。VISA会话(Session)是打开设备后返回的引用,后续读写都基于该会话。

VISA 统一 I/O 模型与资源地址映射 LabVIEW 应用层:VISA Open / Write / Read / Close 同一套函数,不同资源地址 VISA 库(会话管理、属性、超时、终止符) GPIB 驱动 GPIB0::5::INSTR 串口驱动 ASRL3::INSTR USB 驱动 USB0::0x0699::...::INSTR TCP/IP 驱动 TCPIP0::192.168.1.10::INSTR VXI/PXI VXI0::24::INSTR 物理接口与仪器:GPIB电缆 / RS-232 / USB线 / 网线 / 机箱背板 资源地址 = 总线类型 + 板卡/接口号 + 主地址/端口 + INSTR

三、资源地址命名规则

VISA资源地址是“告诉VISA去哪找设备”的字符串,通用形式为:总线类型[板卡号]::设备地址[::INSTR]。常见写法:

GPIB0::5::INSTR          // GPIB板卡0上主地址为5的仪器
ASRL3::INSTR             // COM3串口
USB0::0x0699::0x0368::C012345::INSTR  // 泰克示波器USB
TCPIP0::192.168.1.10::inst0::INSTR    // LAN仪器
VXI0::24::INSTR          // VXI机箱0逻辑地址24

要点:GPIB主地址通常1~30,0一般给控制器;串口用ASRL加COM口号;USB地址含厂商ID、产品ID和序列号;TCP/IP可用IP或主机名,inst0表示第一个VISA仪器会话。地址写错,VISA Open会直接报错,因此地址必须与MAX中识别到的一致。

四、MAX配置与自检

Measurement & Automation Explorer(MAX)是NI的配置与自检工具。操作流程:打开MAX → 展开“设备和接口” → 确认总线驱动已安装 → 连接仪器 → 在对应总线下找到设备 → 右键“自检”(Self-Test)→ 通过后右键“与仪器通信”,发送*IDN?查询身份。若返回厂商、型号、序列号,说明物理连接、地址、终止符均正确。

自检通过只代表VISA能打开并通信,不代表仪器功能正常。建议再用*IDN?和一次实际测量命令(如MEAS:VOLT:DC?)验证。

常见问题:GPIB地址冲突会导致多台仪器无法识别;串口需在MAX中设置波特率、数据位、停止位、校验位和流控,且必须与仪器一致;LAN仪器要确认IP同网段、端口(常用5025)未被防火墙拦截。

五、用VISA函数完成简单读写

以串口读取一台假想温控器为例(示例参数,非实测):波特率9600、8数据位、1停止位、无校验、无流控,仪器在收到MEAS:TEMP?\n后返回温度值加换行。LabVIEW程序框图思路:

  1. VISA Open:资源地址ASRL3::INSTR,返回会话。
  2. VISA Configure Serial Port:设置9600、8、1、None、无流控,超时2000 ms。
  3. VISA Write:写入MEAS:TEMP?\n。
  4. VISA Read:读取字节数设为50,启用终止符\n。
  5. 将返回字符串转数值,显示或记录。
  6. VISA Close:释放会话。
VISA Open("ASRL3::INSTR") → session
VISA Configure Serial Port(session, 9600, 8, 1, None, None)
VISA Write(session, "MEAS:TEMP?\n")
VISA Read(session, 50) → "23.6\n"
VISA Close(session)

结果判断:若返回23.6,说明读写链路正常;若超时,先查地址、波特率、终止符和线序;若返回乱码,多为波特率或数据位不匹配。对GPIB/USB/LAN仪器,流程相同,只是把配置串口换成对应属性设置,地址换成相应资源名。

VISA Read必须给足字节数并设置合理超时。超时太短会误报失败,太长会卡住界面。建议先用MAX通信确认,再写入LabVIEW。

掌握以上内容后,你就具备了“选总线—写地址—MAX自检—VISA读写”的完整基础链路,后续更复杂的仪器驱动与测试平台都建立在这一层之上。