2012-12-12 132 views
8

我是一位实验物理学家,并且是Python的大爱好者。Python仪器驱动程序

我发现它非常适合数据分析和脚本编写,我也用它来连接实验室仪器(网络分析仪,示波器,信号分析仪和信号发生器......)。 我认为Python会成为我领域的MATLAB的一个非常严重的竞争者,如果存在一个合并仪器驱动程序的好库。

到现在为止,我一直在使用一些策略来连接它们直接从我的IPython会议:

  • 使用图书馆pyVisa,这是很好的,对于大多数设备的工作,但有点低级别,并且需要额外的编程层来向用户公开有用的功能。

  • 我已经能够最近使用使用pythondotnet(不IronPython,缺乏NumPy/Matplotlib ...库)IVI-COM或.NET的驱动程序。这种解决方案显然是最令人满意的解决方案,因为IVI驱动程序已经相当高级了,通常由供应商提供,不同供应商的仪器可以互换。

我的第一个问题是一个相当的技术之一: 我读的每个地方COM对象集成在.NET框架,你可以使用COM OBJETS直接写给在.NET。就我而言,我可以通过从pythondotnet导入comtypes模块(请参阅http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/)和dotnet以及clr来使用COM对象,但我根本不知道如何使用clr模块访问这些COM对象。有人可以解释COM和.NET之间的链接吗?另外,我总是有点困惑,我怎么知道,当我有一个DLL文件,如果这是包含一个.NET模块,或者如果我可以用.NET 4.0版本打开它(我在这些框架问题上是一个完整的初学者,并且链接到正确的文档将会非常好)?

第二个问题是,更普遍的是,没有一个模块能够以统一的方式为不同的乐器收集大量的驱动程序?在我看来,我们必须成千上万的人在相同的问题上工作。

我最近倒在模块lantz http://lantz.glugcen.dc.uba.ar/上。 不幸的是,这是在Python 3.0中,而我仍然在使用Python 2.7(用于Windows的pythonxy发行版)。此外,我有点害怕这个项目没有尝试实施IVI建议,这将是一个很好的起点。

任何意见或链接到相关的信息来源将更受欢迎。

+0

的IronPython对NumPy的/ SciPy的支持:https://www.enthought.com/repo/.iron/ – jhexp

+0

@Samuel:作为兰茨的作者之一,我可以告诉你,支持IVI是路线图。该计划是提供混合类实现可以组合的命令集。可能不会发生的是使用相同的API。 IVI和Python命名约定不兼容。但是我们欢迎讨论,随时加入邮件列表或者发布一个问题来查看替代方案。 – Hernan

+0

您可能不想看看[slave](https://slave.readthedocs.org/en/develop/)我创建的抽象层。我们正在使用它来控制我们的实验室设备。 – P3trus

回答

3

我不能说你的第一个问题,但我一直在研究这里的IVI标准的Python解释:https://github.com/python-ivi/python-ivi不幸的是,它也是Python 3,但它是纯Python(不导入外部DLL文件,COM或.NET对象),所以它可能不是您正在寻找的。然而,其优势在于它意味着它是跨平台的,并且应该可以在Windows和Linux上运行。

Python IVI(以及仪器接口python-vxi11和python-usbtmc)已更新为无缝支持Python 2和Python 3.它仍然是纯Python,因此没有外部二进制依赖项(DLL文件,COM或.NET对象),它适用于Windows,Linux和Mac   OS   X.它甚至在Raspberry Pi上运行。此外,Python IVI可以使用PyVISA访问National Instruments兼容硬件。

我称之为解释而不是实现,因为它不能仅仅因为它是Python而遵循规范。我试图尽可能地遵循规范,但我也试图尽可能保持pythonic。尽管如此,还不到一岁,而我目前是唯一一个从事这方面工作的人,还有我的各种各样的乐器。如果有人愿意帮忙,我会很乐意接受捐款。通过python-vxi11模块,python-ivi支持LAN上的VXI-11协议(与大多数LXI仪器兼容,我相信它)(python-vxi11也是纯Python,因此它是跨平台的兼容),使用pySerial(跨平台)的串行仪器支持以及使用linux-gpib(仅限Linux)的GPIB支持。我打算还包装PyVISA,以便python-ivi能够使用PyVISA支持的所有接口。

3

我在标准Python中使用COM类型(不是IronPython或pythondotnet)来每天控制IVI驱动程序。我从来不需要任何额外的.NET绑定。我通常做这样的事情:

from comtypes import client 
dmm = client.CreateObject('VTEXDmm.VTEXDmm') 
dmm.Initialize('TCPIP::10.20.30.40::INSTR', True, True) 
dmm.Measurement.Read(1000) 
+0

对于特定的仪器或仪器类型,是否为“VTEXDmm”?也就是说,“Dmm”是指“数字万用表”吗? (甚至可能是虚拟的德州仪器数字万用表??)德州仪器的[台式万用表](https://en.wikipedia.org/wiki/Multimeter#Digital_multimeters_.28DMM_or_DVOM.29)? –

+0

或Textronix的“TEX”? –

+0

VTEXDmm是仪器驱动程序的COM类的名称 - 在这种情况下,是VTI Instruments的数字万用表驱动程序。它应该是你的乐器的特定驱动程序被调用的。 – Jorenko

1

另一种选择是使用泰克TekVisa。

import clr clr.AddReferenceToFileAndPath('C:\Windows\\assembly\\GAC_32\\TekVISANet\\1.1.1.0__7f19bb2a5a9ae6e8\\TekVISANet.dll') 

import TekVISANet 
v = TekVISANet.VISA() 
v.Open("GPIB0::6::INSTR") 
id =v.Write("*IDN?",50) 
s = v.Read(50) 
print s 
相关问题