我是一名实验性物理学家,是Python的狂热爱好者.
我发现它非常适合数据分析和脚本编写,我也可以用它来连接实验室仪器(网络分析仪,示波器,信号分析仪和信号发生器......).我认为如果存在一个包含仪器驱动程序的漂亮库,Python将成为我所在领域中非常重要的MATLAB竞争者.
到目前为止,我一直在使用几种策略直接从我的IPython会话中连接它们:
使用pyVisa库很好,适用于大多数设备,但有点低级,需要额外的编程层来向用户公开有用的功能.
我最近能够使用pythondotnet(不是IronPython,缺少NumPy/Matplotlib ...库)使用IVI-COM或.NET驱动程序.这个解决方案显然是最令人满意的解决方案,因为IVI驱动程序已经处于相当高的水平,并且它们通常由供应商提供,来自不同供应商的仪器可以互换.
我的第一个问题是一个相当技术性的问题:我随处可读COM对象集成在.NET框架中,并且可以在.NET中直接使用COM对象.就我而言,我能够通过导入comtypes模块(请参阅使用COM对象http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/),并dotnet与clr来自pythondotnet ,但我根本不明白如何使用该clr模块访问这些COM对象.有人可以解释COM和.NET之间的联系吗?
另外,我总是有点困惑,我怎么知道,当我有一个DLL文件,如果它包含一个.NET模块,如果我可以用4.0版本的.NET打开它(我是一个完整的这些框架问题的初学者和正确文档的链接会非常好吗?
第二个问题是,更一般地说,没有一个模块可以统一收集不同仪器的大量驱动程序吗?在我看来,我们必须成千上万的人在处理同样的问题.
我最近落在模块lantz http://lantz.glugcen.dc.uba.ar/.不幸的是,这是在Python 3.0中,而我仍在使用Python 2.7(用于Windows的pythonxy发行版).此外,我有点害怕这个项目不是试图实施IVI建议,这将是一个很好的起点.
任何对相关信息来源的评论或链接都将受到欢迎.
我正在实验室仪器的自动化过程中.我有一个像函数的要求将通过VISA GPIB从主机PC发送文件/二进制数据到仪器.
在Ni4882.h中,有以下函数在Visual Studio 2010中传输文件/二进制数据,它正在工作.我非常精通发送命令作为GPIB字符串.
但我从未遇到通过GPIB命令发送文件.
这些是我在c ++中尝试过的函数.我使用ni4882.obj文件(有这些功能的定义)并创建了一个应用程序,所以我能够将文件PC传输到仪器.但是我无法在python中找到等效的函数
unsigned long NI488CC ibwrtfA  (int ud, const char * filename);
unsigned long NI488CC ibwrtfW  (int ud, const wchar_t * filename);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我pyvisa或visa python包中的等效功能? - 或 - 任何等效的模块替代它.
我浏览了pyvisa和签证的所有功能,但我找不到相应的功能.
提前致谢!!
我使用Thales Payshield 9000 HSM。到目前为止,所有命令均已工作,并且一切都已实现我想要的。
现在的问题是尝试更改ATM的引脚时。检查万事达卡文件时,会生成针脚更改脚本,并且格式看起来可以。

我们的密码更改脚本如下所示:86158424000210PPPPPPPPPPPPPPPPMMMMMMMMMMMMMMMM其中16个P字母是DE125中发送的PIN块,而16 M个字母代表MAC。(我屏蔽了它们,但是下面将使用示例中的数据)
有了这个脚本,从我这边来看一切正常。现在我怀疑问题是MAC生成。
要生成MAC,我们使用以下HSM命令:
key = PVK key (U+32Hex symbols under LMK),delimiter = ';',keySchemeTmk = 'U',keySchemeLmk = 'U'; 然后收到TAK密钥modeFlag = 0,inputFormatFlag = 2,macSize = 1,macAlgorithm = 3,paddingMethod = 0,keyType = '003',key = 'Tak key from HA command',messagelength = '0030',message = '8424000210345755BFDC4F2903A392B3E1229A502C892680'(消息在上面的截图级联等:命令头+ ApplicationtransactionCounter + ARQC …我正在尝试从 Raspberry Pi 与 LeCroy WaveRunner 640Zi 示波器进行通信,它们通过 USB 电缆连接。我已经在 Windows 下做到了这一点,但现在我无法让它在 Linux 下工作。
如果我运行lsusb我会看到这个:
$ lsusb
Bus 001 Device 009: ID 05ff:1023 LeCroy Corp.
...
Run Code Online (Sandbox Code Playgroud)
如果我现在使用 Python,我会得到这个:
$ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvisa
>>> pyvisa.ResourceManager().list_resources()
('ASRL/dev/ttyAMA0::INSTR',)
>>> 
Run Code Online (Sandbox Code Playgroud)
示波器不在那里(ASRL/dev/ttyAMA0::INSTR我认为是 Raspberry Py 本身的东西)。我认为示波器已正确配置,因为如果我进入选项(使用示波器本身的屏幕)并进入“远程选项”,我会看到它已设置为 USB 并且 VISA 地址为USB0::bla::bla::bla::INSTR。
我尝试按照本页中的说明进行操作,但没有成功。如果我跑步python3 -m visa info我会得到
$ python3 …Run Code Online (Sandbox Code Playgroud) 有没有人在使用NI GPIB模块在Snow Leopard上运行pyVisa成功?
根据我在NI网站上阅读的所有论坛,看来NI VISA和pyVisa的组合不能在Max OS X上完成.
令人不安的是,NI网站已经为Mac OS X列出了NI VISA支持.但是,在他们的支持页面中,他们没有将OS X列为受支持的操作系统.
任何评论或帮助将不胜感激,因为我真的想摆脱不得不使用Windows进行此软件开发以及允许跨平台支持.
我使用的是Mac OS X v10.8.5 (Mountain Lion)。我已经安装了 NI-VISA 5.4 和 PyVisa 1.5。当我尝试“进口签证”时,我得到以下回溯:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named visa
Run Code Online (Sandbox Code Playgroud)
打印 sys.path 在列表中显示:
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PyVISA-1.5.dev0.dev-py2.7.egg
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个:
import pyvisa
from pyvisa.vpp43 import visa_library
visa_library.load_library("/Library/Frameworks/VISA.framework/VISA")
import visa
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误。
为什么找不到模块?我缺少什么?
更新:我意识到 PyVisa 1.5 是一个开发版本,所以我安装了 PyVisa 1.4(我尝试了两个MacPort,只是下载了 tarball 并手动安装)。我仍然遇到同样的错误。
pyvisa 无法找到 VISA 实现并且无法加载 NI-VISA 后端:
>>> import visa
>>> import platform
>>> print(platform.architecture())
('64bit', 'WindowsPE')
>>> rm = visa.ResourceManager(visa_library="C:\\Windows\\System32\\visa64.dll")
ValueError: Could not locate a VISA implementation. Install either the NI binary or pyvisa-py.
Run Code Online (Sandbox Code Playgroud)
系统设置:
我已验证 .dll 文件是否存在:
pyvisa.info 内容如下:
C:\Python27>python -m Visa info 机器详细信息:平台 ID:
Windows-10-10.0.16299 处理器:Intel64 Family 6 Model 60 Stepping 3,GenuineIntelPython: 实现:CPython 可执行文件:
C:\Python27\python.exe 版本:2.7.15 编译器:
MSC v.1500 64 位 (AMD64) 位:64 位 …
我试图通过Python中的pyVisa通过以太网连接连接到温度室.设备只允许通过端口2049连接.我通过PuTTY或HyperTerminal连接到它没有问题,但是当我在Python中尝试此命令时
import visa
chamber = visa.instrument("TCPIP::10.2.17.130::2049")
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
VI_ERROR_RSRC_NFOUND:系统中不存在位置信息不足或请求的设备或资源
我知道设备在那里是因为我可以在PuTTY中通过它进行讨论,但我似乎无法使Python代码工作.任何提示?pyvisa 默认使用SSH吗?
昨晚我厌倦了并开始将PyVISA移植到Python 3(这里的进展:https://github.com/thevorpalblade/pyvisa).
只要我将设备地址(嗯,任何字符串确实)作为ASCII字符串而不是默认的unicode字符串
传递(例如,HP = vida.instrument(b"GPIB:),我已经达到了一切正常的程度.:16")工作,而HP = vida.instrument("GPIB :: 16")不起作用,引发ValueError.
理想情况下,最终用户不必关心字符串编码.关于我应该如何处理的任何建议?ctypes类型定义中的某些东西也许?
就目前而言,相关的ctypes类型定义是:
ViString = _ctypes.c_char_p
Run Code Online (Sandbox Code Playgroud) visa ×10
python ×8
pyvisa ×3
gpib ×2
.net ×1
com ×1
cryptography ×1
ctypes ×1
driver ×1
emv ×1
hsm ×1
linux ×1
macos ×1
mastercard ×1
porting ×1
python-3.x ×1
usb ×1
windows-10 ×1