下面直接说清楚:Keysight 双向直流电源(N6781A / B2902A / N6705B)本身没有 SCPI 指令 “直接返回上升沿次数”,电源内部不做边沿计数,只能靠:
SCPI 高速连续读电压 + 上位机做边沿检测与计数(软件计数)
或 外接示波器 / 高速采集卡做硬件边沿计数
下面给你完整 SCPI + Python 实现(可直接跑,自动统计上升沿次数)。
一、为什么没有直接 SCPI?
Keysight 电源的 SCPI 只有:
MEAS:VOLT? 读当前电压
MEAS:VOLT:MAX? / MIN? 极值
TRIG 触发采集(但不计数边沿)
电源内部没有 “上升沿计数器” 硬件,所以不存在 COUNt:RISing? 这类指令。
二、实现思路(SCPI + 上位机软件计数)
用 SCPI 高速连续读取输出电压波形(采样率~10–100 ms / 点,电源上限)
上位机(Python)做:
设定上升沿阈值(如从 10%→90% Vnom)
逐点判断:低于阈值 → 高于阈值 = 1 次上升沿
累计次数,得到 “上升沿次数”
三、关键 SCPI 命令(高速采集)
scpi
*RST
*CLS
OUTP ON
VOLT 5.0 ; 设定 Vnom
CURR 1.0 ; 固定负载
; 高速连续采集(最快约 10ms/次)
SENS:VOLT:AUTO OFF
TRIG:SOUR IMM ; 立即触发
四、Python + SCPI 自动统计上升沿次数(直接可用)
python
运行
import pyvisa
import time
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")
inst.timeout = 5000
# 初始化
inst.write("*RST")
inst.write("OUTP ON")
Vnom = 5.0
inst.write(f"VOLT {Vnom}")
inst.write("CURR 1.0")
# 上升沿判定阈值(10% 和 90% Vnom)
V_low = 0.1 * Vnom
V_high = 0.9 * Vnom
# 采集参数
sample_interval = 0.01 # 10ms 采样(电源极限)
duration = 10 # 采集 10 秒
rising_edge_cnt = 0
prev_above = False
print(f"开始采集 {duration}s,统计上升沿({V_low:.2f}→{V_high:.2f}V)...")
t0 = time.time()
while time.time() - t0 < duration:
V = float(inst.query("MEAS:VOLT?"))
now_above = (V >= V_high)
# 上升沿:之前低于,现在高于
if now_above and not prev_above:
rising_edge_cnt += 1
prev_above = now_above
time.sleep(sample_interval)
print(f"采集结束,上升沿次数 = {rising_edge_cnt}")
inst.close()
五、精度与限制(必须知道)
电源 SCPI 最快:~10 ms / 次 → 最高可测 50 Hz 上升沿
若上升沿 >50 Hz(如 kHz 级脉冲):
必须外接示波器 / 高速采集卡做硬件计数
电源 SCPI 跟不上,会漏计
六、总结(一句话)
没有原生 SCPI 直读上升沿次数;用 SCPI 高速读电压 + 上位机做边沿检测计数,高频场景需外接示波器。