Keysight N79xx/N89xx/N6705C ELOG 历史最早起始时间SCPI 查询方案
ELOG 无单独:ELOG:STARTTIME?原生 SCPI 指令,只能读取缓冲区第 1 条日志的时间戳作为整段历史起始时间,分缓存未满、缓存打满环形覆盖两种场景。
一、单通道机型(N79xx / N89xx)标准指令
步骤 1:查询 ELOG 当前有效总记录条数
scpi
:ELOG:COUNt?
返回TotalCnt:当前缓冲区有效日志总数
TotalCnt=0:无任何 ELOG 历史记录,无起始时间
TotalCnt≥1:首条索引固定为1
步骤 2:读取缓冲区第一条记录(历史最早起始时间)
scpi
:ELOG:DATA? 1
返回字段格式: Index,Unix时间戳,通道,事件码,事件说明,Voltage,Current 第 2 个字段 = 整条 ELOG 历史记录起始 Unix 时间戳
示例返回:1.1778912345.1.OVP,OverVoltage,28.52.0.003 起始时间戳:1778912345(Unix 秒级时间,上位机转北京时间)
二、多通道模块化机型(N6705B/C,分通道独立 ELOG 缓存)
通道前缀CHx:,各通道日志独立:
scpi
:CH1:ELOG:COUN?
:CH1:ELOG:DATA? 1 //CH1历史起始时间
:CH2:ELOG:COUN?
:CH2:ELOG:DATA? 1 //CH2历史起始时间
三、环形缓存满容量场景(关键)
ELOG 是循环环形缓冲区,满后从头覆盖旧日志:
查询最大缓存深度::ELOG:SIZE? MAX → MaxDepth
若TotalCnt == MaxDepth:当前索引 1 是最新写入数据,最早历史不在 index=1
最早历史条目下标 = 当前写入指针位置 + 1.计算公式:
plaintext
FirstIndex = (COUN + 1) % MaxDepth
if FirstIndex ==0: FirstIndex=MaxDepth
再用:ELOG:DATA? FirstIndex读取真实全缓存最早起始时间
举例
Max=200.COUN=200(缓存写满) FirstIndex=(200+1)%200=1 → FirstIndex=200 :ELOG:DATA? 200 → 整段 ELOG 最旧起始时间
四、Python 自动获取 ELOG 起始时间代码(自动区分满 / 未满)
python
运行
import pyvisa,time
rm=pyvisa.ResourceManager()
inst=rm.open_resource("TCPIP::电源IP::5025::SOCKET")
cnt=int(inst.query(":ELOG:COUN?"))
if cnt==0:
print("ELOG无历史记录")
else:
max_dep=int(inst.query(":ELOG:SIZE? MAX"))
if cnt
first_data=inst.query(":ELOG:DATA? 1")
else:
first_idx=(cnt+1)%max_dep
first_idx=max_dep if first_idx==0 else first_idx
first_data=inst.query(f":ELOG:DATA? {first_idx}")
ts=int(first_data.split(",")[1])
start_time=time.localtime(ts)
print("ELOG最早起始Unix时间戳:",ts)
print("本地起始日期:",time.strftime("%Y-%m-%d %H:%M:%S",start_time))
五、补充 DLOG 波形记录起始时间(区分 DLOG≠ELOG)
如需查询DLOG 采样数据的首采样时间戳:
scpi
:DLOG:DATA? 1
同样取第二个字段为 DLOG 起始时间。
六、常用配套辅助命令
清空 ELOG(重置起始时间,COUN 清零)::ELOG:CLEar
读取末尾最新记录(结束时间)::ELOG:DATA?