試水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程式進行畫圖了。