通过 Engee 中的 VISA 与外部设备协作
页面进行中。 |
VISA(虚拟仪器软件架构)是一种规范,旨在统一与测量仪器的交互。
VISA 为与不同类型的硬件(如 USB、以太网、GPIB 和其他接口)进行通信提供了一个抽象概念。在 Engee 中,VISA 用于集成第三方仪器,并允许在不离开 Engee 的情况下通过 Julia 代码对其进行控制。
要在 Engee 中开始使用 VISA,必须连接外部设备支持包,启动客户端程序,并在其中插入用于 Engee 侧服务器操作的 URL,详情请参见文章。
然后,需要创建一个 VISA 对象,用于与测量仪器进行交互:
visa = VISA.Visa()
使用 VISA 的基本方法
以下方法用于与通过 VISA 规范连接的设备一起工作:
-
VISA.close_instrument
- 为通过 VISA 规范连接的设备释放总线。 -
VISA.close_session
- 关闭 VISA 操作会话。 -
VISA.create_instrument
- 创建通过指定端口连接的仪器实例。 -
VISA.create_session
- 创建 VISA 工作会话。 -
VISA.flush
- 清除设备的 I/O 缓冲区。 -
VISA.get_ports
- 获取可用物理端口列表。 -
VISA.read
- 从设备读取数据。 -
VISA.readbinblock
- 从设备读取二进制数据。 -
VISA.visatrigger
- 为设备提供中断命令。 -
VISA.write
- 向设备写入信息。 -
VISA.writebinblock
- 向设备写入二进制数据。 -
VISA.writeeread
- 向设备写入信息并读取响应。
有关每种方法的详细说明,请参阅文章VISA 软件控制 。
使用 VISA 的分步示例
让我们来看一个例子:创建会话、获取端口列表、创建设备、向设备写入命令并读取响应:
-
创建会话以使用 VISA 设备 - 通过指定硬件实现(如
@py
)来创建会话:VISA.create_session(visa, "@py")
有关硬件实现的更多信息,请访问链接。 -
获取可用物理端口列表 - 获取可用端口列表并选择最后一个:
ports = VISA.get_ports(visa).data port = last(ports)
-
在指定端口上创建仪器抽象 - 创建一个与所选端口协同工作的仪器:
VISA.create_instrument(visa, port)
如果需要使用多个仪器,请使用另一个设备的端口重复 VISA.create_instrument(visa, port)
命令。 -
发送信息重置仪器 - 发送命令重置仪器:
VISA.write(visa, port, "*RST;:SYSTEM:LOCK OFF", "")
-
向仪器写入数据并延迟读取响应 - 发送命令并延迟 1.2 秒读取响应:
writeread_result = VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2).data
-
从仪器读取信息 - 从仪器读取数据(确保仪器发送数据):
read_result = VISA.read(visa, port, "").data
-
向仪器写入二进制数据 - 向仪器写入两个字节:
VISA.writebinblock(visa, port, [0x01, 0x00])
-
从仪器读取二进制数据 - 从仪器读取 8 个字节的数据:
bytes = VISA.readbinblock(visa, port, 8).data
-
在设备中启动中断 - 发送中断命令(某些设备可能没有):
VISA.visatrigger(visa, port)
-
清除设备中的 I/O 写缓冲区 - 清除写缓冲区(某些设备可能无法使用):
VISA.flush(visa, port, "flush_write_buffer")
-
为仪器清除总线 - 清除总线,允许其他仪器使用端口:
VISA.close_instrument(visa, port)
-
关闭仪器会话 - 关闭 VISA 会话:
VISA.close_session(visa)
可能出现的问题及其解决方案
-
端口映射问题 - 如果
VISA.get_ports
方法不返回可用端口,请确保用户端有可用的测量设备:-
在 Linux 中,与设备交互可能需要以
sudo
权限运行已安装的客户端程序,或将用户添加到dialout
组。 -
在 Windows 系统中,检查是否安装了所有必需的驱动程序,必要时以管理员身份运行客户端程序。
-
-
以太网设备问题 - 要使用以太网连接,请确保接口配置正确。如果端口以`"TCPIP::INSTR"`格式返回,则使用`VISA.create_instrument`函数创建仪器:
VISA.create_instrument(visa, "TCPIP::INSTR")
-
阻塞传输总线 - 如果调用`VISA.write`后下一次调用失败,则传输总线可能被阻塞。使用 `VISA.read`释放资源。
-
驱动程序冲突 - 如果仪器驱动程序与 VISA 实现驱动程序冲突,请检查用户端仪器日志,以确定缺少的驱动程序。