parent
b92b529ed4
commit
c977410d33
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue