1. 程式人生 > >試水VISA程式設計——Python下的Pyvisa版本

試水VISA程式設計——Python下的Pyvisa版本

把以前的VB控儀器(安捷倫,DSO-X 3034A)的版本升級了一下,用Pyvisa改進之。

既然用上了python,那肯定要加上波形分析的功能了。

Pyvisa的安裝不必多說。主要是讀取波形的方法需要摸索。官方例項中的python感覺有些老舊,而Pyvisa的官方文件又不切合示波器的場景。因此需要探索出自己的方法。

閒話不多說,直接上程式碼:

import visa
import string
import struct
# rm = visa.ResourceManager()
# print(rm.list_resources())
# print rm

rm = visa.ResourceManager()

# print rm.list_resources()
inst = rm.open_resource('USB0::0x0957::0x17A4::MY54021611::0::INSTR')
# print inst


# inst.write(':AUToscale')

inst.write("DIGitize CHANnel1")
inst.write(":WAVeform:POINts 1000")
inst.write(":WAVeform:FORMat ASCii")
wav_form_dict = {
0 : "BYTE",
1 : "WORD",
4 : "ASCii",
}
acq_type_dict = {
0 : "NORMal",
1 : "PEAK",
2 : "AVERage",
3 : "HRESolution",
}
preamble_string = inst.query(":WAVeform:PREamble?")
# print preamble_string
(
wav_form, acq_type, wfmpts, avgcnt, x_increment, x_origin,
x_reference, y_increment, y_origin, y_reference
) = string.split(preamble_string, ",")
print "Waveform format: %s" % wav_form_dict[int(wav_form)]
print "Acquire type: %s" % acq_type_dict[int(acq_type)]
print "Waveform points desired: %s" % wfmpts
print "Waveform average count: %s" % avgcnt
print "Waveform X increment: %s" % x_increment
print "Waveform X origin: %s" % x_origin
print "Waveform X reference: %s" % x_reference # Always 0.
print "Waveform Y increment: %s" % y_increment
print "Waveform Y origin: %s" % y_origin
print "Waveform Y reference: %s" % y_reference

inst.write(":WAVeform:DATA?")
data = inst.read_raw()
print '---------'
# print str(data)

data1 = data.split(",")
print data1
print len(data1)

輸出的結果是形如['#800013887-2.00825e+000', '-1.84745e+000', '-2.04845e+000', '-1.88765e+000', '-1.88765e+000', '-2.08865e+000', '-1.80725e+000', '-2.00825e+000', '-1.92785e+000', '-1.88765e+000', '-2.08865e+000', '-1.80725e+000', '-2.04845e+000', '-2.00825e+000', '-1.80725e+000', '-2.08865e+000', '-2.00825e+000', '-1.76705e+000', '-1.84745e+000', '-2.00825e+000', '-1.84745e+000', '-1.68664e+000', '-1.64644e+000', '-1.76705e+000', '-1.84745e+000', '-1.80725e+000', '-1.60624e+000', '-1.48564e+000', '-1.36504e+000', '-1.48564e+000', '-1.56604e+000', '-1.60624e+000', '-1.60624e+000', '-1.52584e+000', '-1.36504e+000', '-1.這種型別的數值,這時使用字串操作,再進行轉化成適合FFT的形式就行了。

至於取樣週期,可以從            Waveform X increment: +5.04000000E-005    得出。這裡代表5ms。

同時還發現,如果將

inst.write(":WAVeform:POINts 1000")

中的1000改為2000,即取2000個點,那麼這個週期也將縮小一半。符合規律。

在取得了數值後,又可以得出週期,那麼可以套用網上的Python版本FFT程式進行畫圖了。