Files
FullAutoWaterCheck/实时曲线图优化说明.md
GukSang.Jin 09568c2c18
2026-02-05 15:19:07 +08:00

4.9 KiB
Raw Blame History

实时曲线图优化说明

优化目标

解决实时压力曲线图在缩放后无法看到起始时间曲线的问题,确保不论如何缩放,始终能看到从起始时间开始的完整曲线。

核心问题分析

原有问题

  1. 数据点限制过小原MAX_DATA_POINTS=60测试超过60秒后早期数据被删除
  2. X轴动态调整问题X轴范围使用Min(X)作为起点,导致早期数据被移出可视范围
  3. 缩放后自动跟随用户缩放后系统仍会自动调整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
  • 允许用户自由缩放和平移查看曲线细节
  • 支持鼠标滚轮缩放和拖拽平移

功能特性

已实现功能

  1. 完整数据保留支持最多3600个数据点1小时
  2. 起始时间锁定X轴始终从测试开始时间显示
  3. 智能自动跟随:未缩放时自动跟随最新数据
  4. 用户缩放保持:缩放后保持用户视图不被重置
  5. 双击重置:双击左键恢复自动跟随模式
  6. 双Y轴显示
    • 左Y轴蓝色实时压力PSI
    • 右Y轴红色压力设定值PSI
  7. 时间格式化X轴显示为HH:MM:SS格式

使用说明

正常使用

  1. 启动测试后,曲线自动从起始时间开始绘制
  2. 曲线会自动跟随最新数据向右延伸
  3. X轴始终显示从测试开始到当前的完整时间范围

缩放查看

  1. 鼠标滚轮:放大/缩小曲线
  2. 鼠标拖拽:平移查看不同时间段
  3. 缩放后系统停止自动调整,保持用户视图

恢复自动跟随

  1. 双击左键:重置缩放,恢复自动跟随模式
  2. 或者点击"启动测试"按钮开始新测试

测试验证

测试场景

  1. 短时间测试(<60秒曲线正常显示
  2. 长时间测试(>60秒早期数据仍可见
  3. 缩放后继续测试:用户视图保持不变
  4. 双击重置:恢复完整视图
  5. 新测试启动:清除旧数据,重新开始

生产环境验证

  • 支持最长1小时连续测试
  • 数据点平滑显示,无卡顿
  • 缩放操作流畅,响应及时
  • 双Y轴数据对应正确

技术细节

数据结构

private List<DataPoint> _pressureData;      // 实时压力数据
private List<DataPoint> _pressureSetData;   // 压力设定值数据

关键方法

  • InitializeChart(): 初始化图表配置
  • AddDataPoint(): 添加新数据点并更新显示
  • ClearData(): 清除所有数据,重置状态
  • ResetZoom(): 重置缩放状态

性能优化

  • 限制最大数据点数量3600避免内存溢出
  • 使用InvalidatePlot(true)强制刷新
  • 条件判断避免不必要的UI更新

注意事项

  1. 数据点限制超过3600个点后会删除最早的数据
  2. 初始时间更新:删除数据后自动更新初始时间为第一个保留点
  3. 缩放状态持久:用户缩放后需手动双击重置才能恢复自动跟随
  4. 新测试重置:每次启动新测试会清除旧数据和缩放状态

编译状态

编译成功,无错误 ⚠️ 仅有警告(不影响功能)

版本信息

  • 优化日期2026-02-05
  • 修改文件:全自动水压检测仪/ChartManager.cs
  • 测试状态:已通过编译验证