Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Mã ví dụ đầy đủ được sao chép ở cuối bài viết này.

Thực hiện các phép đo thủ công (với số lượng lớn) là dành cho những người hút và sinh viên đại học. Rất may, hầu hết các thiết bị phòng thí nghiệm đều đi kèm với giao diện kỹ thuật số như USB hoặc sê -ri và bạn có thể phát hành các lệnh thông qua các giao diện này để điều khiển thiết bị của mình - giống như khi bạn đang nhấn nút trên bảng điều khiển phía trước. Ví dụ, lấy nguồn cung cấp năng lượng - bạn có thể phát hành một chuỗi các lệnh cho:

  • Đặt điện áp đầu ra thành 5V
  • Đặt giới hạn hiện tại thành 1 amp
  • Kích hoạt đầu ra
  • Đọc lại & nbsp; hiện tại thực tế được cung cấp

Mọi hành động mà chúng tôi, nhà điều hành, có thể thực hiện cũng có thể được thực hiện bởi một lệnh. & Nbsp; Viết một tập lệnh sắp xếp các lệnh này theo đúng thứ tự và bạn có quy trình kiểm tra tự động. & NBSP; Bây giờ chúng tôi đang nói! Tốt hơn là một tập lệnh có thể phối hợp một thử nghiệm trên nhiều thiết bị; Bạn có thể lái một nguồn điện và đọc một máy hiện sóng trong cùng một kịch bản. & nbsp;performed by a command. Write a script that sequences these commands in the right order and you have an automated test procedure. Now we're talking! Better still, a script can co-ordinate a test across multiple devices; you can drive a power supply and read an oscilloscope in the same script. 

Trong bài viết này, tôi sẽ trình diễn một bài kiểm tra tự động với nguồn điện và đồng hồ vạn năng. Chúng tôi sẽ kết nối thiết bị, đặt điện áp, thực hiện các phép đo và thậm chí thực hiện một số dữ liệu. Bạn có thể không có cùng một thiết bị, nhưng các lệnh chúng tôi sẽ sử dụng là một tiêu chuẩn công nghiệp - trên các thương hiệu khác nhau, các lệnh là giống nhau hoặc rất giống nhau.

Tất nhiên, chúng tôi sẽ viết một chút mã Python - nếu bạn không quen thuộc với Python, Tim đã tạo ra vô số hướng dẫn để bạn bắt đầu. If you're unfamiliar with Python, Tim has created loads of tutorials to get you started.

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Các tùy chọn giao thoa trên bảng điều khiển phía sau của nguồn điện DP832 Rigol. Thông thường, thiết kế phòng thí nghiệm cung cấp các giao diện vật lý yêu cầu mua giấy phép để mở khóa. Có vẻ như với thiết bị Rigol, chức năng USB luôn được bao gồm - đẹp! Trong trường hợp này để sử dụng cổng LAN sẽ yêu cầu mua mô hình DP832A giàu tính năng hơn hoặc mua giấy phép kết nối LAN từ Rigol.

Nội dung

  • Sự chuẩn bị
  • Chào thế giới
  • Thử nghiệm ví dụ: Tự động hóa nguồn điện và vạn năng
    • Mã ví dụ
  • Sự kết luận

Sự chuẩn bị

Chào thế giới

Thử nghiệm ví dụ: Tự động hóa nguồn điện và vạn năng is a Python package that enables you to control your lab-gear independently of the physical interface (e.g. GPIB, RS232, USB, Ethernet).

Mã ví dụ

pip3 install -U pyvisa

Sự kết luậnNI-VISA backend which the PyVISA package depends on.

Cài đặt gói

Pyvisa là gói Python cho phép bạn điều khiển thiết kế phòng thí nghiệm của mình một cách độc lập với giao diện vật lý (ví dụ: GPIB, RS232, USB, Ethernet).

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python


Chào thế giới

Thử nghiệm ví dụ: Tự động hóa nguồn điện và vạn năng

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Mã ví dụ

>>> import pyvisa
>>> rm = pyvisa.ResourceManager()
>>> rm.list_resources()
('USB0::0x1AB1::0x0E11::DP8C1234567890::INSTR', 'ASRL1::INSTR', 'ASRL10::INSTR')
>>> psu = rm.open_resource('USB0::0x1AB1::0x0E11::DP8C1234567890::INSTR')
>>> print(psu.query("*IDN?"))
RIGOL TECHNOLOGIES,DP832,DP8C1234567890,00.01.16

Sự kết luận

  • Cài đặt gói
  • Pyvisa là gói Python cho phép bạn điều khiển thiết kế phòng thí nghiệm của mình một cách độc lập với giao diện vật lý (ví dụ: GPIB, RS232, USB, Ethernet).
  • Để cài đặt pyvisa cho Python 3.6+ chạy lệnh này:
  • Chúng tôi cũng phải cài đặt Ni-visa backend & nbsp; mà gói pyvisa phụ thuộc vào.
  • Nhận hướng dẫn lập trình

Chúng ta cần biết những gì các lệnh của chúng ta chấp nhận. Nói chung, bạn có thể tìm thấy hướng dẫn lập trình cho một thiết bị trên trang web của nhà sản xuất - tìm phần tài liệu trên trang sản phẩm của một mặt hàng. Ví dụ: đây là cách tôi tìm thấy hướng dẫn lập trình của chúng tôi trên trang web của Rigollist_resources() function is useful for acquiring the USB device ID - we need that for open_resource()


Thử nghiệm ví dụ: Tự động hóa nguồn điện và vạn năng

Mã ví dụ

Sự kết luận

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Cài đặt gói

Pyvisa là gói Python cho phép bạn điều khiển thiết kế phòng thí nghiệm của mình một cách độc lập với giao diện vật lý (ví dụ: GPIB, RS232, USB, Ethernet).

import pyvisa
from time import sleep # for delays
import os # for datalogging rm = pyvisa.ResourceManager() # List all connected resources print("Resources detected\n{}\n".format(rm.list_resources())) supply = rm.open_resource('USB0::0x1AB1::0x0E11::DP1234567890::INSTR') # Put your device IDs here dmm = rm.open_resource('USB0::0x1AB1::0x09C4::DM1234567890::INSTR') # Setup Digital MultiMeter in DC Voltage mode dmm.write(':FUNCtion:VOLTage:DC')

Để cài đặt pyvisa cho Python 3.6+ chạy lệnh này:

Chúng tôi cũng phải cài đặt Ni-visa backend & nbsp; mà gói pyvisa phụ thuộc vào.

Nhận hướng dẫn lập trình

Chúng ta cần biết những gì các lệnh của chúng ta chấp nhận. Nói chung, bạn có thể tìm thấy hướng dẫn lập trình cho một thiết bị trên trang web của nhà sản xuất - tìm phần tài liệu trên trang sản phẩm của một mặt hàng. Ví dụ: đây là cách tôi tìm thấy hướng dẫn lập trình của chúng tôi trên trang web của RigolAPPLy at Channel 1: 0 Volts, 0.2 Amps with the OUTPutoff. (from the power supply's programming manual)

# Setup the power supply 0V, 200mA
supply.write(':OUTP CH1,OFF')   # start OFF - safe :)
supply.write(':APPL CH1,0,0.2') # apply 0V, 0.2A

Chúng tôi có thể kiểm tra mã cung cấp nguồn bằng cách cài đặt Kênh 1 thành một số điểm đặt khác và đảm bảo tập lệnh của chúng tôi cập nhật điểm đặt như mong đợi.

Bước 3: Tăng điện áp, thu thập dữ liệu

Hãy cùng bước điện áp đầu ra từ 0 đến 10V trong các bước 0,5V. Đầu tiên, chúng ta cần bật đầu ra kênh 1. Sau đó, tạo một vòng lặp để bước từ 0 đến 10. Biến vòng lặp sẽ là điểm đặt điện áp của chúng tôi. & NBSP;

Chúng tôi sẽ sử dụng biến vòng lặp & nbsp; bên trong lệnh áp dụng của nguồn cung - vì biến là một số, chúng tôi chuyển nó qua str () để chuyển đổi nó thành một chuỗi và kết hợp với phần còn lại của lệnh.APPLy command - since the variable is a number, we pass it through str() to convert it to a string, and concatenate that with the rest of the command.

Đo điện áp với vạn năng cũng đơn giản như phát hành truy vấn. Lưu ý cách các lệnh truy vấn kết thúc với một dấu hỏi. Các truy vấn cũng trả về chuỗi, vì vậy chúng tôi truyền kết quả qua float () để chuyển đổi thành một số - hữu ích nếu chúng tôi muốn làm toán với dữ liệu sau.float() to convert to a number - useful if we want to do math with the data later.

Lệnh in () ghi lại kết quả kiểm tra vào bảng điều khiển.print() command logs the test results to the console.

Sau khi thử nghiệm hoàn tất (vòng lặp đã hoàn thành), chúng tôi đặt lại nguồn điện cho một trạng thái an toàn.

Thêm phần sau vào tập lệnh của bạn:

# Run the test
supply.write(':OUTP CH1,ON')
v = 0
while v <= 10.0: # sweep voltage up to 10V
    supply.write(':APPL CH1,' + str(v) + ',0.2')            # Set the voltage
    sleep(0.5)
    vMeasured = float( dmm.query(':MEASure:VOLTage:DC?') )  # measure the voltage

    # Write results to console
    print("{}  {}".format(v, vMeasured))

    v += 0.5

# Test complete. Turn supply off and zero the setpoints
supply.write(':OUTP CH1,OFF')
supply.write(':APPL CH1,0,0')

Nếu mọi thứ suôn sẻ, bảng điều khiển của bạn sẽ ghi nhật ký điểm đặt cung cấp điện ở bên trái và phép đo của vạn năng ở bên phải.

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Tốt đẹp! Chúng tôi chỉ đã làm một thử nghiệm! Chúng tôi có một nguồn cung cấp năng lượng bước qua một số phạm vi điện áp và chúng tôi đang sử dụng đồng hồ vạn năng 5 1/2 để đo độ chính xác đầu ra. Bạn có thể sao chép dữ liệu thô này vào bảng tính và vẽ đồ thị cho nội dung trái tim của bạn.

Thật có ý nghĩa khi có Python thực hiện công việc lưu kết quả của chúng tôi vào một tệp - hãy để tập lệnh của chúng tôi đăng nhập kết quả vào một tệp.

Bước 4: Datalogging

Tôi đã thêm một biến FilePath đóng dấu thời gian. Điều này sẽ được sử dụng để tạo một tệp với ngày và giờ hiện tại ở định dạng "Yyyy-MM-DD_HHMM.CSV"

Tôi đã thêm một phần trong vòng lặp mở tệp và nối các phép đo. Lần đầu tiên tệp được mở, nó chưa tồn tại - chúng ta có thể kiểm tra trường hợp này bằng cách kiểm tra xem kích thước tệp có bằng không. Nếu vậy, chúng ta có thể viết theo một hàng tiêu đề được định dạng độc đáo để cung cấp cho các cột dữ liệu của chúng ta một số bối cảnh.

Đây là phiên bản cuối cùng của mã

import pyvisa
import time
from time import sleep
import os

# Datalogging: create a time-stamped file
dateString = time.strftime("%Y-%m-%d_%H%M")
filepath = "./" + dateString + ".csv"

rm = pyvisa.ResourceManager()
# List all connected resources
print("Resources detected\n{}\n".format(rm.list_resources()))

supply = rm.open_resource('USB0::0x1AB1::0x0E11::DP1234567890::INSTR') # Put your device IDs here
dmm = rm.open_resource('USB0::0x1AB1::0x09C4::DM1234567890::INSTR')


# Setup Digital MultiMeter in DC Voltage mode
dmm.write(':FUNCtion:VOLTage:DC')

# Setup the power supply 0V, 200mA
supply.write(':OUTP CH1,OFF')   # start OFF - safe :)
supply.write(':APPL CH1,0,0.2') # apply 0V, 0.2A

# Run the test
supply.write(':OUTP CH1,ON')
v = 0
while v <= 10.0: # sweep voltage up to 10V
    supply.write(':APPL CH1,' + str(v) + ',0.2')            # Set the voltage
    sleep(0.5)
    vMeasured = float( dmm.query(':MEASure:VOLTage:DC?') )  # measure the voltage

    # Write results to console
    print("{}  {}".format(v, vMeasured))

    # Write results to a file
    with open(filepath, "a") as file:
        if os.stat(filepath).st_size == 0: #if empty file, write a nice header
            file.write("Setpoint [V], Measured [V]\n")
        file.write("{:12.2f},{:13.5f}\n".format(v, vMeasured)) # log the data
    file.close()

    v += 0.5


# Test complete. Turn supply off and zero the setpoints
supply.write(':OUTP CH1,OFF')
supply.write(':APPL CH1,0,0')

Tôi đã bỏ qua một chút với các sắc thái của việc xử lý các tệp và sử dụng gói thời gian. Nếu bạn tò mò, hãy đọc các tài liệu cho hệ điều hành và thời gian.os and time.

Khi bạn chạy tập lệnh, bạn sẽ thấy một tệp .csv xuất hiện trong cùng một thư mục. Sau khi chạy thử nghiệm, nội dung của tệp sẽ trông giống như thế này:

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Thật tuyệt! Chúng tôi có một tệp dữ liệu với các tiêu đề cột và các hàng có chiều rộng không đổi giúp dễ đọc. Làm cho các hàng không đổi chiều rộng bằng cách phát với định dạng file.write (). Ví dụ: setPoint [v] dài 12 ký tự, vì vậy để khớp dữ liệu với chiều rộng này (với hai vị trí thập phân), chuỗi định dạng là {12.2f}.Setpoint [V] is 12 characters long, so to match the data to this width (with two decimal places) the format string is {12.2f}.


Sự kết luận

Hướng dẫn instrument automation using python - tự động hóa thiết bị bằng python

Khá khó có thể bạn sẽ có cùng một công cụ để làm theo hướng dẫn này chính xác - nhưng điều đó không sao. Bất kể bạn đang làm việc với những công cụ nào, quá trình này sẽ giống nhau: Đầu tiên, thiết lập kết nối với một loại xin chào nào đó, thế giới; Sau đó, phát triển tập lệnh của bạn - Kiểm tra từng hàm mới khi bạn đi.

Ví dụ này không quá dài, nhưng nó chắc chắn bao gồm rất nhiều ý tưởng: lái thiết bị thử nghiệm, in các chuỗi được định dạng, các vòng chạy và thực hiện các hoạt động tệp. Mặc dù thí nghiệm chúng tôi thực hiện khá đơn giản, nhưng không mất nhiều trí tưởng tượng để xem làm thế nào điều này có thể mở rộng. Có thể có một thiết bị được kiểm tra kết nối giữa nguồn điện và vạn năng. Hơn nữa, bạn có thể bao gồm nhiều thiết bị thử nghiệm hơn; & nbsp; Gần đây tôi đã thử nghiệm một mô -đun cung cấp nguồn với tháp thử nghiệm này: hai vạn năng, nguồn điện, tải điện tử và máy hiện sóng - tất cả được điều khiển bởi một tập lệnh duy nhất! Ảo thuật!

Trong ví dụ này, chúng tôi đã trực tiếp viết các lệnh cấp thấp. Nếu bạn thấy mình làm điều này rất nhiều, bạn có thể muốn viết một lớp Python cho nhạc cụ của mình, để mã hóa nhanh hơn. & NBSP;

Như mọi khi, nếu bạn thấy hướng dẫn này thú vị hoặc hữu ích, chúng tôi rất muốn nghe từ bạn! Nếu bạn có bất kỳ câu hỏi hoặc sự không chắc chắn, hãy bắt đầu cuộc trò chuyện dưới đây! Chúng tôi là những nhà sản xuất toàn thời gian, và ở đây để giúp đỡ.

Mã hóa hạnh phúc!