laatzen/Common/Ui/DynamicStremingLogAnalyzer/Program.cs
Roland Drabesch a9d1c77716 data an
2023-08-28 13:28:22 +02:00

375 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol;
namespace DynamicStremingLogAnalyzer
{
internal class PathOffsetBag
{
public int Path { get; set; }
public int CurrentOffsetValue { get; set; }
public List<double> DeltaTimeOfFlightS { get; set; }
public int indexOflastChange { get; set; }
}
internal class MeterBag
{
public MeterBag()
{
LedFiles = new Dictionary<string, List<string>>();
LogFiles = new Dictionary<string, List<string>>();
}
public string SerialNumber { get; set; }
public string PcbID { get; set; }
public Dictionary<string, List<string>> LedFiles;
public Dictionary<string, List<string>> LogFiles;
public List<TestRun> TestRuns = new List<TestRun>();
//public List<PathOffsetBag> PathOffsets { get; set; }
//public bool MeterValid { get; set; } = true;
}
public class TestRun
{
public DateTime? Start;
public DateTime? End;
public int? Offset1;
public int? Offset2;
public int? Offset3;
public List<double> DeltaTimeOfFlightS1 = new List<double>();
public List<double> DeltaTimeOfFlightS2 = new List<double>();
public List<double> DeltaTimeOfFlightS3 = new List<double>();
public int? CalcOffset1;
public int? CalcOffset2;
public int? CalcOffset3;
public int TotalLineCount { get; internal set; }
public void Calc()
{
var avg = DeltaTimeOfFlightS1.Sum() / DeltaTimeOfFlightS1.Count;
CalcOffset1 = (Int32)((avg * Math.Pow(2, 40)));
avg = DeltaTimeOfFlightS2.Sum() / DeltaTimeOfFlightS2.Count;
CalcOffset2 = (Int32)((avg * Math.Pow(2, 40)));
avg = DeltaTimeOfFlightS3.Sum() / DeltaTimeOfFlightS3.Count;
CalcOffset3 = (Int32)((avg * Math.Pow(2, 40)));
}
}
internal class Program
{
private static void Main(string[] args)
{
DateTimeOffset timestamp;
var meters = new List<MeterBag>();
foreach (var item in Directory.GetFiles("\\\\sla12buma\\cordonelds$\\LAA-D-70MYB62\\2023-06-05\\Pruef2000\\", "*_PreAdjustment.log", SearchOption.AllDirectories))
{
var SerialNumber = item.Substring(item.LastIndexOf("_SN") + 3, item.IndexOf("_PreAdjustment.log") - item.LastIndexOf("_SN") - 3);
MeterBag meter;
if (!meters.Any(m => m.SerialNumber == SerialNumber))
{
meter = new MeterBag();
meter.SerialNumber = SerialNumber;
meters.Add(meter);
}
else
{
meter = meters.FirstOrDefault(m => m.SerialNumber == SerialNumber);
}
if (item.Contains("LedRawData_"))
{
meter.LedFiles.Add(item, File.ReadAllLines(item).ToList());
}
else if (item.Contains("Meter_Slot"))
{
meter.LogFiles.Add(item, File.ReadAllLines(item).ToList());
}
}
foreach (var meter in meters)
{
foreach (var logfile in meter.LogFiles)
{
var r = new TestRun();
foreach (var logline in logfile.Value)
{
if (logline.Contains("APP Offset Test procedure started "))
{
if (r.End.HasValue)
{
meter.TestRuns.Add(r);
}
r = new TestRun();
DateTime.TryParse(logline.Substring(0, "2023-06-05 17:50:38.3184".Length), out DateTime tmp);
r.Start = tmp;
}
if (r.Start.HasValue)
{
if (logline.Contains("cRecords.Count="))
{
var starPos = logline.LastIndexOf("cRecords.Count=") + "cRecords.Count=".Length;
var endPos = logline.Length;
if (int.TryParse(logline.Substring(starPos, endPos- starPos -1), out var tmp))
{
r.TotalLineCount = tmp;
}
}
if (logline.Contains("to 'Zero flow offset Path 1'-register at Meter"))
{
var starPos = logline.LastIndexOf(" CC Writing ") + " CC Writing ".Length;
var endPos = logline.IndexOf("to 'Zero flow offset Path 1'-register at Meter");
var lineOffset = logline.Substring(starPos, endPos - starPos).Trim();
if (int.TryParse(lineOffset, out int tmpOffset1))
{
r.Offset1 = tmpOffset1;
}
else
{
r.Offset1 = 99;
}
}
if (logline.Contains("to 'Zero flow offset Path 2'-register at Meter"))
{
var starPos = logline.LastIndexOf(" CC Writing ") + " CC Writing ".Length;
var endPos = logline.IndexOf("to 'Zero flow offset Path 2'-register at Meter");
var lineOffset = logline.Substring(starPos, endPos - starPos).Trim();
if (int.TryParse(lineOffset, out int tmpOffset2))
{
r.Offset2 = tmpOffset2;
}
else
{
r.Offset2 = 99;
}
}
if (logline.Contains("to 'Zero flow offset Path 3'-register at Meter"))
{
var starPos = logline.LastIndexOf(" CC Writing ") + " CC Writing ".Length;
var endPos = logline.IndexOf("to 'Zero flow offset Path 3'-register at Meter");
var lineOffset = logline.Substring(starPos, endPos - starPos).Trim();
if (int.TryParse(lineOffset, out int tmpOffset3))
{
r.Offset3 = tmpOffset3;
}
else
{
r.Offset3 = 99;
}
}
if (logline.Contains("Offset Test sequence Offset Test sequence successful at all"))
{
DateTime.TryParse(logline.Substring(0, "2023-06-05 17:50:38.3184".Length), out DateTime tmp);
r.End = tmp;
}
}
}
if (r.End.HasValue)
{
meter.TestRuns.Add(r);
}
}
var StreamingDecode = new StreamingDecoder(false);
foreach (var ledFile in meter.LedFiles)
{
foreach (var line in ledFile.Value)
{
if (line.Contains('|'))
{
if (DateTimeOffset.TryParse(line.Split('|')[0], out timestamp))
{
if (meter.TestRuns.Any(run => run.Start <= timestamp && run.End >= timestamp))
{
var currentRun = meter.TestRuns.First(run => run.Start <= timestamp && run.End >= timestamp);
if (StreamingDecode.DecodeMsg(line.Split('|')[1].Trim()))
{
var c = StreamingDecode.DataCalib;
if (c.IsValid)
{
switch (c.Channel)
{
case 1:
currentRun.DeltaTimeOfFlightS1.Add(c.DeltaTimeOfFlightS);
break;
case 2:
currentRun.DeltaTimeOfFlightS2.Add(c.DeltaTimeOfFlightS);
break;
case 3:
currentRun.DeltaTimeOfFlightS3.Add(c.DeltaTimeOfFlightS);
break;
default:
break;
}
}
}
}
}
}
}
}
}
foreach (var meter in meters)
{
foreach (var testrun in meter.TestRuns)
{
testrun.Calc();
Console.WriteLine($"{meter.SerialNumber} ; 1; {testrun.Offset1}; {testrun.CalcOffset1}; {testrun.TotalLineCount / 3}; {testrun.DeltaTimeOfFlightS1.Count} ");
Console.WriteLine($"{meter.SerialNumber} ; 2; {testrun.Offset2}; {testrun.CalcOffset2}; {testrun.TotalLineCount / 3}; {testrun.DeltaTimeOfFlightS2.Count} ");
Console.WriteLine($"{meter.SerialNumber} ; 3; {testrun.Offset3}; {testrun.CalcOffset3}; {testrun.TotalLineCount / 3}; {testrun.DeltaTimeOfFlightS3.Count} ");
}
}
Console.ReadLine();
////Meter_SlotSlot_2_SN23706764_PreAdjustment
//meter.PathOffsets.Add(new PathOffsetBag() { Path = 1, CurrentOffsetValue = 0, indexOflastChange = 0, DeltaTimeOfFlightS = new List<double>() });
// meter.PathOffsets.Add(new PathOffsetBag() { Path = 2, CurrentOffsetValue = 0, indexOflastChange = 0, DeltaTimeOfFlightS = new List<double>() });
// meter.PathOffsets.Add(new PathOffsetBag() { Path = 3, CurrentOffsetValue = 0, indexOflastChange = 0, DeltaTimeOfFlightS = new List<double>() });
// var directoryName = Path.GetDirectoryName(item);
// //LedRawData__Slot_10_SN23706763_PreAdjustment.log
// File.Exists(directoryName + "\\Meter_SlotSlot_2_SN23706764_PreAdjustment.log");
// DateTimeOffset? Start = null;
//
// foreach (var line in File.ReadAllLines(item))
// {
// meters.Add(meter);
//}
//foreach (var removeLineMeter in meters)
//{
// for (int i = 1; i <= 3; i++)
// {
// var cList = removeLineMeter.PathOffsets.Find(f => f.Path == i);
// if (cList.DeltaTimeOfFlightS.Count > 27000)
// {
// cList.DeltaTimeOfFlightS.RemoveRange(0, cList.DeltaTimeOfFlightS.Count - 27000);
// }
// else
// {
// removeLineMeter.MeterValid = false;
// }
// }
//}
//foreach (var calcMeter in meters.Where(m => m.MeterValid))
//{
// foreach (var pOffset in calcMeter.PathOffsets)
// {
// List<double> CalculatedOffsets = new List<double>();
// foreach (var currentOffset in pOffset.DeltaTimeOfFlightS)
// {
// CalculatedOffsets.Add(currentOffset);
// var avg = CalculatedOffsets.Sum() / CalculatedOffsets.Count;
// var OffsetValue = (Int32)((avg * Math.Pow(2, 40)));
// if (pOffset.CurrentOffsetValue != OffsetValue)
// {
// pOffset.CurrentOffsetValue = OffsetValue;
// pOffset.indexOflastChange = CalculatedOffsets.Count;
// }
// else
// {
// }
// }
// }
//}
//var sb = new StringBuilder();
//foreach (var PrintMeter in meters.Where(m => m.MeterValid))
//{
// Console.WriteLine(PrintMeter.SerialNumber);
// foreach (var pOffset in PrintMeter.PathOffsets)
// {
// Console.WriteLine($"{pOffset.Path} = {pOffset.indexOflastChange}");
// }
//}
//\Pruef2000
}
}
}