我对此VISA获取电话的返回结果有疑问:
ribData = []
ribData = inst.query('CURVe?')
我正在使用此调用从示波器中获取波形。我正在用Python开发这个程序。
如果值为正,则调用返回二进制值,我可以对它们进行图形化,但如果我将波形放在中间点以下的范围内,则会收到错误:
Traceback (most recent call last):
File "C:/_Python/TDS3054/mainTds.py", line 107, in cButton
ribData = inst.query('CURVe?')
File "C:\Python34\lib\site-packages\pyvisa\resources\messagebased.py", line 384, in query
return self.read()
File "C:\Python34\lib\site-packages\pyvisa\resources\messagebased.py", line 309, in read
message = self.read_raw().decode(enco)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 401: ordinal not in range(128)
我在采集之前使用以下VISA调用来设置示波器。
inst.write('DATa:SOUrce CH2')
inst.write('DATa:WIDth 1')
inst.write('DATA:START 10')
inst.write('DATA:STOP 800')
inst.write('DATa:ENCdg RIBinary') # RIB -128 to +127
因为,在采集调用(CURVe)上发生了故障,我想知道是否有可用于解决此问题的VISA库调用。也许我需要将Unicode设置为UTF-8,或者VISA可能不会处理Unicodes,或者这可能不是我的问题。
答案 0 :(得分:1)
最有可能是Unicode问题,但我在pyVisa interface document找到答案。在本文档中,我找到了函数query_binary_values(),并用它替换了inst.Query(' CURVe")。这就是我使用它的方式。
tdsData = inst.query_binary_values('CURVe?', datatype='b', is_big_endian=True)
返回的数据没有UnicodeDecodeError,我能够绘制所有行没有问题。
答案 1 :(得分:0)
请注意,该错误表明它正在使用' ascii'编码。这不是首选,因为我非常确定您的乐器输出的值比编码方法可以处理的范围更广:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 401: ordinal not in range(128)
所以要修复(至少在我的情况下)你可以指定一个不同的编码方法。 首先在python中引用你的乐器,然后将其编码设置为' latin-1'
例如:
inst = rm.open_resource('USB0::0x1AB1::0x0588::DS1ET152915193::INSTR')
inst.encoding = "latin-1"
然后读取值并将它们转换为标量数组,只需执行以下操作:
data = map(ord, inst.query(":WAVeform:DATA? FFT")) #UTF string to int array conversion
数据现在应该包含所有"全范围"值。