프로그래밍/Python

pyvisa를 이용한 신호발생기 제어하기

채윤아빠 2021. 10. 19. 17:29
728x90
반응형

개요

계측 장비를 다루는 라이브러리로 VISA를 활용하는데, 이를 python으로 포팅한 pyvisa에 대한 사용법을 간단하게 알아보고, pyvisa를 이용하여 신호발생기(Signal Generator)를 제어하는 방법을 정리해 둡니다.

기본적인 사용법

명령을 장치에 전송할 때는 write() 함수를 이용하고, 장치로부터 특정 값을 조회하여 가져올 때는 query() 함수를 이용합니다.

pyvisa 설치

다음과 같이 pyvisa 패키지를 임포트하여 VISA 관련 함수를 이용할 수 있습니다.

pip install pyvisa pyvisa-py

pyvisa 패키지만 설치하고, import 하면 다음과 같은 오류가 발생합니다.

>>> import pyvisa as visa
>>> rm = visa.ResourceManager()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in 
    rm = visa.ResourceManager()
  File "C:\Dev\Python\Python39\lib\site-packages\pyvisa\highlevel.py", line 3015, in __new__
    visa_library = open_visa_library(visa_library)
  File "C:\Dev\Python\Python39\lib\site-packages\pyvisa\highlevel.py", line 2924, in open_visa_library
    wrapper = _get_default_wrapper()
  File "C:\Dev\Python\Python39\lib\site-packages\pyvisa\highlevel.py", line 2883, in _get_default_wrapper
    raise ValueError(
ValueError: Could not locate a VISA implementation. Install either the IVI binary or pyvisa-py.

저 같은 경우, 네트워크를 통한 제어를 하여 "pyvisa-py" 패키지를 추가로 설치하였으나, GPIB, USB, Serial 등으로 장치를 제어한다면, IVI binary를 설치해야할 수도 있습니다.

장치 연결

장치 연결은 다음과 같이 합니다.

>>> import pyvisa as visa
>>> rm = visa.ResourceManager()
>>> SGC = rm.open_resource('TCPIP::192.168.0.103::INSTR')
>>> print (SGC.query('*IDN?'))
Rohde&Schwarz,SMBV100B,1423.1003K02/101428,4.80.041.61  

전송된 명령의 오류 여부 확인

다음과 같이 "SYST:ERR?"를 조회하여 오류 내역을 확인할 수 있습니다.

>>> SGC.write("SOUR:POW -33.03 dB")
20
>>> SGC.query("SYST:ERR?")
'-101,"Invalid character"\n'

오류가 없을 경우에는 다음과 같이 반환됩니다.

>>> SGC.query("SYST:ERR?")
'0,"No error"\n'

전송된 명령 성공 여부 확인

장비로 전송한 명령의 성공 여부는 다음과 같이 확인할 수 있습니다.

>>> SGC.query("*OPC?")
'1\n'

신호발생기 장치 제어

주파수 설정하기

주파수는 다음과 같이 설정하고, 설정된 주파수를 확인할 수 있습니다.

>>> SGC.write("SOUR:FREQ 3.2 GHz")
19
>>> SGC.query("SOUR:FREQ?")
'3200000000\n'

주파수 설정에는 write() 함수를 이용하고, 설정된 값을 가져올 때는 query() 함수를 이용합니다.

출력파워 설정하기

설정된 출력파워는 다음과 같이 확인할 수 있습니다.

>>> SGC.query("SOUR:POW?")
'-50\n'

출력 파워는 다음과 같이 설정할 수 있습니다.

>>> SGC.write("SOUR:POW:OFFS 20 dBm")
22
>>> SGC.write("SOUR:POW -33.3 dBm")
20
>>> SGC.query("SOUR:POW?")
'-33.3\n'

설정된 신호 방사 켜고/끄기

설정된 신호에 대한 방사를 다음과 같이 켜고/끌 수 있습니다.

>>> SGC.write("OUTP ON")
9
>>> SGC.query("OUTP?")
'1\n'
>>> SGC.write("OUTP OFF")
10
>>> SGC.query("OUTP?")
'0\n'

결론

pyvisa를 활용하면, 다양한 인터페이스로 연결된 여러 계측기에 대하여 동일한 함수로 제어가 가능합니다.

참고자료

https://cdn.rohde-schwarz.com/pws/dl_downloads/dl_application/application_notes/1gp79/1GP79_1E_SCPI_Programming_Guide_SigGens.pdf