Controladores de instrumentos de Python

Soy un físico experimental y soy un gran entusiasta de Python .

Me parece genial para el análisis de datos y las secuencias de comandos, y actualmente también lo uso para interconectar instrumentos de laboratorio (analizador de redes, ámbitos, analizadores de señales y generadores de señales …). Creo que Python sería un competidor muy serio para MATLAB en mi campo si existiera una biblioteca agradable que incorporara controladores de instrumentos.

Hasta ahora, he estado usando varias estrategias para conectarlas directamente desde mi sesión de IPython :

  • Usar la biblioteca pyVisa, que es agradable, funciona para la mayoría de los dispositivos, pero es un poco de bajo nivel y requiere una capa adicional de progtwigción para exponer funciones útiles al usuario.

  • Recientemente he podido usar controladores IVI-COM o .NET usando pythondotnet (no IronPython , que carece de las bibliotecas NumPy / Matplotlib …). Esta solución es obviamente la más satisfactoria porque los controladores IVI ya son de un nivel bastante alto, y generalmente los proveedores los proporcionan, y los instrumentos de diferentes proveedores son intercambiables.

Mi primera pregunta es bastante técnica: leo en todas partes que los objetos COM están integrados en el marco .NET y que puede usar los objetos COM directamente en .NET. En mi caso, puedo usar objetos COM importando el módulo comtypes (ver http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/ ) y dotnet con clr de pythondotnet, pero simplemente no entiendo cómo acceder a esos objetos COM con el módulo clr . ¿Alguien puede explicar el enlace entre COM y .NET?

Además, siempre estoy un poco confundido, cómo lo sé, cuando tengo un archivo DLL, si este contiene un módulo .NET o no, y si puedo abrirlo con la versión 4.0 de .NET (soy un completo principiante en estos temas marco y un enlace a la documentación adecuada estaría perfectamente bien)?

La segunda pregunta es, de manera más general, ¿no hay un módulo que ya reúna una mayor cantidad de controladores para diferentes instrumentos de manera unificada? Me parece que debemos ser miles de personas trabajando en los mismos problemas.

Recientemente caí en el módulo lantz http://lantz.glugcen.dc.uba.ar/ . Desafortunadamente, esto está en Python 3.0, mientras sigo usando Python 2.7 (con la distribución de Pythonxy para Windows). Además, estoy un poco asustado por el hecho de que este proyecto no está tratando de implementar las recomendaciones de IVI, lo que sería un buen punto de partida.

Cualquier comentario o enlace a una fuente de información relevante sería más que bienvenido.

Uso los tipos COM en Python estándar (no IronPython o pythondotnet) para controlar los controladores IVI a diario. Nunca he necesitado ningún enlace .NET adicional. Generalmente hago cosas como esta:

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

No puedo hablar de la primera pregunta suya, pero he estado trabajando en una interpretación de Python del estándar IVI aquí: https://github.com/python-ivi/python-ivi . Desafortunadamente, también es Python 3, pero es puro Python (no importa archivos DLL externos, objetos COM o .NET), por lo que puede que no sea exactamente lo que está buscando. Sin embargo, la ventaja es que significa que es multiplataforma y debería funcionar tanto en Windows como en Linux.

Python IVI (y las interfaces de los instrumentos python-vxi11 y python-usbtmc) se han actualizado para que sean compatibles con Python 2 y Python 3. Todavía es Python puro, por lo que no hay dependencias binarias externas (archivos DLL, objetos COM, o .NET) y funciona en Windows, Linux y Mac OS X. Incluso se ha ejecutado en una Raspberry Pi . Además, Python IVI puede usar PyVISA para acceder al hardware compatible con National Instruments .

Llamo a esto una interpretación y no una implementación, porque no puede seguir la especificación de la letra simplemente porque es Python. He tratado de seguir la especificación lo más cerca posible, pero también he tratado de mantenerla lo más python posible. Sin embargo, tiene menos de un año, y actualmente soy el único que trabaja en ello, con mi escasa variedad de instrumentos. Estaría más que feliz de aceptar contribuciones, si hay personas que quieran ayudar.

Fuera de la caja, python-ivi admite el protocolo VXI-11 sobre LAN (compatible, creo, con la mayoría de los instrumentos LXI) a través del módulo python-vxi11 (python-vxi11 también es Python puro y por lo tanto compatible con multiplataforma), serial soporte de instrumentos con pySerial (multiplataforma), y soporte GPIB con linux-gpib (solo para Linux). También planeo ajustar PyVISA para que python-ivi pueda usar todas las interfaces compatibles con PyVISA.

Otra opción es usar TekVisa de 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