2012-12-12 58 views
8

Tôi là một nhà vật lý thực nghiệm và là một người đam mê lớn của Python.Trình điều khiển thiết bị Python

Tôi thấy nó tuyệt vời để phân tích dữ liệu và viết kịch bản, và tôi cũng sử dụng nó để giao tiếp các dụng cụ phòng thí nghiệm (máy phân tích mạng, phạm vi, máy phân tích tín hiệu và bộ tạo tín hiệu ...). Tôi nghĩ Python sẽ là một đối thủ cạnh tranh rất nghiêm trọng đối với MATLAB trong lĩnh vực của tôi nếu có tồn tại một thư viện tốt đẹp kết hợp với các trình điều khiển thiết bị.

Cho đến nay, tôi đã được sử dụng một số chiến lược để giao tiếp trực tiếp từ phiên IPython tôi:

  • Sử dụng thư viện pyVisa, đó là tốt đẹp, làm việc cho phần lớn các thiết bị này, nhưng một chút bit cấp thấp và yêu cầu thêm một lớp lập trình để hiển thị các chức năng hữu ích cho người dùng.

  • Gần đây tôi có thể sử dụng trình điều khiển IVI-COM hoặc .NET bằng cách sử dụng pythondotnet (không phải IronPython, thiếu các thư viện NumPy/Matplotlib ...). Giải pháp này rõ ràng là thỏa mãn nhất vì trình điều khiển IVI đã khá cao, và chúng thường được cung cấp bởi các nhà cung cấp và các công cụ từ các nhà cung cấp khác nhau sau đó có thể hoán đổi cho nhau.

câu hỏi đầu tiên của tôi là một kỹ thuật chứ không phải một: Tôi đọc ở khắp mọi nơi mà COM đối tượng được tích hợp trong khuôn khổ NET và rằng bạn có thể sử dụng objets COM diretly trong .NET. Trong trường hợp của tôi, tôi có thể sử dụng các đối tượng COM bằng cách nhập mô-đun comtypes (xem http://code.activestate.com/recipes/578089-using-iviscope-instrument-driver-with-python/) và dotnet với clr từ pythondotnet, nhưng tôi không hiểu cách truy cập các đối tượng COM đó bằng mô-đun clr. Ai đó có thể giải thích liên kết giữa COM và .NET?

Ngoài ra, tôi luôn hơi bối rối, làm cách nào để biết khi nào tôi có tệp DLL, nếu điều này có chứa mô-đun .NET hay không và nếu tôi có thể mở nó bằng phiên bản 4.0 của .NET (Tôi là người mới bắt đầu hoàn chỉnh trong các vấn đề khung này và một liên kết đến tài liệu thích hợp sẽ hoàn toàn tốt đẹp)?

Câu hỏi thứ hai, nói chung, không có mô-đun nào đã thu thập được số lượng trình điều khiển lớn hơn cho các công cụ khác nhau một cách thống nhất? Dường như với tôi như chúng ta phải có hàng ngàn người làm việc trên cùng một vấn đề.

Gần đây tôi đã rơi vào mô-đun lantz http://lantz.glugcen.dc.uba.ar/. Thật không may, đây là trong Python 3.0, trong khi tôi vẫn đang sử dụng Python 2,7 (với phân phối pythonxy cho Windows). Hơn nữa, tôi hơi sợ bởi thực tế là dự án này không cố gắng thực hiện các khuyến nghị IVI, đó sẽ là một điểm khởi đầu tốt.

Bất kỳ nhận xét hoặc liên kết nào đến một nguồn thông tin có liên quan sẽ được chào đón nhiều hơn.

+0

IronPython đã hỗ trợ cho NumPy/scipy: https://www.enthought.com/repo/.iron/ – jhexp

+0

@Samuel: Là một trong những tác giả của Lantz, tôi có thể nói với bạn rằng hỗ trợ IVI là trên lộ trình. Kế hoạch là cung cấp các lớp mixin triển khai các tập lệnh có thể được kết hợp. Điều gì có thể sẽ không xảy ra là sử dụng cùng một API. IVI và quy ước đặt tên Python không tương thích. Nhưng chúng tôi đang mở để thảo luận, vui lòng tham gia danh sách gửi thư hoặc mở một vấn đề để xem các giải pháp thay thế. – Hernan

+0

Bạn có thể không muốn xem [slave] (https://slave.readthedocs.org/en/develop/) một lớp trừu tượng mà tôi đã tạo. Chúng tôi đang sử dụng nó để kiểm soát thiết bị phòng thí nghiệm của mình. – P3trus

Trả lời

3

Tôi không thể nói với câu hỏi đầu tiên của bạn, nhưng tôi đã làm việc trên một giải thích Python của tiêu chuẩn IVI ở đây: https://github.com/python-ivi/python-ivi. Thật không may, nó cũng Python 3, nhưng nó tinh khiết Python (không nhập khẩu các tập tin DLL bên ngoài, COM hoặc các đối tượng .NET), vì vậy nó có thể không chính xác những gì bạn đang tìm kiếm. Tuy nhiên, lợi thế là điều đó có nghĩa là nó đa nền tảng và nên hoạt động trong cả Windows và Linux.

Python IVI (và giao diện thiết bị python-vxi11 và python-usbtmc) đã được cập nhật để hỗ trợ liền mạch cả Python 2 và Python 3. Nó vẫn là Python thuần túy, vì vậy không có phụ thuộc nhị phân bên ngoài (tệp DLL, COM hoặc các đối tượng .NET) và nó hoạt động trên Windows, Linux và Mac   OS   X. Nó thậm chí đã được chạy trên Raspberry Pi. Ngoài ra, Python IVI có thể sử dụng PyVISA để truy cập National Instruments phần cứng tương thích.

Tôi gọi đây là giải thích và không phải là cách thực hiện, bởi vì nó không thể tuân thủ đặc điểm kỹ thuật đối với chữ cái đơn giản chỉ vì nó là Python. Tôi đã cố gắng tuân theo đặc tả kỹ càng nhất có thể, nhưng tôi cũng đã cố gắng giữ nó càng kỹ càng càng tốt. Nó chưa đầy một tuổi, và tôi hiện là người duy nhất làm việc với nó, với những loại nhạc cụ ít ỏi của tôi. Tôi sẽ hạnh phúc hơn khi chấp nhận những đóng góp, nếu có những người ngoài kia muốn giúp đỡ. Trong số các hộp, python-ivi hỗ trợ giao thức VXI-11 qua mạng LAN (tương thích, tôi tin rằng, với hầu hết các công cụ LXI) thông qua mô-đun python-vxi11 (python-vxi11 cũng là Python thuần túy và do đó đa nền tảng) tương thích), hỗ trợ công cụ nối tiếp với pySerial (đa nền tảng) và hỗ trợ GPIB với linux-gpib (chỉ dành cho Linux). Tôi cũng dự định đóng gói PyVISA để python-ivi có thể sử dụng tất cả các giao diện được PyVISA hỗ trợ.

3

Tôi sử dụng các loại COM theo chuẩn Python (không phải IronPython hoặc pythondotnet) để điều khiển trình điều khiển IVI hàng ngày. Tôi chưa bao giờ cần thêm bất kỳ liên kết .NET nào. Tôi thường làm những việc như sau:

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

Có phải "VTEXDmm" cho loại công cụ hoặc loại nhạc cụ thể không? Nghĩa là "Dmm" có nghĩa là "vạn năng số"? (có lẽ thậm chí ảo vạn năng số của Texas Instruments ??) Một [vạn năng trên băng chuyền] (https://en.wikipedia.org/wiki/Multimeter#Digital_multimeters_.28DMM_or_DVOM.29) từ Texas Instruments? –

+0

Hoặc "TEX" cho Textronix? –

+0

VTEXDmm là tên của Lớp COM của trình điều khiển thiết bị - trong trường hợp này, trình điều khiển Kỹ thuật số MultiMeter từ VTI Instruments. Nó sẽ là bất cứ điều gì cụ thể trình điều khiển cụ của bạn được gọi là. – Jorenko

1

Một tùy chọn khác là sử dụng TekVisa từ 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 
Các vấn đề liên quan