Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python工具驱动程序_Python_.net_Com_Driver_Visa - Fatal编程技术网

Python工具驱动程序

Python工具驱动程序,python,.net,com,driver,visa,Python,.net,Com,Driver,Visa,我是一名实验物理学家,也是一名科学爱好者 我发现它非常适合数据分析和脚本编写,而且我实际上也使用它来连接实验室仪器(网络分析仪、示波器、信号分析仪和信号发生器…)。 我认为,如果有一个很好的包含仪器驱动程序的库,Python将是我所在领域的一个非常重要的竞争对手 到目前为止,我一直在使用几种策略直接从我的会话中连接它们: 使用pyVisa库很好,适用于大多数设备,但有点低级,需要额外的编程层向用户公开有用的函数 我最近已经能够使用pythondotnet使用IVI-COM或.NET驱动程序(不

我是一名实验物理学家,也是一名科学爱好者

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

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

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

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

我的第一个问题是一个相当技术性的问题: 我到处都读到,对象集成在.NET框架中,您可以直接在.NET中使用COM对象。在我的例子中,我可以通过从pythondotnet导入comtypes模块(请参阅)和
dotnet
with
clr
来使用COM对象,但我不知道如何使用
clr
模块访问这些COM对象。有人能解释一下COM和.NET之间的联系吗

另外,我总是有点困惑,当我有一个DLL文件时,我如何知道它是否包含.NET模块,以及我是否可以用.NET的4.0版本打开它(我是这些框架问题的完全初学者,有一个到适当文档的链接就可以了)

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

我最近爱上了lantz模块。 不幸的是,这是在Python3.0中实现的,而我仍然在使用Python2.7(带有用于Windows的pythonxy发行版)。此外,我有点担心这个项目没有试图实施IVI的建议,这将是一个很好的起点


欢迎对相关信息源的任何评论或链接。

我不能回答您的第一个问题,但我一直在这里研究IVI标准的Python解释:。不幸的是,它也是Python3,但它是纯Python(不导入外部DLL文件、COM或.NET对象),因此它可能不是您想要的。然而,优点是这意味着它是跨平台的,应该可以在Windows和Linux中工作

Python IVI(以及工具接口Python-vxi11和Python usbtmc)已经更新,以无缝支持Python 2和Python 3。它仍然是纯Python,因此没有外部二进制依赖项(DLL文件、COM或.NET对象),并且可以在Windows、Linux和MacOSX上工作。它甚至已经在一台计算机上运行。此外,pythonivi可以使用PyVISA访问兼容的硬件

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


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

我每天使用标准python(而不是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)

另一种选择是使用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

IronPython支持NumPy/SciPy:@Samuel:作为Lantz的作者之一,我可以告诉你,支持IVI已经在路线图上了。计划是提供mixin类,实现可以组合的命令集。可能不会发生的是使用相同的API。IVI和Python命名约定不兼容。但是我们是开放讨论的,欢迎加入邮件列表,或者打开一个问题来查看替代方案。您可能不想看一看我创建的抽象层。我们用它来控制我们的实验室设备。“VTEXDmm”是用于特定的仪器还是仪器类型?也就是说,“Dmm”是指“数字万用表”吗?(甚至可能是虚拟德州仪器数字万用表???)德州仪器的A或Textronix的“TEX”VTEXDmm是仪器驱动程序的COM类的名称——在本例中,是VTI仪器的数字万用表驱动程序。它应该是任何你的仪器的特定驱动器被称为。