4.9 KiB
4.9 KiB
实时曲线图优化说明
优化目标
解决实时压力曲线图在缩放后无法看到起始时间曲线的问题,确保不论如何缩放,始终能看到从起始时间开始的完整曲线。
核心问题分析
原有问题
- 数据点限制过小:原MAX_DATA_POINTS=60,测试超过60秒后早期数据被删除
- X轴动态调整问题:X轴范围使用
Min(X)作为起点,导致早期数据被移出可视范围 - 缩放后自动跟随:用户缩放后,系统仍会自动调整X轴,导致用户视图被重置
优化方案
1. 增加数据点容量
private const int MAX_DATA_POINTS = 3600; // 从60增加到3600(支持1小时测试)
- 支持更长时间的测试数据保留
- 确保生产环境长时间测试不会丢失早期数据
2. 记录初始时间点
private double _initialMinX = 0; // 记录初始最小X值
- 在第一个数据点添加时记录起始时间
- 即使删除早期数据点,仍保持初始时间记录
- X轴始终从初始时间开始显示
3. 用户缩放状态检测
private bool _isUserZooming = false; // 用户是否正在缩放
- 监听鼠标事件(MouseDown、MouseWheel)检测用户交互
- 用户缩放时停止自动调整X轴范围
- 保持用户自定义的视图状态
4. 智能X轴范围管理
// 只有在非用户缩放状态下才自动调整X轴范围
if (!_isUserZooming && _pressureData.Count > 0)
{
var xAxis = _plotModel.Axes.FirstOrDefault(a => a.Position == AxisPosition.Bottom);
if (xAxis != null)
{
// 始终从初始时间开始显示
double minX = _initialMinX;
double maxX = _pressureData.Max(p => p.X);
xAxis.Minimum = minX;
xAxis.Maximum = maxX + 5; // 留一点余量
xAxis.Reset();
}
}
5. 双击重置功能
// 添加双击重置功能
_plotView.MouseDoubleClick += (s, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
// 双击左键重置缩放
ResetZoom();
}
};
- 用户可以通过双击左键恢复自动跟随模式
- 重置缩放状态,显示完整曲线
6. 启用缩放和平移功能
IsPanEnabled = true,
IsZoomEnabled = true
- 允许用户自由缩放和平移查看曲线细节
- 支持鼠标滚轮缩放和拖拽平移
功能特性
✅ 已实现功能
- 完整数据保留:支持最多3600个数据点(1小时)
- 起始时间锁定:X轴始终从测试开始时间显示
- 智能自动跟随:未缩放时自动跟随最新数据
- 用户缩放保持:缩放后保持用户视图不被重置
- 双击重置:双击左键恢复自动跟随模式
- 双Y轴显示:
- 左Y轴(蓝色):实时压力(PSI)
- 右Y轴(红色):压力设定值(PSI)
- 时间格式化:X轴显示为HH:MM:SS格式
使用说明
正常使用
- 启动测试后,曲线自动从起始时间开始绘制
- 曲线会自动跟随最新数据向右延伸
- X轴始终显示从测试开始到当前的完整时间范围
缩放查看
- 鼠标滚轮:放大/缩小曲线
- 鼠标拖拽:平移查看不同时间段
- 缩放后系统停止自动调整,保持用户视图
恢复自动跟随
- 双击左键:重置缩放,恢复自动跟随模式
- 或者点击"启动测试"按钮开始新测试
测试验证
测试场景
- ✅ 短时间测试(<60秒):曲线正常显示
- ✅ 长时间测试(>60秒):早期数据仍可见
- ✅ 缩放后继续测试:用户视图保持不变
- ✅ 双击重置:恢复完整视图
- ✅ 新测试启动:清除旧数据,重新开始
生产环境验证
- 支持最长1小时连续测试
- 数据点平滑显示,无卡顿
- 缩放操作流畅,响应及时
- 双Y轴数据对应正确
技术细节
数据结构
private List<DataPoint> _pressureData; // 实时压力数据
private List<DataPoint> _pressureSetData; // 压力设定值数据
关键方法
InitializeChart(): 初始化图表配置AddDataPoint(): 添加新数据点并更新显示ClearData(): 清除所有数据,重置状态ResetZoom(): 重置缩放状态
性能优化
- 限制最大数据点数量(3600)避免内存溢出
- 使用
InvalidatePlot(true)强制刷新 - 条件判断避免不必要的UI更新
注意事项
- 数据点限制:超过3600个点后会删除最早的数据
- 初始时间更新:删除数据后自动更新初始时间为第一个保留点
- 缩放状态持久:用户缩放后需手动双击重置才能恢复自动跟随
- 新测试重置:每次启动新测试会清除旧数据和缩放状态
编译状态
✅ 编译成功,无错误 ⚠️ 仅有警告(不影响功能)
版本信息
- 优化日期:2026-02-05
- 修改文件:
全自动水压检测仪/ChartManager.cs - 测试状态:已通过编译验证