VISA,(Virtual Instrument Software Architecture) 就像一个“万能遥控器”。
场景设定:
想象你家里的娱乐设备越来越多:
- 一台老式的索尼电视机(只有红外遥控,且是特殊编码格式)-> 相当于 GPIB仪器
- 一台新的小米智能电视(支持Wi-Fi和蓝牙控制)-> 相当于 LAN(LXI)或USB仪器
- 一个音响功放(用特定的串行接口控制,比如RS-232)-> 相当于 串口仪器
- 一台蓝光播放器(用另一种红外遥控)-> 相当于另一台 GPIB仪器
你想用一个手机App来控制所有这些设备,实现一键观影模式(打开电视、功放、播放器,并切换正确输入源)。
如果没有VISA(传统方式):
你需要:
- 为索尼电视编写红外编码驱动程序,并连接一个红外发射器。
- 为小米电视调用其Wi-Fi API,可能还要处理登录和协议。
- 为功放编写串口通信代码,发送特定的二进制命令。
- 为蓝光播放器再编写一套红外编码。
你需要管理四种不同的通信方式,每种都有其独特的协议和物理接口,非常麻烦。
有了VISA(万能遥控器):
你只需要一个“万能遥控器”App(相当于你的测试程序),这个App内部集成了 VISA 库。
VISA 作为“万能遥控器”的核心功能和特性:
- 统一的控制接口(核心功能)
- 功能:在App里,你控制任何设备都调用同样的函数,比如
SendCommand(device, "POWER ON")。 - 技术对应:VISA 提供统一的
viWrite、viRead等函数,无论底层是红外、Wi-Fi还是串口。
- 功能:在App里,你控制任何设备都调用同样的函数,比如
- 设备发现与资源描述
- 功能:App能扫描并列出家里所有可控制的设备,每个设备有一个唯一标识,比如
IR::SONY_TV、WIFI::XIAOMI_TV、COM3::AMP。 - 技术对应:VISA 资源管理器可以枚举各种总线上的仪器,并给出标准资源字符串。
- 功能:App能扫描并列出家里所有可控制的设备,每个设备有一个唯一标识,比如
- 通信协议转换
- 功能:当你发送“POWER ON”命令时,VISA底层会根据设备类型自动转换:
- 对索尼电视:转换为红外编码并发射。
- 对小米电视:转换为Wi-Fi JSON报文发送。
- 对功放:转换为串口指令并发送。
- 技术对应:VISA 的厂商驱动负责将标准VISA命令转换为仪器特定的协议。
- 功能:当你发送“POWER ON”命令时,VISA底层会根据设备类型自动转换:
- 高级控制功能
- 功能:你可以设置命令超时时间(比如5秒没响应就报错),可以监听设备发来的事件(比如电视开机完成发送事件),可以一次读取多行响应等。
- 技术对应:VISA 的超时、事件、读写终止符等属性设置。
- 厂商与平台无关性
- 功能:这个万能遥控器App可以在不同手机(iOS或Android)上运行,并且可以控制不同品牌的设备,因为它的底层遵循统一的VISA标准。
- 技术对应:VISA 是一个开放标准,NI、Keysight等厂商的实现兼容,使得同一套代码在不同系统和不同仪器上都能工作。
总结:
通过这个“万能遥控器”(VISA),你作为用户(开发者)只需要学习一种控制方式(一套API),就可以管理所有设备(仪器)。当你新增一个设备(比如投影仪)时,只要这个设备支持VISA(即能被万能遥控器兼容),你就可以用同样的方式控制它,而不需要重新学习新的通信方式。
所以,VISA 在仪器控制中的作用就是:将各种仪器的通信细节抽象化,提供统一、简洁、可靠的编程接口,极大地降低了多仪器系统的开发和维护成本。