This commit is contained in:
GukSang.Jin
2026-02-04 17:18:47 +08:00
parent 719ad88388
commit f474e7b383
2 changed files with 42 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ using OxyPlot.WindowsForms;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace
@@ -23,7 +24,6 @@ namespace 全自动水压检测仪
private List<DataPoint> _pressureData;
private List<DataPoint> _pressureSetData;
private const int MAX_DATA_POINTS = 60; // 最多显示60个数据点
private int _dataPointIndex = 0;
/// <summary>
/// 初始化图表并添加到指定面板
@@ -55,20 +55,28 @@ namespace 全自动水压检测仪
LegendOrientation = OxyPlot.Legends.LegendOrientation.Horizontal
});
// 配置X轴时间轴 - 使用数据点索引
// 配置X轴时间轴 - 使用测试时间总秒数)
var xAxis = new LinearAxis
{
Position = AxisPosition.Bottom,
Title = "时间",
Title = "测试时间",
TitleFontSize = 12,
FontSize = 10,
MajorGridlineStyle = LineStyle.Solid,
MajorGridlineColor = OxyColor.FromRgb(230, 230, 230),
MinorGridlineStyle = LineStyle.Dot,
MinorGridlineColor = OxyColor.FromRgb(240, 240, 240),
StringFormat = "0",
Minimum = 0,
Maximum = MAX_DATA_POINTS
Maximum = 60,
// 格式化X轴标签为HH:MM:SS格式
LabelFormatter = value =>
{
int totalSec = (int)value;
int h = totalSec / 3600;
int m = (totalSec % 3600) / 60;
int s = totalSec % 60;
return $"{h:D2}:{m:D2}:{s:D2}";
}
};
_plotModel.Axes.Add(xAxis);
@@ -150,30 +158,21 @@ namespace 全自动水压检测仪
/// </summary>
/// <param name="pressure">实时压力值</param>
/// <param name="pressureSetValue">压力设定值(来自"压力设置(PSI)"地址2400</param>
/// <param name="time">时间标签(可选,默认使用当前时间</param>
public void AddDataPoint(double pressure, double pressureSetValue, string time = null)
/// <param name="totalSeconds">测试时间(总秒数</param>
public void AddDataPoint(double pressure, double pressureSetValue, int totalSeconds)
{
if (_pressureSeries == null || _pressureSetSeries == null || _plotModel == null)
return;
// 添加数据点(使用索引作为X轴值
_pressureData.Add(new DataPoint(_dataPointIndex, pressure));
_pressureSetData.Add(new DataPoint(_dataPointIndex, pressureSetValue));
_dataPointIndex++;
// 添加数据点(使用测试时间总秒数作为X轴值
_pressureData.Add(new DataPoint(totalSeconds, pressure));
_pressureSetData.Add(new DataPoint(totalSeconds, pressureSetValue));
// 限制数据点数量,保持图表流畅
if (_pressureData.Count > MAX_DATA_POINTS)
{
_pressureData.RemoveAt(0);
_pressureSetData.RemoveAt(0);
// 重新索引数据点
for (int i = 0; i < _pressureData.Count; i++)
{
_pressureData[i] = new DataPoint(i, _pressureData[i].Y);
_pressureSetData[i] = new DataPoint(i, _pressureSetData[i].Y);
}
_dataPointIndex = _pressureData.Count;
}
// 更新系列数据
@@ -183,6 +182,19 @@ namespace 全自动水压检测仪
_pressureSetSeries.Points.Clear();
_pressureSetSeries.Points.AddRange(_pressureSetData);
// 动态调整X轴范围
if (_pressureData.Count > 0)
{
var xAxis = _plotModel.Axes.FirstOrDefault(a => a.Position == AxisPosition.Bottom);
if (xAxis != null)
{
double minX = _pressureData.Min(p => p.X);
double maxX = _pressureData.Max(p => p.X);
xAxis.Minimum = minX;
xAxis.Maximum = maxX + 5; // 留一点余量
}
}
// 刷新图表
_plotModel.InvalidatePlot(true);
}
@@ -194,7 +206,6 @@ namespace 全自动水压检测仪
{
_pressureData?.Clear();
_pressureSetData?.Clear();
_dataPointIndex = 0;
if (_pressureSeries != null)
{
@@ -206,6 +217,14 @@ namespace 全自动水压检测仪
_pressureSetSeries.Points.Clear();
}
// 重置X轴范围
var xAxis = _plotModel?.Axes.FirstOrDefault(a => a.Position == AxisPosition.Bottom);
if (xAxis != null)
{
xAxis.Minimum = 0;
xAxis.Maximum = 60;
}
_plotModel?.InvalidatePlot(true);
}

View File

@@ -516,13 +516,13 @@ namespace 全自动水压检测仪
var pressure = c.UshortToFloat(modbusData.Real1[1], modbusData.Real1[0]);
var pressureSetValue = c.UshortToFloat(modbusData.Real12[1], modbusData.Real12[0]);
// 获取测试时间从PLC读取的时分秒
// 获取测试时间从PLC读取的时分秒并计算总秒数
int seconds = (modbusData.Real6 != null && modbusData.Real6.Length >= 1) ? modbusData.Real6[0] : 0;
int minutes = (modbusData.Real7 != null && modbusData.Real7.Length >= 1) ? modbusData.Real7[0] : 0;
int hours = (modbusData.Real8 != null && modbusData.Real8.Length >= 1) ? modbusData.Real8[0] : 0;
string testTime = $"{hours:D2}:{minutes:D2}:{seconds:D2}";
int totalSeconds = hours * 3600 + minutes * 60 + seconds;
_chartManager?.AddDataPoint(pressure, pressureSetValue, testTime);
_chartManager?.AddDataPoint(pressure, pressureSetValue, totalSeconds);
}
catch (Exception chartEx)
{