Python仪器驱动程序

2024-09-26 17:51:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个实验物理学家,是Python的狂热爱好者。在

我发现它非常适合数据分析和脚本编写,而且我实际上也用它来连接实验室仪器(网络分析仪、示波器、信号分析仪和信号发生器…)。 我认为如果有一个包含仪器驱动程序的很好的库,Python将是我领域中MATLAB的一个非常重要的竞争对手。在

到目前为止,我一直在使用几种策略直接从我的IPython会话中连接它们:

  • 使用pyVisa库,这很好,适用于大多数设备,但有点低级,并且需要额外的编程层来向用户公开有用的功能。

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

我的第一个问题是一个相当技术性的问题: 我到处都看到COM对象集成在.NET框架中,并且可以在.NET中直接使用COM对象。在我的例子中,我可以通过从pythondontnet导入comtypes模块(参见http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/)和dotnet和{}来使用COM对象,但我只是不明白如何使用clr模块访问这些COM对象。有人能解释一下COM和.NET之间的联系吗?在

另外,我总是有点困惑,我怎么知道,当我有一个DLL文件,这是否包含一个.NET模块,如果我能用.NET的4.0版本打开它(我是这些框架问题的完全初学者,有一个链接到适当的文档将是非常好的)?在

第二个问题是,更一般地说,是否有一个模块能够以统一的方式为不同的仪器收集更多的驱动程序?在我看来,我们必须是成千上万的人在处理同样的问题。在

我最近在lantz http://lantz.glugcen.dc.uba.ar/模块上摔倒了。 不幸的是,这是在python3.0中,而我仍然在使用pythonx2.7(带有pythonxy发行版for Windows)。此外,我有点担心这个项目并没有尝试实施IVI的建议,这将是一个很好的起点。在

任何评论或链接到相关的信息来源将是非常欢迎的。在


Tags: 模块对象com框架httpnet信号链接
3条回答

我不能回答您的第一个问题,但我一直在研究IVI标准的Python解释:https://github.com/python-ivi/python-ivi不幸的是,它也是python3,但它是纯Python(不导入外部DLL文件、COM或.NET对象),因此它可能不是您所要的。然而,它的优点是它是跨平台的,可以在Windows和Linux下运行。

pythonivi(以及Python-vxi11和Python-usbtmc的仪器接口)已经更新,可以无缝地支持python2和python3。它仍然是纯Python,因此没有外部二进制依赖项(DLL文件、COM或.NET对象),可以在Windows、Linux和macosx上运行,甚至可以在Raspberry Pi上运行。另外,pythonivi可以使用PyVISA访问与National Instruments兼容的硬件。在

我将其称为解释而不是实现,因为它不能仅仅因为它是Python就完全遵循规范。我已经尽可能地遵循规范,但是我也尽可能保持它的python风格。不过,它的历史还不到一年,目前只有我一个人在研究它,我的乐器种类很少。如果有人愿意帮忙,我会非常乐意接受捐款。在

开箱即用,python ivi通过python-vxi11模块(python-vxi11也是纯python,因此可以跨平台兼容)支持局域网上的VXI-11协议(我相信,与大多数LXI仪器兼容)、通过pySerial(跨平台)支持串行仪器、通过linux GPIB支持GPIB(仅限linux)。我还计划包装PyVISA,以便pythonivi能够使用PyVISA支持的所有接口。在

另一个选择是使用Tektronix的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

我使用标准Python(不是IronPython或pythondotnet)中的COM类型来控制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)

相关问题 更多 >

    热门问题