资讯中心

联系我们

深圳市维立信电子科技有限公司
地址:深圳市福田区红荔路第一世界广场A座8D-E
咨询电话:0755-83766766
E-mail:info@welissom.com

如何通过串口读取Keysight双向直流电源的列表模式运行记录?

2026-06-12 09:54:02  点击:

  一、硬件前提说明

  N79xxA / N89xxA 大功率双向源 机身无原生 RS232 串口;如需串口通信只能两种方式:

  选配USB 转 RS232 适配器,仪器端插 USB 虚拟 COM(VISA COM 端口)

  第三方 GPIB 转 RS232 网关间接转发 SCPI

  E36100 BT 系列小功率双向源 部分型号支持背板 RS232 硬件串口;老款低配仅 USB/LAN。

  串口本质只是物理传输层,SCPI 指令集和 LAN/GPIB/USB 完全一致,读取 LIST 运行记录(DLOG/ELOG/ 时序抖动)的指令无任何改动,区别只在串口波特率、帧格式配置。

  二、第一步:串口通信参数配置(仪器端 SCPI 设置串口)

  1. 设置串口通信帧参数(仪器侧)

  scpi

  ! 配置波特率:9600/19200/38400/57600/115200

  SYST:COMM:SER:BAUD 115200

  ! 数据位、校验、停止位:8N1(行业标准)

  SYST:COMM:SER:BITS 8

  SYST:COMM:SER:PARITY NONE

  SYST:COMM:SER:STOP 1

  ! 查询当前串口参数

  SYST:COMM:SER:BAUD?

  SYST:COMM:SER:BITS?;PAR?;STOP?

  默认出厂大多为 9600.8N1.

  2. 串口终止符固定

  Keysight SCPI 统一换行终止 n(LF),上位机串口收发必须以n结尾发送每条指令。

  三、串口读取三类 LIST 运行记录完整 SCPI 流程

  指令和 LAN/GPIB 完全通用,仅收发走 COM 口;分缓存实时读取、读取已存日志文件两种方式。

  前置统一初始化(每次上电脚本开头)

  scpi

  *RST

  *CLS

  ! 清空LIST旧采样缓存

  SOUR:LIST:DLOG:CLE

  SOUR:LIST:TIM:CLE

  ! 开启步进时序抖动捕获

  SOUR:LIST:TIM:CAPT ON

  ! 开启LIST内置电压电流采样记录

  SOUR:LIST:DLOG:ENAB ON

  1、读取 LIST 电压电流 DLOG 采样记录

  方式 A:直接读取运行后内存缓存(最快,不存仪器硬盘)

  scpi

  FORM:DATA ASC ! 串口调试优先ASCII;大数据用BIN二进制

  FORM:BORD SWAP ! 二进制字节序对齐PC

  ! 读取全部采样点V/I数组

  SOUR:LIST:DLOG:DATA? 0.MAX

  串口会逐行 / 块传回所有时序采样数据。

  方式 B:读取仪器内部已自动保存的.dlog 日志文件

  scpi

  ! 读取完整文件内容通过串口输出

  MEM:DATA? "INT:LOGlist_run001.dlog"

  2、读取 LIST 事件 ELOG 运行记录(启停、OVP/OCP、触发、步骤报错)

  scpi

  ! 查询事件总数

  MEM:ELOG:COUN?

  ! 读取全部事件时间戳+状态

  MEM:ELOG:DATA? 0.MAX

  ! 读取已保存elog文件

  MEM:DATA? "INT:LOGlist_event.elog"

  3、读取 LIST 步进时间抖动统计与原始数据

  scpi

  ! 原始抖动差值数组

  SOUR:LIST:TIM:JIT:DATA? 0.MAX

  ! 内置统计值

  SOUR:LIST:TIM:JIT:MEAN?

  SOUR:LIST:TIM:JIT:MAX?

  SOUR:LIST:TIM:JIT:MIN?

  SOUR:LIST:TIM:JIT:STD?

  四、串口二进制大数据传输注意(DLOG 百万采样点)

  串口速率上限 115200bps,远慢于 LAN/USB/GPIB;超大采样量极度耗时,建议:

  短测试用串口导出;长时间高采样优先 LAN

  优先让仪器自动保存到 INT/USB,再读取文件而非实时流式缓存

  二进制块传输格式和 VISA 标准一致(# 长度头),上位机必须按块解析,不能按普通字符串逐行读取。

  加大串口接收缓冲区、延长读取超时时间。

  五、Python 串口完整读取示例(pyserial,无 VISA 也可)

  python

  运行

  import serial

  import time

  # 打开串口,匹配仪器配置

  ser = serial.Serial(

  port="COM3",

  baudrate=115200.

  bytesize=8.

  parity=serial.PARITY_NONE,

  stopbits=1.

  timeout=60 # 长超时适配大数据

  )

  def scpi_send_recv(cmd):

  """发送SCPI指令,带回车换行"""

  ser.write((cmd + "n").encode("ascii"))

  return ser.readline().decode("ascii").strip()

  # 初始化

  scpi_send_recv("*RST;*CLS")

  scpi_send_recv("SOUR:LIST:DLOG:CLE")

  scpi_send_recv("SOUR:LIST:TIM:CLE")

  scpi_send_recv("SOUR:LIST:TIM:CAPT ON")

  # 运行列表

  scpi_send_recv("SOUR:LIST:RUN")

  scpi_send_recv("*WAI")

  # 读取DLOG采样数据(ASCII模式)

  dlog_data = scpi_send_recv("FORM:DATA ASC;SOUR:LIST:DLOG:DATA? 0.MAX")

  print("LIST V/I采样数据:", dlog_data[:500])

  # 读取抖动均值

  jit_mean = scpi_send_recv("SOUR:LIST:TIM:JIT:MEAN?")

  print("步进抖动平均值(s):", jit_mean)

  # 读取ELOG事件

  event_log = scpi_send_recv("MEM:ELOG:DATA? 0.MAX")

  print("运行事件记录:", event_log)

  ser.close()

  二进制 DLOG 块读取简易框架

  python

  运行

  # 切换二进制模式

  scpi_send_recv("FORM:DATA BIN;FORM:BORD SWAP")

  ser.write(b"SOUR:LIST:DLOG:DATA? 0.MAXn")

  # 手动解析#XX长度头 + 浮点二进制流

  raw_bin = ser.read(800000) # 预分配大缓冲

  六、USB 虚拟串口特殊场景(N79/N89 常用方案)

  N79xxA/N89xxA 无硬件 RS232.USB 连接电脑后会生成VISA COM 虚拟串口,使用逻辑同上:

  IO Libraries Suite 识别出 COMx 端口

  通信参数依旧 8N1.波特率可忽略(USB 虚拟速率不受硬件串口波特限制)

  SCPI 指令 100% 通用,读取 LIST 记录无功能删减。

  七、限制与优化方案

  速度瓶颈 115200 串口≈14KB/s;百万点 DLOG 可能传输数分钟。 优化:仪器 AUTO 保存日志到内部闪存,串口只下发MEM:DATA?拉取成品文件,比实时缓存流式读取稳定。

  容易丢包 不要一次性0.MAX拉取超大点数;采用分块读取:

  scpi

  SOUR:LIST:DLOG:DATA? 0.20000

  SOUR:LIST:DLOG:DATA? 20000.20000

  机型不支持串口怎么办 优先 LAN TCPIP;其次 USB VISA;最后 USB 转 RS232 虚拟 COM。

  八、故障排查

  发送指令无返回:核对波特率、8N1、终止符n、COM 端口号

  返回乱码:ASCII/BIN 模式不匹配、字节序FORM:BORD错误

  查询抖动 / DLOG 返回空:未开启 CAPT/DLOG 使能、LIST 未完整运行一次

  报错-113:机型无 LIST 时序采集功能(低配 E36100)