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

158 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实时曲线图优化说明
## 优化目标
解决实时压力曲线图在缩放后无法看到起始时间曲线的问题,确保不论如何缩放,始终能看到从起始时间开始的完整曲线。
## 核心问题分析
### 原有问题
1. **数据点限制过小**原MAX_DATA_POINTS=60测试超过60秒后早期数据被删除
2. **X轴动态调整问题**X轴范围使用`Min(X)`作为起点,导致早期数据被移出可视范围
3. **缩放后自动跟随**用户缩放后系统仍会自动调整X轴导致用户视图被重置
## 优化方案
### 1. 增加数据点容量
```csharp
private const int MAX_DATA_POINTS = 3600; // 从60增加到3600支持1小时测试
```
- 支持更长时间的测试数据保留
- 确保生产环境长时间测试不会丢失早期数据
### 2. 记录初始时间点
```csharp
private double _initialMinX = 0; // 记录初始最小X值
```
- 在第一个数据点添加时记录起始时间
- 即使删除早期数据点,仍保持初始时间记录
- X轴始终从初始时间开始显示
### 3. 用户缩放状态检测
```csharp
private bool _isUserZooming = false; // 用户是否正在缩放
```
- 监听鼠标事件MouseDown、MouseWheel检测用户交互
- 用户缩放时停止自动调整X轴范围
- 保持用户自定义的视图状态
### 4. 智能X轴范围管理
```csharp
// 只有在非用户缩放状态下才自动调整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. 双击重置功能
```csharp
// 添加双击重置功能
_plotView.MouseDoubleClick += (s, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
// 双击左键重置缩放
ResetZoom();
}
};
```
- 用户可以通过双击左键恢复自动跟随模式
- 重置缩放状态,显示完整曲线
### 6. 启用缩放和平移功能
```csharp
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轴数据对应正确
## 技术细节
### 数据结构
```csharp
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`
- 测试状态:已通过编译验证