摘要
本技术报告详细介绍了使用Rigol DHO924示波器连接上位机,实现24小时连续波形数据记录的全流程方案。报告涵盖了所需的软硬件准备、连接配置、数据采集软件选择与设置、自动化脚本编写、数据存储与管理,以及后期数据分析方法,旨在为需要进行长时间、高精度波形监测的工程师和技术人员提供一套完整、可行的技术参考。
1. 引言
在电力电子、通信系统、传感器网络以及设备可靠性测试等领域,经常需要对信号进行长时间(如24小时)的连续监测与记录。Rigol DHO924作为一款高性能数字示波器,具备强大的波形捕获与处理能力。然而,其内置存储空间和显示界面并不适合进行超长时间的数据记录与分析。通过连接上位机(PC),利用专业软件进行远程控制和数据采集,可以充分发挥DHO924的性能,实现稳定、可靠的长时间波形记录。本报告将系统性地阐述这一技术方案的实施细节。
2. 系统组成与硬件连接
2.1 所需设备与材料
- Rigol DHO924示波器:主测量设备。
- 上位机(个人电脑):运行控制与数据采集软件,建议配置:Windows 10/11系统,8GB以上内存,充足硬盘空间(用于存储24小时数据)。
- 连接线缆 :
- LAN网线(推荐):用于通过以太网连接,稳定性高,速度较快。
- USB线缆(Type-B to Type-A):作为备用或辅助连接方式。
- 被测设备与探头:根据实际测量信号准备相应的探头(如高压差分探头、电流探头等)。
- 网络交换机/路由器(若使用LAN连接):用于将示波器和PC接入同一局域网。
2.2 硬件连接步骤
- 使用LAN网线,一端连接DHO924示波器背板的LAN接口,另一端连接至与上位机在同一局域网的交换机或路由器。
- (可选)使用USB线缆连接示波器的USB Device接口和PC的USB接口,可用于传输文件或作为备用控制通道。
- 为示波器和上位机接通电源,并开机。
- 在DHO924示波器面板上,进入 Utility → I/O设置 → LAN,查看并记录其自动获取或手动设置的IP地址(例如:192.168.1.100)。
- 确保上位机可以Ping通示波器的IP地址,验证网络连通性。
3. 软件方案选择与配置
3.1 官方软件:Rigol UltraSigma
功能概述:Rigol官方提供的综合仪器控制软件,支持DHO系列示波器,具备图形化控制界面、数据采集、屏幕截图、波形数据导出等功能。
用于长时间记录的优缺点:
- 优点:官方兼容性最佳,设置简单,可视化操作友好。
- 缺点:自动化能力相对较弱,长时间运行稳定性依赖软件本身,批量数据管理功能有限。
基本设置流程:
- 在PC上下载并安装UltraSigma。
- 打开软件,点击"查找仪器",软件应能自动发现网络中的DHO924。
- 连接仪器,即可在软件界面远程操作示波器面板,设置触发、时基、垂直档位等参数。
- 使用"截图"或"波形数据"保存功能进行单次数据抓取。但对于24小时记录,需要借助其"宏录制"或外部脚本定时触发保存操作。
3.2 编程控制方案(推荐):Python + PyVISA
这是实现自动化、长时间、高可靠性数据记录的首选方案。通过编写Python脚本,可以精确控制采集节奏、处理数据、自动保存并加入异常处理机制。
3.2.1 软件环境搭建
-
安装Python(3.6或以上版本)。
-
安装必要的库:
bashpip install pyvisa pip install pyvisa-py pip install numpy pip install pandas pip install matplotlib # 用于实时预览或后期绘图 -
安装National Instruments VISA库(NI-VISA)或使用Rigol提供的USB驱动(如果使用USB连接)。PyVISA-py后端可以绕过NI-VISA,但官方驱动有时更稳定。
3.2.2 Python控制脚本核心代码示例
以下脚本展示了连接仪器、设置参数、循环采集波形数据并保存到文件的基本框架:
python
import pyvisa
import time
import numpy as np
from datetime import datetime
import os
1. 初始化VISA资源管理器
rm = pyvisa.ResourceManager()
如果使用LAN连接,地址格式为 'TCPIP::192.168.1.100::INSTR'
如果使用USB连接,地址格式可能为 'USB0::0x1AB1::0x04CE::DS9D224100000::INSTR'
oscilloscope_address = 'TCPIP::192.168.1.100::INSTR'
try:
dho924 = rm.open_resource(oscilloscope_address)
dho924.timeout = 10000 # 设置超时时间为10秒
print(f"已连接到: {dho924.query('*IDN?')}")
except Exception as e:
print(f"连接失败: {e}")
exit()
2. 配置示波器基本参数
def setup_oscilloscope():
dho924.write('*RST') # 复位示波器
time.sleep(2)
dho924.write(':CHAN1:DISP ON') # 打开通道1
dho924.write(':CHAN1:COUP DC') # 耦合方式:DC
dho924.write(':CHAN1:SCAL 1.0') # 垂直档位 1V/div
dho924.write(':CHAN1:OFFS 0') # 垂直偏移 0V
dho924.write(':TIM:SCAL 0.001') # 时基 1ms/div
dho924.write(':TIM:OFFS 0') # 水平偏移 0s
dho924.write(':TRIG:MODE EDGE') # 触发模式:边沿
dho924.write(':TRIG:EDGE:SOUR CHAN1') # 触发源:通道1
dho924.write(':TRIG:EDGE:LEV 0.5') # 触发电平 0.5V
dho924.write(':ACQ:TYPE NORM') # 采集类型:普通
dho924.write(':WAV:SOUR CHAN1') # 波形数据源:通道1
dho924.write(':WAV:MODE RAW') # 波形模式:原始数据(高精度)
dho924.write(':WAV:FORM BYTE') # 数据格式:字节(传输效率高)
print("示波器参数设置完成。")
3. 创建数据存储目录
data_dir = f"./DHO924_Data_{datetime.now().strftime('%Y%m%d')}"
os.makedirs(data_dir, exist_ok=True)
log_file = open(os.path.join(data_dir, "acquisition_log.txt"), 'w')
4. 主采集循环
setup_oscilloscope()
duration_hours = 24
interval_seconds = 1 # 采集间隔,根据需求调整
total_iterations = int(duration_hours * 3600 / interval_seconds)
for i in range(total_iterations):
try:
current_time = datetime.now()
timestamp_str = current_time.strftime("%Y%m%d_%H%M%S")
# 4.1 获取波形数据
dho924.write(':WAV:DATA?')
raw_data = dho924.read_raw() # 读取二进制数据
# 处理波形数据头(格式通常为 #9XXXXXXXXX,前11字节为头)
header_len = int(raw_data[1:2]) + 2
waveform_bytes = raw_data[header_len:-1] # 去掉头和末尾换行符
waveform_array = np.frombuffer(waveform_bytes, dtype=np.uint8)
# 4.2 转换为电压值(需要根据示波器手册计算转换系数)
# 示例:假设垂直档位1V/div,8位ADC,偏移0V
v_scale = float(dho924.query(':CHAN1:SCAL?'))
v_offset = float(dho924.query(':CHAN1:OFFS?'))
waveform_volts = (waveform_array - 128) * v_scale / 25 - v_offset
4.3 获取时间轴信息
t_scale = float(dho924.query(':TIM:SCAL?'))
t_offset = float(dho924.query(':TIM:OFFS?'))
points = len(waveform_volts)
time_array = np.linspace(t_offset - 6t_scale, t_offset + 6t_scale, points)
4.4 保存数据到文件(例如CSV格式)
data_filename = os.path.join(data_dir, f"waveform_{timestamp_str}.csv")
np.savetxt(data_filename, np.column_stack((time_array, waveform_volts)),
delimiter=',', header='Time(s),Voltage(V)', comments='')
4.5 记录日志
log_entry = f"{timestamp_str}: 成功采集并保存 {points} 个数据点至 {data_filename}\n"
log_file.write(log_entry)
print(log_entry.strip())
4.6 等待下一个采集间隔
time.sleep(interval_seconds)
except KeyboardInterrupt:
print("用户中断采集。")
break
except Exception as e:
error_msg = f"{datetime.now().strftime('%Y%m%d_%H%M%S')}: 采集出错 - {e}\n"
log_file.write(error_msg)
print(error_msg.strip())
time.sleep(5) # 出错后等待5秒再尝试
5. 收尾工作
log_file.close()
dho924.close()
rm.close()
print("24小时数据采集任务完成。")
4. 数据记录策略与优化
4.1 触发与采集模式选择
- 连续采样模式:设置合适的时基,使每次采集覆盖一个或多个信号周期。适用于周期性信号。
- 单次触发模式:设置触发条件,捕获偶发事件。对于24小时记录,可以设置为"正常"触发,只有满足条件时才存储波形,节省存储空间。
- 滚动模式:对于超低频信号,可以考虑使用滚动模式进行连续记录。
4.2 数据存储格式与命名
- 格式:CSV文件通用性好,便于后期使用Excel、Python、MATLAB等工具分析。也可考虑HDF5或NPZ格式以节省空间和提高读写速度。
- 命名 :文件名应包含时间戳(如
waveform_20240819_143025.csv),便于排序和检索。 - 目录结构:按日期或实验批次创建文件夹,将数据文件、日志文件、配置文件放在一起。
4.3 资源与稳定性保障
- 存储空间预估:假设每次采集10k个点,保存为CSV约200KB,每秒采集1次,24小时将产生约200KB * 3600 * 24 ≈ 17GB数据。需确保硬盘有足够空间。
- 网络稳定性:使用有线LAN连接,避免WiFi。可在脚本中加入网络重连机制。
- 异常处理 :脚本中必须包含完善的
try...except块,记录所有错误,并尝试恢复连接或安全退出。 - 运行环境:确保上位机不会自动休眠或更新重启。可调整系统电源设置。
5. 后期数据处理与分析建议
- 数据合并与预览:使用Python(Pandas, Matplotlib)或专业软件(如MATLAB, DIAdem)将所有CSV文件合并,绘制长时间趋势图。
- 特征提取:计算每个波形文件的特征值,如峰值、有效值(RMS)、频率、上升时间等,并随时间变化绘制曲线。
- 异常检测:设定阈值,自动识别超出正常范围的波形或特征值,定位异常发生的时间点。
- 报告生成:将关键波形截图、统计图表、结论汇总生成PDF或Word格式的技术报告。
6. 总结
通过Rigol DHO924示波器结合上位机软件(尤其是Python编程控制),可以构建一套强大的长时间波形数据记录系统。该方案的核心在于稳定的硬件连接、可靠的自动化采集脚本以及合理的数据管理策略。本报告提供的软件配置指南、Python代码框架和优化建议,为实施24小时不间断波形监测项目奠定了坚实的技术基础。用户可根据具体的测量需求(如信号类型、采样率、存储格式)对示例脚本进行修改和扩展。