2024-07-02
GR5526 GUI专题(4) - Lvgl字体的位图数组合并转换为bin文件的说明
写技术文章
精选推荐
无敌浩克
在第一章节学习如何使用PyVISA连接仪器之后,我们继续以一个Agilent 33500B信号发生器控制为例程讲解仪器控制。
每个仪器都有不同的属性和功能,建议为每个仪器单独创建一个类,这样后续在控制多台同样类型但地址不同的仪器时候操作更为方便。
1, 1,导入必须的Python模块,比如PyVISA,这里我们多导入一个time模块,使用此模块记录系统操作时间还有延时功能,若还需要其他模块请自行导入;
import pyvisa
import time
2,2,为此仪器单独创建一个专属类,类的属性有该仪器地址和名称;
class waveform_generator:
def __init__(self,instrument_address):
self.instrument_address = instrument_address
self.waveform=0
3,3, 为上述专属类创建方法;
#信号源初始化函数,在此方法里面创建仪器VISA资源连接,并且可配置是否需要复位仪器
def wave_init(self,instrument_rst=1):
#信号源配置函数
#channel_idx 配置仪器的输出通道,这里我们默认配置正弦波
# waveform_type 配置信号源的类型,这里我们默认配置正弦波
# amp_vpp 配置信号源幅度
# apm_offset 配置信号源输出偏置
# phase 配置信号源输出初始相位
# out_load 配置信号源输出阻抗
# freq 配置信号源输出频率
def wave_set(self,channel_idx=1,waveform_type='SIN',amp_vpp=200,apm_offset=100,
phase = 0,out_load=50,freq=5000):
#信号源输出状态控制,打开或者关闭信号输出
def wave_output_state(self,output_state=0):
4, 4,类的属性和方法均定义成功后,接下来调用此类来控制信号发生器
#首先配置需要控制的仪器地址,该地址信息可以在‘NI-MAX’或者pyvisa resource manager中查看
waveform_generator_address = 'USB0::0x0957::0x2B07::MY52700860::INSTR'
#创建一个变量来实例化该类
wave1=waveform_generator(waveform_generator_address)
#接下来以一个输出幅度变化的正弦波为例讲解调用该类的方法
wave1.wave_init(instrument_rst=1) #init instrument
wave1.wave_output_state(output_state=1) # turn on the output
amp_vpp = 100;
while 1:
if amp_vpp == 1000:
break
amp_vpp += 20;
wave1.wave_set(waveform_type='SIN',amp_vpp=amp_vpp,apm_offset=0,
phase = 0,out_load=50,freq=5000) #set the parameters of channel1
time.sleep(1)
wave1.wave_output_state(output_state=0) # turn off the output
详细的指令信息请参考《Agilent 33500 Series Waveform Generator Operating and Service Guide》
完整的类定义参考如下:
class waveform_generator:
def __init__(self,instrument_address):
self.instrument_address = instrument_address
self.waveform=0
def wave_init(self,instrument_rst=0):
rm=pyvisa.ResourceManager()
wave_address=rm.list_resources()
print(wave_address,type(wave_address))
self.waveform = rm.open_resource(self.instrument_address)
print(self.waveform.query('*IDN?'))
print('waveform SCPI version:',self.waveform.query(':SYSTem:VERSion?')) #return the SCPI version level
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), 'waveform connect success')
if instrument_rst==1:
self.waveform.write('*RST') #reset waveform
print('waveform reset success')
self.waveform.write('*CLS') #clear the status data structures
def wave_set(self,channel_idx=1,waveform_type='SIN',amp_vpp=200,apm_offset=100,
phase = 0,out_load=50,freq=5000):
# waveform_type='SIN' # SCPI: FUNCtion {SIN|SQU|RAMP|PULSe|NOIS|DC|PRBS|ARB}
self.waveform.write(f'FUNCtion {waveform_type}')
self.waveform.write(f'FREQ {freq}')
self.waveform.write(f'VOLTage {amp_vpp} mV')
self.waveform.write(f'VOLT:OFFS {apm_offset} mV')
self.waveform.write(f'PHASe {phase}')
self.waveform.write(f'OUTPut:LOAD {out_load}') #'50' or 'INF'
# print(f'CHANnel{channel_idx} OUTPut[1|2]:LOAD =', self.waveform.query('OUTPut:LOAD?'))
def wave_output_state(self,output_state=0):
self.waveform.write(f'OUTPut:STATe {output_state}')
print('waveform output state= ',self.waveform.query(':OUTPut:STATe?'))
打开微信,使用“扫一扫”即可关注