Case
To get the data array from devices, the encoding form should be stated.
If you do not state the encoding form at all, pyvisa will has UnicodeDecodeError when query some devices for the data.
Code
For example, we want get the data trace from the spectrum analyzer
1
2
## spec.query(*IDN?) == 'Rohde&Schwarz,FSL-18,102695/018,2.50\n'
spec.query(":TRAC? TRACE1")
This will cause UnicodeDecodeError if you have not state the encoding form at all.
In python3, we can use
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pyvisa as visa
# pyvisa 1.11.1
# python 3.7.7
# you need state deviceIP, for example
deviceIP = 'TCPIP0::192.168.1.6::inst0::INSTR'
rm = visa.ResourceManager()
spec = rm.open_resource(deviceIP)
__QUERY__ = """\
:FORM INT,128
:FORM:BORD NORM
:TRAC? TRACE1"""
resp = spec.query(__QUERY__)
#'1.00E+001,1.00E+001...'
data = np.array(eval(resp))
# numpy array
The commands :FORM INT,128 and :FORM:BORD NORM state the returned data form, so that pyvisa can correctly decode it.
If it still has error, try this one
1
2
3
__QUERY__ = """\
:FORM:BORD NORM
:TRAC? TRACE1"""
In the common case, you only need to state the form once, but the safest way is always stating form before query data.