Драйверы инструментов Python
Я физик-экспериментатор и большой энтузиаст Python.
Я нахожу его отличным для анализа данных и написания сценариев, и я также использую его для взаимодействия с лабораторными приборами (сетевой анализатор, области, анализаторы сигналов и генераторы сигналов...). Я думаю, что Python был бы очень серьезным конкурентом для MATLAB в моей области, если бы существовала хорошая библиотека, включающая драйверы инструментов.
До сих пор я использовал несколько стратегий для взаимодействия с ними непосредственно из моего сеанса IPython:
Использование библиотеки pyVisa, которая хороша, работает для большинства устройств, но немного низкоуровневая, и требует дополнительного уровня программирования для предоставления пользователю полезных функций.
Недавно я смог использовать драйверы IVI-COM или.NET, используя pythondotnet (не IronPython, в котором отсутствуют библиотеки NumPy / Matplotlib...). Это решение, очевидно, является наиболее удовлетворительным, поскольку драйверы IVI уже достаточно высокого уровня, и они обычно предоставляются поставщиками, а инструменты от разных поставщиков являются взаимозаменяемыми.
Мой первый вопрос довольно технический: я везде читал, что COM- объекты интегрированы в.NET Framework и что вы можете использовать COM-объекты непосредственно в.NET. В моем случае я могу использовать COM-объекты путем импорта модуля comtypes (см. Http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/) и dotnet
с clr
из pythondotnet, но я просто не понимаю, как получить доступ к этим COM-объектам с clr
модуль. Может кто-нибудь объяснить связь между COM и.NET?
Кроме того, я всегда немного запутался, откуда я знаю, когда у меня есть файл DLL, содержит ли он модуль.NET или нет, и если я могу открыть его с версией 4.0.NET (я полный новичок в этих базовых вопросах и ссылка на соответствующую документацию будет в порядке)?
Второй вопрос, в более общем смысле, не существует ли модуля, который бы уже собирал большее количество драйверов для различных инструментов в унифицированном порядке? Мне кажется, что мы должны быть тысячи людей, работающих над одними и теми же вопросами.
Я недавно упал на модуль ланца http://lantz.glugcen.dc.uba.ar/. К сожалению, это в Python 3.0, хотя я все еще использую Python 2.7 (с дистрибутивом pythonxy для Windows). Более того, я немного боюсь того, что этот проект не пытается реализовать рекомендации IVI, что было бы хорошей отправной точкой.
Любой комментарий или ссылка на соответствующий источник информации будет более чем приветствоваться.
3 ответа
Я не могу ответить на ваш первый вопрос, но я работаю над интерпретацией Python стандарта IVI здесь: 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. Я пытался следовать спецификации как можно точнее, но я также старался поддерживать ее как можно более питонической. Сейчас ему меньше года, и сейчас я работаю над этим с моим скудным ассортиментом инструментов. Я был бы более чем рад принять участие, если есть люди, которые хотят помочь.
Из коробки python-ivi поддерживает протокол VXI-11 по локальной сети (совместимый, я полагаю, с большинством инструментов LXI) через модуль python-vxi11 (python-vxi11 также является чистым Python и, следовательно, кроссплатформенным), последовательный поддержка инструментов с pySerial (кроссплатформенность) и поддержка GPIB с linux-gpib (только для Linux). Я планирую также обернуть PyVISA, чтобы python-ivi мог использовать все интерфейсы, поддерживаемые PyVISA.
Я использую типы COM в стандартном Python (не 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)
Другой вариант - использовать TekVisa от Tektronix.
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