我在Python工作,安装了NI-VISA的最新版本。我使用ctypes包来加载与NI-VISA一起安装的visa32.dll。在
我使用NI-VISA文档和the following page作为代码的基础。在
我已经知道pyVisa包装器,使用它们的find_resources函数确实返回连接的仪器。但是,我不想使用这个包装器,而是直接使用VISA DLL文件。在
我也浏览过pyVisa代码,看看他们是怎么做到的,并试图从中学习,但似乎我还是不明白。在
以下是我当前未完成的代码:
import sys
from ctypes import *
visa = windll.LoadLibrary("visa32.dll")
resourceManagerHandle = c_int(0)
visa.viOpenDefaultRM(byref(resourceManagerHandle))
instr_list = c_ulong(0)
nb = c_ulong(0)
desc = create_string_buffer(128)
print(visa.viFindRsrc(resourceManagerHandle,
"?*INSTR",
byref(instr_list),
byref(nb),
byref(desc)))
# The previous line prints: -1073807343
print(instr_list)
# The previous line prints: c_ulong(0)
我一直试图在互联网上找到错误代码的含义——1073807343(hex中的4000FFEF),尽管我在国家仪器论坛上找到了一些关于它的论坛帖子,但我还是不太明白它的含义。在
我欢迎任何建议、指导或相关信息链接。在
文本
"?*INSTR"
创建一个str
对象,在python3中是Unicode。ctypes将unicode字符串转换为wchar_t *
。{cd4>{cd4>{cd4}是指向窗口的要传递字节字符串,请在文本前面加上
b
来创建bytes
对象,即使用b"?*INSTR"
。在{s>定义一个错误的函数来防止这个函数被忽略。如果为定义为
c_char_p
的参数传递unicodestr
参数,ctypes将引发ArgumentError
。在NI-VISA Programmer Reference Manual在第5-30页上说
instrDesc
至少应该是256字节。在相关问题 更多 >
编程相关推荐