如何通过SCPI查询获取FSW频谱分析仪的浮点测量结果
问题解决方案
核心错误:读取命令用错了
你现在用fsw.write("SENS:MARK:MAX:PEAK?")发送查询命令,但write只负责发指令,不会返回仪器的响应数据。必须用query方法来发送查询并获取返回值——这是你得不到浮点结果的首要原因。
关键代码修正
把原来的打印行替换成:
# 发送查询并获取返回值 peak_power = fsw.query("SENS:MARK:MAX:PEAK?") # 去除冗余字符并转成浮点型 peak_power_float = float(peak_power.strip()) print(f"{peak_power_float} dBm")
其他代码问题修正
- 错误的带宽命令:
fsw.write("FSW,'SENS:BAND:RES %d HZ" %resBW)这行多了冗余的FSW,,如果分辨率带宽需要小数,把%d改成%f,修正后:fsw.write("SENS:BAND:RES %f HZ" % resBW) - 加扫描完成等待:查询峰值前,最好加一行等待扫描完成的命令,避免读到旧数据:
fsw.query("INIT:IMM; *OPC?")
仪器精度配置(可选)
如果还是只有整数,可能是仪器精度设置限制,添加以下命令调整测量小数位数:
# 设置标记测量保留3位小数 fsw.write("CALC:MARK:PREC 3")
完整修正代码示例
fsw = rm.open_resource("GPIB::15::INSTR") fsw.write("DISP:TRAC ON") fsw.write("*rst; status:preset; *cls") fsw.write("SENS:FREQ:CENTER %d MHZ" % fc) fsw.write("SENS:FREQ:SPAN %d MHZ" % span) fsw.write("INP:ATT 20dB") # 修正带宽命令 fsw.write("SENS:BAND:RES %f HZ" % resBW) fsw.write("SENSE:MARK:MAX:PEAK") fsw.write("INIT:CONT:OFF") # 等待扫描完成 fsw.query("INIT:IMM; *OPC?") fsw.write("CALC:MARK:FUNC:FPE:STAT ON") fsw.write("CALC:MARK:FUNC:FPE:SORT Y") # 正确读取并转换峰值数据 peak_power = fsw.query("SENS:MARK:MAX:PEAK?").strip() peak_power_float = float(peak_power) print(f"{peak_power_float} dBm")
内容的提问来源于stack exchange,提问作者Jasiel Hernández Trujillo
相关产品推荐
相关产品推荐

