我是一个实验物理学家和我的一大爱好者的Python 。
我发现它非常适合数据分析和脚本,我actualy还用它的接口实验室仪器(网络分析仪,示波器,信号分析仪和信号发生器......)。 我认为Python将是一个非常严重的竞争对手MATLAB在我的领域,如果有就存在整合的仪器驱动程序一个很好的库。
到现在为止,我一直在使用几个策略可以直接从我的连接它们的IPython会话:
使用该库pyVisa,这是很好的,对于大多数设备的工作,但有点低的水平,并要求规划了一层额外的暴露有用的功能给用户。
我已经能够最近使用使用pythondotnet(不IVI-COM或.NET司机IronPython的 ,缺乏与NumPy / Matplotlib ...库)。 该解决方案显然是最令人满意的一个,因为IVI驱动程序已经相当高的水平,他们通常是由来自不同供应商的供应商和仪器提供了然后互换。
我的第一个问题是一个比较技术性的:我读的每个地方COM对象集成在.NET框架,你可以使用COM OBJETS直接写给在.NET。 就我而言,我能够通过导入comtypes模块使用COM对象(见http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/ )和dotnet
与clr
从pythondotnet,但我根本不知道如何访问这些COM对象与clr
模块。 有人可以解释COM和.NET之间的联系?
此外,我总是有点糊涂了,我怎么知道,当我有一个DLL文件,如果这是包含.NET模块或没有,如果我能在.NET 4.0版本中打开它(我是一个完整初学者在这些框架的问题,并适当文档的链接将是完美的罚款)?
第二个问题是,更普遍的,是不是有将已经聚集在一个统一的方式对不同的仪器驱动程序的较大数量的模块? 在我看来,就像我们必须成千上万的人对同一问题的工作。
最近,我倒在模块兰茨http://lantz.glugcen.dc.uba.ar/ 。 不幸的是,这是在Python 3.0,而我仍然在使用Python 2.7(用于Windows的pythonxy分布)。 此外,我有点害怕的事实,这个项目是不是想实现IVI的建议,这将是一个很好的起点。
任何意见或链接的信息,有关人士会更受欢迎。
我使用标准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)
我不能给你的第一个问题发言,但我一直在努力的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.甚至有人在运行树莓派 。 此外,Python的IVI可以使用PyVISA访问美国国家仪器兼容的硬件。
我打电话这个解释并没有实现,因为它不能按照规范的信只是因为这是Python的。 我试图尽可能地遵循规范,但我也试图保持它作为Python化成为可能。 这是不到一岁,不过,目前我是唯一一个在它的工作,我的仪器微薄的品种。 我很乐意接受的捐款多,如果还有人在那里谁愿意提供帮助。
开箱,蟒-IVI支持通过蟒-VXI11模块通过LAN的VXI-11协议(兼容,相信,与大多数LXI仪器)(蟒-VXI11也是纯Python和由此跨平台兼容的),串行仪器支持,pySerial(跨平台)和GPIB支持与Linux-GPIB(仅限Linux)。 我打算还包裹PyVISA这样Python-IVI将能够使用所有由PyVISA支持的接口。
另一种选择是使用的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