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 m | PLC、温控器、简单仪表 |
| USB(USBTMC) | USB2.0 约480 Mbps | 星型,单段5 m | 现代台式仪器、模块化设备 |
| TCP/IP(LAN) | 100 Mbps~1 Gbps | 星型/交换网络,可跨机房 | 远程测控、多机并行 |
| VXI / PXI | VXI约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资源地址是“告诉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?查询身份。若返回厂商、型号、序列号,说明物理连接、地址、终止符均正确。
*IDN?和一次实际测量命令(如MEAS:VOLT:DC?)验证。常见问题:GPIB地址冲突会导致多台仪器无法识别;串口需在MAX中设置波特率、数据位、停止位、校验位和流控,且必须与仪器一致;LAN仪器要确认IP同网段、端口(常用5025)未被防火墙拦截。
五、用VISA函数完成简单读写
以串口读取一台假想温控器为例(示例参数,非实测):波特率9600、8数据位、1停止位、无校验、无流控,仪器在收到MEAS:TEMP?\n后返回温度值加换行。LabVIEW程序框图思路:
- VISA Open:资源地址
ASRL3::INSTR,返回会话。 - VISA Configure Serial Port:设置9600、8、1、None、无流控,超时2000 ms。
- VISA Write:写入
MEAS:TEMP?\n。 - VISA Read:读取字节数设为50,启用终止符
\n。 - 将返回字符串转数值,显示或记录。
- 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仪器,流程相同,只是把配置串口换成对应属性设置,地址换成相应资源名。
掌握以上内容后,你就具备了“选总线—写地址—MAX自检—VISA读写”的完整基础链路,后续更复杂的仪器驱动与测试平台都建立在这一层之上。