Keysight 双向直流电源(N6705C/N6790A/N8900 等)没有专门叫 “ELOG?” 的 SCPI 命令直接返回 “缓冲区已满” 布尔值,但可以用错误队列状态 + 系统日志状态 + 专用错误位来精准判断 ELOG(Error Log)是否满。下面给你可直接用的 SCPI 查询组合 + 解释 + Python 示例。
一、ELOG 满的本质
ELOG 是仪器内部非易失错误日志缓冲区(存开机以来的错误 / 告警),通常容量有限(例如 200 条)。写满后:
新错误不再写入 ELOG
状态寄存器置位 “日志满” 位
可能报 -350 “Queue overflow”
二、SCPI 直接查询(最可靠组合)
1. 查标准事件寄存器:是否有 “队列溢出”(ELOG 满核心标志)
scpi
*ESR?
; 返回值:0–255
; bit7=1 → 发生严重错误;bit2=1 → 队列溢出(ELOG 满)
判断规则:(*ESR? & 4) == 4 → ELOG 缓冲区已满。
2. 查错误队列深度:当前未读错误数(辅助判断)
scpi
:SYSTem:ERRor:COUNt?
; 返回整数:当前错误队列中的条目数
如果 Count ≥ 最大容量(如 200) → ELOG 满。
3. 查系统安全日志状态(部分固件支持)
scpi
:SYSTem:SECurity:LOG:FULL?
; 返回 1=满,0=未满(仅新版固件有,如 N6705C FW ≥ A.03.00)
4. 查是否有 “Queue overflow” 错误(最终确认)
scpi
:SYSTem:ERRor?
; 返回最近一条错误,若包含 -350."Queue overflow" → ELOG 满
三、完整查询命令串(一次性发)
scpi
*ESR?;:SYST:ERR:COUNt?;:SYST:SEC:LOG:FULL?;:SYST:ERR?
四、Python 自动判断示例
python
运行
import pyvisa
rm=pyvisa.ResourceManager()
inst=rm.open_resource("TCPIP0::192.168.1.100::INSTR")
# 1. 读 ESR
esr=int(inst.query("*ESR?").strip())
queue_overflow=(esr & 4) != 0
# 2. 读错误计数
err_count=int(inst.query(":SYST:ERR:COUNt?").strip())
# 3. 读日志满标志(可选)
try:
log_full=int(inst.query(":SYST:SEC:LOG:FULL?").strip())
except:
log_full=0 # 旧固件不支持
# 4. 读最近错误
last_err=inst.query(":SYST:ERR?").strip()
# 判断
elog_full=queue_overflow or (err_count >= 200) or (log_full == 1)
print("ELOG 缓冲区已满:", elog_full)
print("错误计数:", err_count)
print("最近错误:", last_err)
inst.close()
五、如何清空 ELOG(满了之后)
scpi
:SYSTem:SECurity:LOG:CLEar ; 清空安全/错误日志(保留校准)
*CLS ; 清除状态寄存器
六、关键注意
*ELOG 和 SAV 快照是不同分区:清 ELOG 不影响用户设置快照和校准数据。
旧固件无 :SYST:SEC:LOG:FULL?,依赖 *ESR? 和 :SYST:ERR:COUNt? 即可。
ELOG 满不影响仪器正常输出,仅停止记录新错误。