问题标签 [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.
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.
python-3.x - Python中的PyVisa.errors.VisaIOError异常处理
我是新手...有人可以告诉我try: ... except: ...
在 Python 中执行以下操作的适当方法:
我试过了except pyvisa.errors.VisaIOError:
,except VisaIOError:
还有其他几个,但我发现唯一有效的是except:
。
pyvisa - visa.resourcemanager('@py') 不显示任何工具
我有一个硬件设置,其中几台仪器连接到控制计算机。pyvisa
默认后端是 National Instruments 提供的 C 实现,找到了所有仪器,而纯pyvisa-py
Python 实现则没有找到任何仪器。
我正在使用最新版本的pyvisa
和pyvisa-py
。我使用以下代码搜索仪器,同时使用两个后端。
使用rm_py.list_resources()
, I got ()
,表示未检测到设备。
rm_ni.list_resources()
另一方面,我得到:
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。
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...等
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 模式?
- 使用“control_ren(6)”将仪器置于本地模式的基本思想来自pyVISA:以编程方式将仪器返回到本地模式
- 值 2 对应于 pyvisa.constants.VI_GPIB_REN_DEASSERT_GTL
- 值 6 对应于 pyvisa.constants.VI_GPIB_REN_ADDRESS_GTL
- GTL = 转到本地
python-3.x - 轮询仪器以查明最后是否用于测量、测试或校准
我正在使用 LAN 连接来设置仪器,我的目标是在所有设备上存储信息,例如校准时间、上次用于测量或测试的时间的日志。
我尝试在设备手册和 VISA 文档中查找有关此的信息。我想主要是我想知道这是否可能,如果有的话,我可以从哪里开始寻找一些信息
预期的用例:
我将所有仪器都连接到同一个 LAN 网络。我使用计算机一次查找每台设备的信息,并将该信息存储在 CSV 文件及其状态(最后用于测量、测试、校准)中,并基于此创建每台设备的日志。通过这种方式,我可以确定哪些乐器被大量使用,哪些不是。
谢谢
python - 有没有办法强制关闭打开的 COM 端口设备?
使用 Python,我需要强制关闭使用不同程序打开的 COM 端口。我无法关闭 COM 端口,因为我无法启动与它的会话,因为它已经在其他地方打开了。
如果它是在不同的程序中打开的,有没有办法强制关闭像“COM12”这样的会话?当其他软件 (LabVIEW) 遇到错误时,它会崩溃并经常使 COM 端口保持打开状态,这会阻止我在不手动关闭物理设备的情况下访问它们。最好强制它们关闭,以便它们可以再次正确打开。
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]
但我不知道什么是正确的语法。
但似乎没有任何效果,python VISA 没有任何明确的解释,我对此没有任何经验。有谁知道如何解决这个问题?
python - 是否可以使用 Tkinter 条目作为输入,通过按钮触发器将值传递给信号发生器?
所以我基本上想将不同的值传递给 my ,而不是在我的代码上Signal Generator
使用默认值。Frequency/Amplitude
我尝试了小部件的get
方法,但Entry
没有运气:
我认为它应该是这样的:
但由于它将文本作为字符串返回,所以我应该以某种方式将该字符串传递给按钮。