一、核心硬件固件限制(N6705C/N7900/N6900 Agilent/Keysight 双向平台)
仪器文件系统元数据接口 SYST:FILE:ATTR? 只输出两组时间戳:创建时间、修改时间,不存在最后访问时间(Access Time)的返回字段;
整机固件无任何独立 SCPI 指令(如SYST:FILE:ACCESS?)用于读取文件最后读取 / 访问时刻;
仪器嵌入式闪存文件系统本身不记录、不存储文件访问时间,底层无该日志条目,所以无法通过 SCPI 调取。
SYST:FILE:ATTR? 固定返回字段结构
plaintext
Y,M,D,H,M,S(创建), Y,M,D,H,M,S(修改), 文件字节大小, 读写权限
无 Access 时间段。
二、三个时间定义区分
创建时间 Create 执行ELOG:EXPORT/DLOG:SAVE生成文件的瞬间时间,永久固定,重命名不会变更。 查询示例:
scpi
SYST:FILE:ATTR? "INT:/logs/ovp_record.csv"
修改时间 Modify 文件内容被覆写、追加后的更新时间;仅写入操作会刷新,单纯下载读取(SYST:TRANSFER?)不会更新 Modify 时间。
最后访问时间 Access 文件被读取、打开、浏览的时间;仪器系统完全不采集该标记,无数据可查。
三、替代方案:上位机侧自主记录访问时序(工业可行方案)
既然仪器无原生 Access 时间,由 PC 上位机管控每次文件读取动作并打时间戳:
上位机发起文件下载读取时,同步抓取本地 / 仪器系统时间作为本次访问时间;
把「文件名 + 访问时刻」存入 PC 本地日志存档。
配套 SCPI 读取仪器基准时钟(对齐时间戳)
scpi
SYST:DATE? ! YYYY,MM,DD
SYST:TIME? ! HH,MM,SS
Python 简易时序记录示例:
python
运行
import pyvisa
from datetime import datetime
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP::192.168.1.100::INSTR")
file_path = 'INT:/logs/limit_history.csv'
# 读取仪器当前系统时间,作为本次文件访问时间
date_raw = inst.query("SYST:DATE?").strip().split(",")
time_raw = inst.query("SYST:TIME?").strip().split(",")
access_time = f"{date_raw[0]}-{date_raw[1]}-{date_raw[2]} {time_raw[0]}:{time_raw[1]}:{time_raw[2]}"
# 执行文件读取访问
inst.write(f'SYST:TRANSFER? "{file_path}"')
file_data = inst.read_raw()
# 上位机留存访问记录
with open(r"C:access_log.txt","a",encoding="utf-8") as f:
f.write(f"{access_time} | 访问文件:{file_path}n")
inst.close()
四、特殊场景补充
ELOG 原生 event.log 每条 OVP/OCP 故障事件自带独立触发时间戳(ELOG:DATA?内),这是故障发生时间,不是文件访问时间;
USB 外接 U 盘文件 U 盘 FAT32 文件系统本身支持 Access 时间,但仪器固件读取 U 盘元数据时依旧只解析创建 / 修改,不会上报 Access 给 SCPI;
老旧 E36xx 机型:无完整文件系统,不存在任何文件时间元数据查询能力。
五、速查总结
无 SCPI 指令可查询仪器侧文件最后访问时间;
仅可读取:创建时间、修改时间;
标准化替代手段:上位机读取文件前抓取仪器系统时钟,人工登记访问时间。