DataView基本调试完成,还存在一些小错误和小功能缺失。

查询数据还不太流畅,考虑加入流水线工作模式。
This commit is contained in:
THINKPAD 2022-07-31 00:32:27 +08:00
parent b92b529ed4
commit c977410d33
3 changed files with 49 additions and 29 deletions

View File

@ -46,7 +46,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
_isUpdateSuspended = false; _isUpdateSuspended = false;
Name = name; Name = name;
RawData = new List<ParameterNodePoint>(); //RawData = new List<ParameterNodePoint>();
MaxTerminalSelectionAllowed = -1; MaxTerminalSelectionAllowed = -1;
ChildNodes = new ParameterNodeCollection(this); ChildNodes = new ParameterNodeCollection(this);
ChildNodes.TerminalNodeSelectionChanged += OnTerminalNodeSelectionChanged; ChildNodes.TerminalNodeSelectionChanged += OnTerminalNodeSelectionChanged;
@ -186,7 +186,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
public ParameterNode ParentNode { get; set; } public ParameterNode ParentNode { get; set; }
public List<ParameterNodePoint> RawData { get; } //public List<ParameterNodePoint> RawData { get; }
public Visibility IsVisibilityParentNode { get; set; } public Visibility IsVisibilityParentNode { get; set; }

View File

@ -4,6 +4,7 @@ using System;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Windows.Media; using System.Windows.Media;
using SciChart.Charting.Model.Filters;
namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
{ {
@ -29,8 +30,10 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
XAxisId = "DefaultAxisId"; XAxisId = "DefaultAxisId";
YAxisId = "DefaultAxisId"; YAxisId = "DefaultAxisId";
var ds = new XyDataSeries<DateTime, double>(); DataSeries = new XyDataSeries<DateTime, double>
DataSeries = ds; {
SeriesName = dataName
};
DisplayName = displayName; DisplayName = displayName;
DataName = dataName; DataName = dataName;
@ -96,6 +99,12 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
} }
} }
public double DataMin { get; }
public double DataMax { get; }
public double DataAverage { get; }
#endregion #endregion
#region Methods #region Methods
@ -120,12 +129,13 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.Core
for (var i = 0; i < ds.Count; i++) for (var i = 0; i < ds.Count; i++)
{ {
var y = (ds.Metadata[i] as ParameterNodePoint)?.Value; var y = (ds.Metadata[i] as ParameterNodePoint)?.Value;
if(y == null) if (y == null)
continue; continue;
ds.Update(i, (double)y * _dataFactor + DataOffset); ds.Update(i, (double)y * _dataFactor + DataOffset);
} }
//var dataSeries = DataSeries as XyDataSeries<DateTime, double>; //var dataSeries = DataSeries as XyDataSeries<DateTime, double>;
//for (var index = 0; index < dataSeries.Count; ++index) //for (var index = 0; index < dataSeries.Count; ++index)
// dataSeries.Update(index, _queueRawData.ElementAt(index).Item2 * _dataFactor + _dataOffset); // dataSeries.Update(index, _queueRawData.ElementAt(index).Item2 * _dataFactor + _dataOffset);

View File

@ -228,27 +228,22 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
foreach (var module in selectedModules) foreach (var module in selectedModules)
{ {
var selectedTerminal = module.Flatten(true).Where(x => x.IsSelected == true); var selectedTerminal = module.Flatten(true).Where(x => x.IsSelected == true);
foreach (var terminal in selectedTerminal) foreach (var terminal in selectedTerminal)
{ {
terminal.RawData.Clear();
var line2D = new SicFastLineSeries(terminal.FullName)
{
AntiAliasing = true,
ResamplingMode = ResamplingMode.MinMax
};
// 确保当列队未空时不会出错,选择默认黑色。 // 确保当列队未空时不会出错,选择默认黑色。
var color = colorPattern.Any() var color = colorPattern.Any()
? colorPattern.Dequeue() ? colorPattern.Dequeue()
: Color.FromArgb(255, colorRandom.Next(0, 255), colorRandom.Next(0, 255), : Color.FromArgb(255, colorRandom.Next(0, 255), colorRandom.Next(0, 255),
colorRandom.Next(0, 255)); colorRandom.Next(0, 255));
line2D.Stroke = System.Windows.Media.Color.FromRgb(color.R, color.G, color.B); var line2D = new SicFastLineSeries(terminal.FullName)
{
var ds = line2D.GetDataSeries(); AntiAliasing = true,
ds.Tag = terminal; ResamplingMode = ResamplingMode.MinMax,
Stroke = System.Windows.Media.Color.FromRgb(color.R, color.G, color.B),
Tag = terminal
};
SelectedData.Add(line2D); SelectedData.Add(line2D);
} }
@ -266,6 +261,21 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
if (e.Item1 == 100) if (e.Item1 == 100)
{ {
IsBusy = false; IsBusy = false;
foreach (var renderableSeries in SelectedData)
{
var series = renderableSeries as SicFastLineSeries;
var dataSeries = series?.GetDataSeries();
if (series?.Tag is ParameterNode parameterNode && dataSeries!= null)
{
parameterNode.MaxValue = ((double)dataSeries.YMax).ToString("F2");
parameterNode.MinValue = ((double)dataSeries.YMin).ToString("F2");
parameterNode.AverageValue =
dataSeries.Metadata.Cast<ParameterNodePoint>().Average(x => x.Value).ToString("F2");
}
}
} }
BusyIndicatorContent = e.Item2; BusyIndicatorContent = e.Item2;
@ -556,7 +566,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
var dataSeries = line2D.GetDataSeries();*/ var dataSeries = line2D.GetDataSeries();*/
var dataSeries = var dataSeries =
dataSeriesList.FirstOrDefault(x => (x.Tag is ParameterNode node) && node.FullName == fullName); dataSeriesList.FirstOrDefault(x => x.SeriesName == fullName);
if (dataSeries == null) if (dataSeries == null)
continue; continue;
@ -564,9 +574,9 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
/*// ParameterNode放在line2D.DataSeries.Tag中而不是line2D.Tag中因为ParameterNode需要从Task中抛给seriesAppendDone /*// ParameterNode放在line2D.DataSeries.Tag中而不是line2D.Tag中因为ParameterNode需要从Task中抛给seriesAppendDone
// 进行数据统计但Task中无法访问line2D对象因为跨线程访问问题。 // 进行数据统计但Task中无法访问line2D对象因为跨线程访问问题。
dataSeries.Tag = node;*/ dataSeries.Tag = node;*/
var rawData = (dataSeries.Tag as ParameterNode)?.RawData; //var rawData = (dataSeries.Tag as ParameterNode)?.RawData;
if(rawData == null) //if(rawData == null)
continue; // continue;
#endregion #endregion
@ -813,8 +823,8 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
for (var i = 0; i < SelectedData.Count; i++) for (var i = 0; i < SelectedData.Count; i++)
{ {
var points = (((SelectedData[i] as SicFastLineSeries))?.GetDataSeries().Tag as ParameterNode) var points = ((SelectedData[i] as SicFastLineSeries))?.GetDataSeries().Metadata
?.RawData; .Cast<ParameterNodePoint>().ToList();
if (points != null) if (points != null)
{ {
foreach (var p in points) foreach (var p in points)
@ -840,10 +850,11 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
using (_cancellationTokenSource.Token.Register(Thread.CurrentThread.Abort)) using (_cancellationTokenSource.Token.Register(Thread.CurrentThread.Abort))
{ {
var csvBuilder = new StringBuilder(); var csvBuilder = new StringBuilder();
csvBuilder.Append("Time,");
csvBuilder.AppendLine(string.Join(",", columns)); csvBuilder.AppendLine(string.Join(",", columns));
foreach (var tv in timeValue) foreach (var tv in timeValue)
{ {
csvBuilder.Append(tv.Key); csvBuilder.Append($" {tv.Key:yyyy/MM/dd HH:mm:ss.fff}");
csvBuilder.Append(","); csvBuilder.Append(",");
csvBuilder.AppendLine(string.Join(",", tv.Value)); csvBuilder.AppendLine(string.Join(",", tv.Value));
@ -945,8 +956,7 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
#endif #endif
var node = cp?.GetDataSeries().Tag as ParameterNode; var points = cp?.GetDataSeries().Metadata.Cast<ParameterNodePoint>().ToList();
var points = node?.RawData;
var csvBuilder = new StringBuilder(); var csvBuilder = new StringBuilder();
@ -959,14 +969,14 @@ namespace MECF.Framework.UI.Client.CenterViews.DataLogs.DataHistory
{ {
#if EXPORT_TO_CSV #if EXPORT_TO_CSV
csvBuilder.AppendLine($"Time,{node.FullName}"); // table header csvBuilder.AppendLine($"Time,{cp.DataName}"); // table header
#endif #endif
foreach (var p in points) foreach (var p in points)
{ {
#if EXPORT_TO_CSV #if EXPORT_TO_CSV
csvBuilder.AppendLine($"{p.Time},{p.Value}"); csvBuilder.AppendLine($" {p.Time:yyyy/MM/dd HH:mm:ss.fff},{p.Value}");
#else #else
var row = ds.Tables[0].NewRow(); var row = ds.Tables[0].NewRow();
row[0] = p.Time; row[0] = p.Time;