问题标签 [pyvisa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
844 浏览

python-3.6 - how to fix 'struct.error: char format requires a bytes object of length 1'

I am trying to use a pyvisa library to write a configuration to a test device. When I am trying to send the command over I get the following error from the utilty function used to talk with the equipment.

"struct.error: char format requires a byte object of length 1"

I have traced down to the code that is throwing the error and am able to reproduce just the error using a small code fragment which I have included below.

When I do this I expect to get a packed byte structure containing

b'#510<10c

but instead I get the following:

Traceback (most recent call last): File "/usr/lib/python3.6/code.py", line 91, in runcode exec(code, self.locals) File "", line 1, in struct.error: char format requires a bytes object of length 1

So them I decided that I would that maybe my format was wrong and that it it should be a 's' instead of a 'c' so I tried the above code again by changing fullfmt from '<10c' to '<10s' and then get the following error message.

Traceback (most recent call last): File "/usr/lib/python3.6/code.py", line 91, in runcode exec(code, self.locals) File "", line 1, in struct.error: pack expected 1 items for packing (got 10)

I'm at a bit of a loss. Any help would be greatly appreciated.

0 投票
1 回答
2757 浏览

python-3.x - Python中的PyVisa.errors.VisaIOError异常处理

我是新手...有人可以告诉我try: ... except: ...在 Python 中执行以下操作的适当方法:

我试过了except pyvisa.errors.VisaIOError:except VisaIOError:还有其他几个,但我发现唯一有效的是except:

0 投票
0 回答
437 浏览

pyvisa - visa.resourcemanager('@py') 不显示任何工具

我有一个硬件设置,其中几台仪器连接到控制计算机。pyvisa默认后端是 National Instruments 提供的 C 实现,找到了所有仪器,而纯pyvisa-pyPython 实现则没有找到任何仪器。

我正在使用最新版本的pyvisapyvisa-py。我使用以下代码搜索仪器,同时使用两个后端。

使用rm_py.list_resources(), I got (),表示未检测到设备。

rm_ni.list_resources()另一方面,我得到:

0 投票
0 回答
400 浏览

python - 如何使用 PyVISA 控制 Tenma 72-2540 PS?

我想用 PyVISA 和 python 脚本控制 Tenma 72-2540 可编程电源。

我可以从“docklight”串行通信器控制该单元。仪器不使用结束终止符(\n 或 \r)。我将pyvisa python脚本中的读写终止符设置为none,但仍然出现超时错误。

我可以连接到设备,但是当我尝试查询 *IDN 时出现错误?或任何其他有响应的命令。

pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): 操作完成前超时。

为什么这适用于“docklight”而不适用于“PyVISA”?我可以毫无问题地控制 Keysight DMM。

0 投票
1 回答
380 浏览

python-3.x - 无法通过 Ethernet-GPIB 适配器连接到功率计

当我尝试运行我的代码时,我收到以下错误: ValueError: Please install linux-gpib to use this resource type。没有名为“gpib”的模块

在尝试使用 pip 和命令行安装 linux-gpib 后,我得到了这个:
找不到满足要求 linux-gpib 的版本(来自版本:)没有为 linux-gpib 找到匹配的发行版

我已经设法通过以太网连接了一个信号发生器,但我没有运气使用与 gpib 相同的原理。

尝试重新安装 python 和 pyvisa 包但没有成功,尝试为这个特定的以太网适配器导入一个包装器:pip install git+git://github.com/nelsond/prologix-gpib-ethernet.git 再次没有运气。我也试过用适配器驱动提供的ip通过TCPIP连接,还是不行。

执行的代码应提供设备的 IDN,例如:Rohde & Schwarz,SMB100A,1406.6000k02...等

0 投票
1 回答
1093 浏览

python - PyVISA - 无法让 GPIB 仪器以编程方式进入远程模式

我在 PyCharm Community Edition 2016.1.4 上运行 Python 3.5.1 和 pyvisa 1.8。

“python -m visa info”的结果如下所示。

当我尝试使用 Keysight 34420A 纳伏表进行测量时,我遇到了一个奇怪的问题。

我正在使用 National Instruments GPIB-US-HS+ 电缆与 34420A 通信。34420A 是 GPIB 地址 22,我已从前面板验证过。

我得到的错误是:pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed。

读取 34420 的内部错误寄存器,我发现: ERR 1: 550 ERR 2: -420

这是唯一被保存的两个错误。

根据 34420A 手册:

错误 550 是“本地命令不允许 仪表在本地模式下接收到 READ? 命令以进行 RS-232 操作。在通过接口发送其他命令之前,您应该始终执行 SYSTem:REMote 命令。”

错误 -420 是“查询 UNTERMINATED 仪表被寻址为通话(即通过接口发送数据)但尚未收到将数据发送到输出缓冲区的命令。例如,您可能执行了 CONFigure 命令(其中不生成数据),然后尝试使用 ENTER 语句从远程接口读取数据”

编辑:当我尝试发送错误 550 消息中提到的 SYSTem:REMote 命令时,我得到:错误 514“命令只允许使用 RS-232:有三个命令只允许使用 RS-232 接口:SYSTem:LOCal , SYSTem:REMote 和 SYSTem:RWLock" 正如标题中提到的,我使用的是 GPIB。另外,正如本文后面提到的,当我查询接口类型时,它返回字符串“HPIB”,这是 GPIB 的原始名称。我不知道为什么在使用 GPIB 时会出现 RS-232 错误,但如果我不得不猜测,错误消息的日期可能是 RS-232 是唯一的方法与仪器通信,并且在引入 HPIB/GPIB 后错误消息从未更新。

ERROR 550 和 ERROR -420 的根本原因似乎是 34420A 需要处于 REMOTE 模式才能进行测量。我的问题是我不知道如何以编程方式将 34420A 置于远程模式。

根据我对 PyVISA 文档的阅读,我认为我需要使用 control_ren() 方法,但我不知道如何使其工作。

编辑:我已经阅读了 Stack Overflow 帖子pyVISA: Return instrument to local mode programmatically。那是我最初指向 control_ren() 的指针。但是,正如我所提到的,我无法弄清楚如何让它工作。

我目前或多或少偶然发现的解决方法是启动 NI-MAX,选择 34420A,然后打开 VISA 测试面板。当我这样做时,34420A 上的 REMOTE 指示灯亮起,我可以进行测量。请注意,我不必向 34420A 发送命令。我只需要打开 NI-MAX 的 VISA 测试面板。

这是“python -m visa info”的结果:

值得一提的是,在我打开 VISA 测试面板后,“python -m visa info”的结果似乎没有改变。

这是一个演示问题的示例程序,我改编自 Keysight 网站上的演示程序。请注意,我可以与 34420A 通信。除此之外,我可以读取 34420A 的 ID 字符串并确定接口类型(它是 HPIB,BTW - HPIB 是 GPIB 的原始名称);我就是无法让仪器进入远程模式。

正如我所提到的,我认为我需要使用“control_ren()”方法,但我不知道如何。

编辑:如果我的 GPIB 仪器处于远程模式(通过使用我的 NI-MAX / VISA 测试面板组件),那么我可以发送“control_ren(2)”或“control_ren(6)”将仪器置于本地模式。那么为什么我不能使用 control_ren() 将仪器置于 REMOTE 模式?

0 投票
0 回答
74 浏览

python-3.x - 轮询仪器以查明最后是否用于测量、测试或校准

我正在使用 LAN 连接来设置仪器,我的目标是在所有设备上存储信息,例如校准时间、上次用于测量或测试的时间的日志。

我尝试在设备手册和 VISA 文档中查找有关此的信息。我想主要是我想知道这是否可能,如果有的话,我可以从哪里开始寻找一些信息

预期的用例:

我将所有仪器都连接到同一个 LAN 网络。我使用计算机一次查找每台设备的信息,并将该信息存储在 CSV 文件及其状态(最后用于测量、测试、校准)中,并基于此创建每台设备的日志。通过这种方式,我可以确定哪些乐器被大量使用,哪些不是。

谢谢

0 投票
2 回答
858 浏览

python - 有没有办法强制关闭打开的 COM 端口设备?

使用 Python,我需要强制关闭使用不同程序打开的 COM 端口。我无法关闭 COM 端口,因为我无法启动与它的会话,因为它已经在其他地方打开了。

如果它是在不同的程序中打开的,有没有办法强制关闭像“COM12”这样的会话?当其他软件 (LabVIEW) 遇到错误时,它会崩溃并经常使 COM 端口保持打开状态,这会阻止我在不手动关闭物理设备的情况下访问它们。最好强制它们关闭,以便它们可以再次正确打开。

0 投票
1 回答
4187 浏览

python - VI_ERROR_TMO (-1073807339): 操作完成前超时

我尝试将我的功率分析仪 Rohde&Schwarz、HMC8015 ('ASRL3::INSTR') 连接到我的计算机,并读取我的设备可以使用 python VISA 显示的任何数据。我的代码行有很多问题,它允许读取我的设备数据。

我的代码是:

它向我展示了:VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

不管超时设置有多大。我猜问题出在语法上, Power_Analyser.query_ascii_values('P?',datatype='s')[0]但我不知道什么是正确的语法。

我查看了我的设备手册: https ://scdn.rohde-schwarz.com/ur/pws/dl_downloads/dl_common_library/dl_manuals/gb_1/h/hmc80115/HMC8015_SCPImanual_en_01.pdf

但似乎没有任何效果,python VISA 没有任何明确的解释,我对此没有任何经验。有谁知道如何解决这个问题?

0 投票
1 回答
684 浏览

python - 是否可以使用 Tkinter 条目作为输入,通过按钮触发器将值传递给信号发生器?

所以我基本上想将不同的值传递给 my ,而不是在我的代码上Signal Generator使用默认值。Frequency/Amplitude

我尝试了小部件的get方法,但Entry没有运气:

我认为它应该是这样的:

但由于它将文本作为字符串返回,所以我应该以某种方式将该字符串传递给按钮。