声明
部分代码来自网络,如有侵权可以告知下架侵权代码。代码可以保证真实可用,毕竟是运行了才敢发出来的。
Python快速调用VISA
安装pyvisa
pip3 install pyvisa
代码调用
import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('TCPIP::192.168.1.241::INSTR')
inst.write("*IDN?")
print(inst.read())
打开ip为“192.168.1.241
”的设备,并读取设备信息。
获取连接地址
和仪器连接的方式有多种:
LAN、USB、GPIB……
所以我们一般都采用VISA的驱动来查看连接的地址:open_resource('地址')
一般有:
IOLibSuite
ni-visa
OpenChoiceTekVisa
VISA命令快速入门看文档
英文文档有这样的结构:
[:SENSe]:ACP:FILTer[:RRC]:ALPHa <number>
[:SENSe]:ACP:FILTer[:RRC]:STATe OFF|ON|0|1
在使用的时候一定要去掉[]、<>、|
,并且|里选择一个内容即可。
安捷伦(Agilent)、泰克(Tektronix AWG)
以下内容有的只在一个牌子型号上进行尝试,项目带着我走,有其他设备条件的可以自行尝试。
通用协议
*IDN? 读取设备型号信息
*RST 设备复位
*TST? 设备自检
*CAL? 运行所有自校准并返回结果
*CLS 清除所有事件寄存器和队列
*ESE 设置或返回事件状态启用寄存器 (ESER)
*ESR? 返回事件状态寄存器 (ESR) 的当前内容
*OPT? 返回仪器的已实施选项
*TRG 仅为触发器 A 生成触发事件
*TST? 执行开机自检并返回结果
MMEM:CAT? 仪器默认文件夹、文件列表
频谱仪
- Agilent型号:
E4440A (3 Hz – 26.5 GHz)
E4443A (3 Hz – 6.7 GHz)
E4445A (3 Hz – 13.2 GHz)
E4446A (3 Hz – 44.5 GHz)
E4448A (3 Hz – 51.0 GHz)
参考的这文档:《Programming Conversion Guide-Agilent Technologies PSA SeriesSpectrum Analyzers》
:SENS:FREQ:CENT %f Hz 设置中心频率(单位可以是GHz、MHz、kHz)
:SENS:FREQ:SPAN %f Hz 调整带宽(单位可以是GHz、MHz、kHz)
:SENS:BAND:RES %f Hz 调整分析带宽(单位可以是GHz、MHz、kHz)
:DISP:WIND:TRAC:Y:RLEV %f DBM 设置参考电平
:DISPlay:WINDow:TRACe:Y:SCALe:RLEVel 10dBm 设置参考电平
:CALC1:MARK1:STAT ON 开启标注
:CALC1:MARK1:MAX:PEAK 标注最大点
:CALCulate:MARKer:MAXimum peak search
CALC:MARK1:X? 读取峰值结果X轴
CALC:MARK1:Y? 读取峰值结果Y轴
:SENSE:FRQUENCY:START %f Hz 设置起始频率(单位可以是GHz、MHz、kHz)
:SENSE:FRQUENCY:STOP %f Hz 设置终止频率(单位可以是GHz、MHz、kHz)
:TRACe:MODE MAXHold
clear write
:TRACe:MODE WRITe 设置trace为max hold
有的文档上使用MARKer
来代替MARK
,这样目前我测试都可以获得数据。
频谱一般使用步骤:
- 设置起始频率
- 设置终止频率
- 设置参考电平
- 设置trace为max hold
- peak search
- 读取当前mark点值
Agilent 在线帮助文档:https://na.support.keysight.com/pna/help/latest/Programming/GP-IB_Command_Finder/
功率计
Keysight
- 型号:
E4417A
(双通道,指令头SENSe2
)
UNIT1/2:POW DBM/W 功率单位设置
UNIT1/2:POW? 查询单位返回dBm或W
FETCh1/2? 功率计度数 1/2 表示通道
SENS1/2:AVER 1|0 设置平均功率计读数 0默认1为AVER
SENS1/2:AVER? 返回1或0 ,1为AVER
SENS1/2:AVER:COUN 400 平均功率读数点数设置
SENS1/2:AVERage:COUNt? 返回平均功率读数点数COUNT 整数
SENS1/2:AVER:COUN:AUTO 1|0 自动设置平均功率读数1为AUTO
SENS1/2: AVERage:COUNt:AUTO? 返回设置平均功率读数1为AUTO
SENSe1/2:CORR:GAIN2:STAT 1|0 读数偏置确定1为确定
SENSe1/2:CORR:GAIN2:STATe? 查询读数偏置确定
SENSe1/2:CORRection:GAIN2 XX 读数偏置设置*线缆等修正
SENSe1/2:CORRection:GAIN2? 返回 偏置数值
- N1911A
CALibration1:ZERO:AUTO ONCE 调零
CALibration1:AUTO ONCE 校准
SENSe1:CORRection:GAIN2 %%f 设置补偿值
SENSe1:CORRection:GAIN2:STATe ON 开启补偿
SENSe1:FREQuency %%f GHz 设置频率值
FETCh1? 读取功率值
RS
- NRP2
CALibration:ZERO:AUTO ONCE 调零
SENSe:CORRection:OFFSet %%f 设置补偿值
SENSe:CORRection:OFFSet:STATe ON 开启补偿
SENSe:FREQuency %%f GHz 设置频率值
FETCh1? 读取功率值
信号源
- AWG
参考《AWG5200-Programmer-Manual-077133700-RevA》
INSTrument:MODE {AWG|FGEN} 选择 AWG 功能
[SOURce[n]:]RMODe {CONTinuous|TRIGgered|TCONtinuous|GATed} 控制 AWG 信号状态就位
AWGControl:RUN[:IMMediate] 控制 AWG 输出信号通道状态
AWGControl:RMODe {CONTinuous|TRIGgered|GATed} 输出状态:触发。连续输出/单次开关
CPLAYBACK:COMPILE:SRATE xxx 设置采样率
SOURCE1:DAC:RESOLUTION xx 设置分辨率
[SOURce[n]:]POWer[:LEVel][:IMMediate][:AMPLitude] 输出信号输出幅度范围
MMEMory:IMPort <wfm_name>,<filepath>,<type> 外部数据加载
是德科技信号发生器(Keysight RF Signal Generators)
搬砖于:https://blog.csdn.net/wulinncom/article/details/107927741
:SYSTem:DATE? //查询日期,用于确认信号发生器是否连接正常,也可以选择*IDN?读取设备型号信息测试链接
:FREQuency:CW 5 MHz //设置频率为5MHz
:FREQuency:CW? //查询频率
:AMPLitude:CW 5 dBm //设置幅度为5dbm
:RFOutput:STATe ON //打开射频输出
:AM:STATe ON //打开调幅模式
:AM:DEPTh 5 //设置调幅深度
:AM:SOURce EXT //设置调幅源为外部
:MOD:STATe ON //使能设置
:FM:STATe ON //打开调频模式
:FM:DEViation 5 KHz //设置调频偏差为5KHz
:FM:SOURce EXT //设置调频源为外部
:MOD:STATe ON //使能设置
:PULM:STATe ON //打开脉冲模式
:PULM:SOURce EXT //设置脉冲源为外部
:MOD:STATe ON //使能设置
安立(ANRITSU)
- MG3694C
FREQuency:CW %%f GHz //设置频率
POWer:LEVel:IMMediate:AMPLitude %%f dBm //设置起始输出功率
OUTPut:STATe ON //开启输出
OUTPut:STATe OFF //关闭输出
RS
- SMB100A
FREQuency:CW %%f GHz //设置频率
POWer:LEVel:IMMediate:AMPLitude %%f //设置起始输出功率
OUTPut ON //开启输出
OUTPut OFF //关闭输出
场强计
待定
特殊功能
截图
# 开启彩色打印
self.VISA_ID.write('HCOP:DEV:COL ON')
# 选择文件格式
# (WMF | GDI | EWMF | BMP | PNG | JPEG | JPG | PDF | SVG | DOC | RTF)
self.VISA_ID.write('HCOP:DEV:LANG PNG')
# 设置打印到文件
self.VISA_ID.write('HCOP:DEST "MMEM"')
# 仪器上的文件路径/名称
self.VISA_ID.write('MMEM:NAME "c:\\temp\\hcopy.png"')
# 创建屏幕截图
self.VISA_ID.write('HCOP:IMM')
PCfilePath = r'e:\hcopy.png'
query = 'MMEM:DATA? \'c:\\temp\\hcopy.png\''
# 请求获取仪器中的文件数据并保存到本地硬盘驱动器
fileData = self.VISA_ID.query_binary_values(query, datatype='s')
newFile = open(PCfilePath, "wb")
# print(fileData)
newFile.write(bytes(fileData))
newFile.close()