702 lines
35 KiB
C#
702 lines
35 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Globalization;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Drawing.Printing;
|
|
using ZedGraph;
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
|
|
namespace GenesisDisplayTool
|
|
{
|
|
public static class DecodedDataHelper
|
|
{
|
|
public static DecodedData[] getDefaultDecodedDataArray(Int32 count)
|
|
{
|
|
var ret = new DecodedData[count];
|
|
for (Int32 i = 0; i < count; i++)
|
|
{
|
|
ret[i] = getDefaultDecodedData();
|
|
}
|
|
return ret;
|
|
|
|
}
|
|
|
|
public static DecodedData getDefaultDecodedData()
|
|
{
|
|
return new DecodedData()
|
|
{
|
|
test = 0,
|
|
DataValid = "0",
|
|
MessageType = String.Empty,
|
|
ProtocolVersion = String.Empty,
|
|
Comment = String.Empty,
|
|
HccVal = 0,
|
|
TofSumOfAllUp = 0,
|
|
TofSumOfAllDown = 0,
|
|
TofUp = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
TofDown = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
DifTof = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
PulsewidthUp = 0,
|
|
PulsewidthDown = 0,
|
|
AmpUpRaw = 0,
|
|
AmpDownRaw = 0,
|
|
AmpUpCalculated = 0,
|
|
AmpDownCalculated = 0,
|
|
AmpCalHigh = 0,
|
|
AmpCalLow = 0,
|
|
AmpOffset = 0,
|
|
AmpGradient = 0,
|
|
TemperatureHot = 0,
|
|
TemperatureCold = 0,
|
|
HccCorrectionFactor = Constants.DefaultHccCorrectionFactor,
|
|
Path = 0,
|
|
DeltaTimeOfFlight = 0.0, // protocol version 'e'
|
|
RawDeltaVolume = 0.0, // protocol version 'e'
|
|
RawDeltaVolumeScaling = 0.0, // protocol version 'e'
|
|
SampleInterval = 0,
|
|
Flow = 0,
|
|
|
|
TofSumOfAllUpMean = 0,
|
|
TofSumOfAllDownMean = 0,
|
|
TofUpMean = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
TofDownMean = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
DifTofMean = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
DifTof3HitsMean = 0,
|
|
DifTof8HitsMean = 0,
|
|
PulsewidthUpMean = 0,
|
|
PulsewidthDownMean = 0,
|
|
AmpUpMean = 0,
|
|
AmpDownMean = 0,
|
|
TemperatureHotMean = 0,
|
|
FlowMean = 0,
|
|
|
|
DifTof3HitsStdDeviation = 0,
|
|
DifTof8HitsStdDeviation = 0,
|
|
StdDeviation = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
|
|
Mode = String.Empty,
|
|
RawTimestamp = String.Empty,
|
|
CsvTimestamp = String.Empty,
|
|
DecodingSuceeded = false,
|
|
FProt_DisplayVol = 0,
|
|
FProt_Time = 0,
|
|
CRC = String.Empty,
|
|
|
|
#region G-Protocol
|
|
GProt_AmplitudeUp = 0,
|
|
GProt_AmplitudeDown = 0,
|
|
GProt_PulsewidthRatioUp = 0,
|
|
GProt_PulsewidthRatioDown = 0,
|
|
#endregion
|
|
#region H-Protocol
|
|
HProt_Error = 0,
|
|
HProt_RawTemperature = 0,
|
|
HProt_CalculatedTemperature = 0,
|
|
HProt_TotalTimeOfFlightAvg = 0,
|
|
HProt_TimeOfFlightUp = 0,
|
|
HProt_TimeOfFlightDown = 0,
|
|
HProt_TemperatureScale = 0,
|
|
HProt_AmplitudeDown = 0,
|
|
HProt_AmplitudeUp = 0,
|
|
HProt_DeltaTimeOfFlight = 0,
|
|
HProt_RawDeltaVolume = 0,
|
|
HProt_RawDeltaVolumeScaling = 0,
|
|
HProt_RawDeltaVolumeAccu = 0,
|
|
HProt_DeltaVolumeQm = 0,
|
|
HProt_AccuVolumeQm = 0,
|
|
#endregion
|
|
#region I-Protocol
|
|
IProt_SumOfAllUp = 0,
|
|
IProt_PwUp = 0,
|
|
IProt_AmpUp = 0,
|
|
IProt_AmpCalHigh = 0,
|
|
IProt_SumOfAllDown = 0,
|
|
IProt_PwDown = 0,
|
|
IProt_AmpCalLow = 0,
|
|
IProt_AmpGradient = 0,
|
|
IProt_AmpOffset = 0,
|
|
IProt_AmpUpCalculated = 0,
|
|
IProt_AmpDownCalculated = 0,
|
|
IProt_TofUp = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
IProt_TofDown = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
IProt_DifTof = new Double[8] { 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
IProt_Crc = String.Empty
|
|
|
|
#endregion
|
|
};
|
|
}
|
|
}
|
|
public class DecodedData : ICloneable
|
|
{
|
|
#region For all protocols
|
|
public Double test;
|
|
public String DataValid;
|
|
public String MessageType;
|
|
public String ProtocolVersion;
|
|
public UInt16 Path;
|
|
#endregion
|
|
#region D-protocol
|
|
public String Comment;
|
|
public Double HccVal;
|
|
public Double TofSumOfAllUp;
|
|
public Double TofSumOfAllDown;
|
|
public Double[] TofUp = new Double[8];
|
|
public Double[] TofDown = new Double[8];
|
|
public Double[] DifTof = new Double[8];
|
|
public Double PulsewidthUp;
|
|
public Double PulsewidthDown;
|
|
public Double AmpUpRaw;
|
|
public Double AmpDownRaw;
|
|
public Double AmpUpCalculated;
|
|
public Double AmpDownCalculated;
|
|
public Double AmpCalHigh;
|
|
private Double ampCalLow;
|
|
public Double AmpCalLow { get { return ampCalLow; } set { ampCalLow = value; } }
|
|
public Double AmpOffset;
|
|
public Double AmpGradient;
|
|
public Double TemperatureHot;
|
|
public Double TemperatureCold;
|
|
public Double HccCorrectionFactor;
|
|
#endregion
|
|
#region E-protocol/ G-protocol
|
|
public Double DeltaTimeOfFlight; // protocol version 'e' and 'g'
|
|
public Double RawDeltaVolume; // protocol version 'e'
|
|
public Double RawDeltaVolumeScaling; // protocol version 'e'
|
|
|
|
public Double RawDeltaVolumeAccu; // protocol version 'e'
|
|
public Double SampleInterval;
|
|
public Double Flow;
|
|
#endregion
|
|
#region F-protocol
|
|
public Int32 FProt_DisplayVol;
|
|
public Int32 FProt_Time;
|
|
public Int32 GProt_Time;
|
|
public String CRC;
|
|
#endregion
|
|
#region G-protocol
|
|
public Double GProt_AmplitudeUp;
|
|
public Double GProt_AmplitudeDown;
|
|
public Double GProt_PulsewidthRatioUp;
|
|
public Double GProt_PulsewidthRatioDown;
|
|
#endregion
|
|
#region I-protocol
|
|
public Int32 IProt_Valid;
|
|
public Double IProt_SumOfAllUp;
|
|
public Double IProt_PwUp;
|
|
public Double IProt_AmpUp;
|
|
public Double IProt_AmpCalHigh;
|
|
public Double IProt_SumOfAllDown;
|
|
public Double[] IProt_DifTof;
|
|
public Double IProt_PwDown;
|
|
public Double IProt_AmpDown;
|
|
public Double IProt_AmpCalLow;
|
|
public Double IProt_AmpGradient;
|
|
public Double IProt_AmpOffset;
|
|
public Double IProt_AmpUpCalculated;
|
|
public Double IProt_AmpDownCalculated;
|
|
public Double IProt_Temperature;
|
|
public Double[] IProt_TofUp = new Double[8];
|
|
public Double[] IProt_TofDown = new Double[8];
|
|
public Boolean DataForGraph;
|
|
public Boolean DataForTempGraph;
|
|
public String IProt_Crc;
|
|
#endregion
|
|
#region H-protocol
|
|
public Int32 HProt_Error;
|
|
public Double HProt_SampleInterval;
|
|
public Double HProt_AmplitudeUp;
|
|
public Double HProt_AmplitudeDown;
|
|
public Double HProt_TotalTimeOfFlightAvg;
|
|
public Double HProt_DeltaTimeOfFlight;
|
|
public Double HProt_RawDeltaVolume;
|
|
public Double HProt_RawDeltaVolumeAccu;
|
|
public Double HProt_DeltaVolumeQm;
|
|
public Double HProt_AccuVolumeQm;
|
|
public Double HProt_RawDeltaVolumeScaling;
|
|
public Double HProt_TimeOfFlightUp;
|
|
public Double HProt_TimeOfFlightDown;
|
|
public Double HProt_RawTemperature;
|
|
public Double HProt_CalculatedTemperature;
|
|
public Double HProt_TemperatureScale;
|
|
public UInt32 HProt_Time;
|
|
#endregion
|
|
#region Mean values
|
|
public Double TofSumOfAllUpMean;
|
|
public Double TofSumOfAllDownMean;
|
|
public Double[] TofUpMean = new Double[8];
|
|
public Double[] TofDownMean = new Double[8];
|
|
public Double[] DifTofMean = new Double[8];
|
|
public Double DifTof3HitsMean;
|
|
public Double DifTof8HitsMean;
|
|
public Double PulsewidthUpMean;
|
|
public Double PulsewidthDownMean;
|
|
public Double AmpUpMean;
|
|
public Double AmpDownMean;
|
|
public Double TemperatureHotMean;
|
|
public Double TemperatureColdMean;
|
|
public Double FlowMean;
|
|
#endregion
|
|
#region Standard deviation
|
|
public Double DifTof3HitsStdDeviation;
|
|
public Double DifTof8HitsStdDeviation;
|
|
public Double[] StdDeviation;
|
|
#endregion
|
|
#region Miscellaneous
|
|
public String Mode;
|
|
public String RawTimestamp;
|
|
public String CsvTimestamp;
|
|
public Boolean DecodingSuceeded;
|
|
#endregion
|
|
|
|
public object Clone()
|
|
{
|
|
var toClone = (DecodedData)MemberwiseClone();
|
|
|
|
toClone.TofUp = (Double[])TofUp.Clone();
|
|
toClone.TofDown = (Double[])TofDown.Clone();
|
|
toClone.DifTof = (Double[])DifTof.Clone();
|
|
|
|
return toClone;
|
|
}
|
|
}
|
|
|
|
|
|
public partial class GENESIS_DISPLAY_TOOL : Form
|
|
{
|
|
Int32 GcCounter = 0;
|
|
|
|
private void MainLoop(object sender, EventArgs e)
|
|
{
|
|
CultureInfo Culture = GetGlobalCulture();
|
|
const UInt16 MeterNumber = Constants.Meter1;
|
|
|
|
#region Definitions and initializations
|
|
DecodedData[] DecodingResult = DecodedDataHelper.getDefaultDecodedDataArray(Constants.NumberOfPaths);
|
|
DecodingResult[Constants.PATH0] = ((DecodedData)Decoded[Constants.PATH0].Clone());
|
|
DecodingResult[Constants.PATH1] = ((DecodedData)Decoded[Constants.PATH1].Clone());
|
|
DecodingResult[Constants.PATH2] = ((DecodedData)Decoded[Constants.PATH2].Clone());
|
|
String MessageType = String.Empty;
|
|
String ProtocolVersion = String.Empty;
|
|
String Temp = String.Empty;
|
|
|
|
|
|
//l_DispRxStringLength.Text = RxDataBuffer[MeterNumber].Length.ToString(culture); // Debug length of rxstring
|
|
#endregion
|
|
#region Prepare data
|
|
if (RxDataBuffer[MeterNumber].Contains("@"))
|
|
{
|
|
Temp = $"{RxDataBuffer[MeterNumber]}\n";
|
|
RxDataBuffer[MeterNumber] = String.Empty;
|
|
ValidData[MeterNumber] = true;
|
|
}
|
|
else
|
|
ValidData[MeterNumber] = false;
|
|
#endregion
|
|
#region Decode
|
|
if (ValidData[MeterNumber])
|
|
{
|
|
ValidData[MeterNumber] = false;
|
|
#region Decode data
|
|
DecodingResult = DecodeTelegram.DecodedDataDecodeTelegram(Temp, cB_StdDevEnable.Checked, cB_MeanValuesEnable.Checked, DecodingResult, Constants.NominalFrequency);
|
|
#endregion
|
|
#region Get timestamp
|
|
DateTime CurrentTime = new DateTime();
|
|
CurrentTime = DateTime.Now;
|
|
String RawTimestamp = CurrentTime.ToString(Formats.RawDataDateTimeLogString, Culture);
|
|
String CsvTimestamp = CurrentTime.ToString(Formats.CsvDateTimeLogString, Culture);
|
|
#endregion
|
|
#region Additional decoding parameters
|
|
UInt16 Path = DecodingResult[Constants.PATH0].Path; // the same value for all paths
|
|
MessageType = DecodingResult[Path].MessageType;
|
|
ProtocolVersion = DecodingResult[Path].ProtocolVersion;
|
|
#endregion
|
|
#region Raw data
|
|
RawData.DisplayText(RawTimestamp, Temp, Culture);
|
|
RawData.SaveText(SaveDataPathRaw, RawTimestamp, RawLoggingSingleMeterEnable, Temp, Constants.RawCyclesToStorage, Culture); // print complet
|
|
#endregion
|
|
#region Labels
|
|
Display.DecodedDataUpdateLabels(DecodingResult, Path, Culture);
|
|
#endregion
|
|
#region Comment field
|
|
//if ((UInt16.Equals(Path, Constants.PATH0)) && (String.Equals(MessageType, Message.Comment)))
|
|
//{
|
|
// if (rTB_DecodedDataComment.Text.Length > nUD_SettingsCommentFieldAutoclear.Value)
|
|
// rTB_DecodedDataComment.Clear();
|
|
// rTB_DecodedDataComment.AppendText($"{DecodingResult[Constants.PATH0].Comment}\n");
|
|
// rTB_DecodedDataComment.ScrollToCaret();
|
|
//}
|
|
#endregion
|
|
#region Maingraph
|
|
// Maingraph1.InitParameters((Double)nUD_SettingsXMainGraph.Value, lB_Graph_SelectGraph.Text, cB_MultihitOverallAvgEn.Checked, (Int32)nUD_SettingsStdDev.Value, (Int32)nUD_SettingsMean.Value);
|
|
if ((cB_GraphReset.Checked))// && (MessageType == Message.Data))
|
|
{
|
|
#region Live values
|
|
if ((!lB_Graph_SelectGraph.Text.Contains("Mean")) && (!lB_Graph_SelectGraph.Text.Contains("deviation"))&& (Boolean.Equals(DecodingResult[Path].DataForGraph, true)))
|
|
{
|
|
AssignDataToMainGraph(DecodingResult, Path, ref GraphListMainTotal, ref GraphListMainWindow, (Double)nUD_SettingsXMainGraph.Value);
|
|
//zGC_MainGraph.AssignData(DecodingResult, Path, ref GraphCounterDataMainTotal, ref GraphIndexOfLists);
|
|
goto SkipOptions; // also works without 'goto' if you're wanna be MISRA compliant
|
|
}
|
|
#endregion
|
|
//#region Mean values/ no std deviation
|
|
//if ((lB_Graph_SelectGraph.Text.Contains("Mean")) && (!lB_Graph_SelectGraph.Text.Contains("deviation")))
|
|
//{
|
|
// if(((Int32)TelegramCounterTofMean[Constants.PATH0] >= (Int32)nUD_SettingsMean.Value||
|
|
// ((Int32)TelegramCounterFlowMean[Constants.PATH0] >= (Int32)nUD_SettingsMean.Value))||
|
|
// ((Int32)TelegramCounterOthersMean[Constants.PATH0] >= (Int32)nUD_SettingsMean.Value))
|
|
// //Maingraph1.AssignData(DecodingResult, Path, ref GraphCounterDataMainTotal, ref GraphIndexOfLists);
|
|
|
|
// goto SkipOptions; // also works without 'goto'
|
|
//}
|
|
//#endregion
|
|
//#region Std deviation/ no mean values
|
|
//if ((!lB_Graph_SelectGraph.Text.Contains("Mean")) && (lB_Graph_SelectGraph.Text.Contains("deviation")))
|
|
//{
|
|
// if ((Int32)TelegramCounterStdDeviationMultihit[Constants.PATH0] >= (Int32)nUD_SettingsStdDev.Value)
|
|
// //Maingraph1.AssignData(DecodingResult, Path, ref GraphCounterDataMainTotal, ref GraphIndexOfLists);
|
|
// goto SkipOptions; // also works without 'goto' if you're wanna be MISRA compliant
|
|
//}
|
|
//#endregion
|
|
/*
|
|
#region Mean values/ std deviation
|
|
if ((lB_Graph_SelectGraph.Text.Contains("Mean")) && (lB_Graph_SelectGraph.Text.Contains("deviation")))
|
|
{
|
|
if (((Int32)TelegramCounterStdDeviationMultihit[Constants.PATH0] >= (Int32)nUD_SettingsStdDev.Value)
|
|
&& ((Int32)TelegramCounterTofMean[Constants.PATH0] >= (Int32)nUD_SettingsMean.Value)||
|
|
((Int32)TelegramCounterFlowMean[Constants.PATH0] >= (Int32)nUD_SettingsMean.Value))
|
|
|
|
Maingraph1.AssignData(DecodingResult, Path, ref GraphCounterDataMainTotal, ref GraphIndexOfLists);
|
|
}
|
|
#endregion*/
|
|
// Jump to here to skip unneeded options
|
|
SkipOptions:;
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region Refresh values for background workers
|
|
Decoded[Constants.PATH0] = (DecodedData)DecodingResult[Constants.PATH0].Clone();
|
|
Decoded[Constants.PATH1] = (DecodedData)DecodingResult[Constants.PATH1].Clone();
|
|
Decoded[Constants.PATH2] = (DecodedData)DecodingResult[Constants.PATH2].Clone();
|
|
#endregion
|
|
return;
|
|
|
|
#region Start mean dif tofs
|
|
if ((ProtocolVersion == "d") || (ProtocolVersion == "i"))
|
|
{
|
|
switch (Path)
|
|
{
|
|
case Constants.PATH0:
|
|
ElapsedCounterTofMean = StartBackgroundWorkerTofMeanPath0(MessageType, ElapsedCounterTofMean, cB_MeanValuesEnable.Checked);
|
|
if (TelegramCounterDifTofMean[Constants.PATH0] >= (UInt16)nUD_SettingsMean.Value)
|
|
ElapsedCounterStdDeviation = StartBackgroundWorkerStdDeviationPath0(MessageType, ElapsedCounterStdDeviation, cB_StdDevEnable.Checked);
|
|
ElapsedCounterDifTofMean = StartDifTofMeanBackgroundWorkerPath0(MessageType, ElapsedCounterDifTofMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterMultiHitMean = StartMultihitBackgroundWorkerPath0(MessageType, ElapsedCounterMultiHitMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterOthersMean = StartBackgroundWorkerOthersMeanPath0(MessageType, ElapsedCounterOthersMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH1:
|
|
ElapsedCounterTofMean = StartBackgroundWorkerTofMeanPath1(MessageType, ElapsedCounterTofMean, cB_MeanValuesEnable.Checked);
|
|
if (TelegramCounterDifTofMean[Constants.PATH1] >= (UInt16)nUD_SettingsMean.Value)
|
|
ElapsedCounterStdDeviation = StartBackgroundWorkerStdDeviationPath1(MessageType, ElapsedCounterStdDeviation, cB_StdDevEnable.Checked);
|
|
ElapsedCounterDifTofMean = StartDifTofMeanBackgroundWorkerPath1(MessageType, ElapsedCounterDifTofMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterMultiHitMean = StartMultihitBackgroundWorkerPath1(MessageType, ElapsedCounterMultiHitMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterOthersMean = StartBackgroundWorkerOthersMeanPath1(MessageType, ElapsedCounterOthersMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH2:
|
|
ElapsedCounterTofMean = StartBackgroundWorkerTofMeanPath2(MessageType, ElapsedCounterTofMean, cB_MeanValuesEnable.Checked);
|
|
if (TelegramCounterDifTofMean[Constants.PATH2] >= (UInt16)nUD_SettingsMean.Value)
|
|
ElapsedCounterStdDeviation = StartBackgroundWorkerStdDeviationPath2(MessageType, ElapsedCounterStdDeviation, cB_StdDevEnable.Checked);
|
|
ElapsedCounterDifTofMean = StartDifTofMeanBackgroundWorkerPath2(MessageType, ElapsedCounterDifTofMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterMultiHitMean = StartMultihitBackgroundWorkerPath2(MessageType, ElapsedCounterMultiHitMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterOthersMean = StartBackgroundWorkerOthersMeanPath2(MessageType, ElapsedCounterOthersMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
}
|
|
}
|
|
#endregion
|
|
#region Start mean flow
|
|
if (ProtocolVersion == "e")
|
|
{
|
|
switch (Path)
|
|
{
|
|
case Constants.PATH0: ElapsedCounterFlowMean = StartBackgroundWorkerFlowMeanPath0(MessageType, ElapsedCounterFlowMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH1: ElapsedCounterFlowMean = StartBackgroundWorkerFlowMeanPath1(MessageType, ElapsedCounterFlowMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH2: ElapsedCounterFlowMean = StartBackgroundWorkerFlowMeanPath2(MessageType, ElapsedCounterFlowMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
default: break;
|
|
}
|
|
}
|
|
#endregion
|
|
#region Start mean temperature
|
|
if (((ProtocolVersion == "d") || (ProtocolVersion == "i")) && (Path == Constants.PATH0))
|
|
{
|
|
ElapsedCounterTemperatureMean = StartBackgroundWorkerTemperatureMeanPath0(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterTemperatureMean = StartBackgroundWorkerTemperatureMeanPath1(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
ElapsedCounterTemperatureMean = StartBackgroundWorkerTemperatureMeanPath2(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
}
|
|
|
|
if ((ProtocolVersion == "a") || (ProtocolVersion=="b"))
|
|
{
|
|
switch(Path)
|
|
{
|
|
case Constants.PATH0: StartBackgroundWorkerTemperatureMeanPath0(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH1: StartBackgroundWorkerTemperatureMeanPath1(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
case Constants.PATH2: StartBackgroundWorkerTemperatureMeanPath2(MessageType, ElapsedCounterTemperatureMean, cB_MeanValuesEnable.Checked);
|
|
break;
|
|
default: break;
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
#region Monitor background workers
|
|
DebugElapsedValues(ElapsedCounterTofMean, ElapsedCounterDifTofMean, ElapsedCounterMultiHitMean, ElapsedCounterOthersMean, ElapsedCounterTemperatureMean, ElapsedCounterFlowMean, ElapsedCounterStdDeviation, InvokeMainloopExceptionsCounter, SumOfAllElapsedValues, Culture);
|
|
#endregion
|
|
|
|
Misc.GarbageCollector(ref GcCounter);
|
|
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
private void MainLoopMassLoggingMeter1(object sender, EventArgs e)
|
|
{
|
|
CultureInfo culture = GetGlobalCulture();
|
|
const UInt16 MeterNumber = Constants.Meter1;
|
|
|
|
#region Definitions and initializations
|
|
DecodedData[] DecodingResult = DecodedDataHelper.getDefaultDecodedDataArray(Constants.NumberOfPaths);
|
|
DecodingResult[Constants.PATH0] = ((DecodedData)Decoded[Constants.PATH0].Clone());
|
|
DecodingResult[Constants.PATH1] = ((DecodedData)Decoded[Constants.PATH1].Clone());
|
|
DecodingResult[Constants.PATH2] = ((DecodedData)Decoded[Constants.PATH2].Clone());
|
|
String MessageType = String.Empty;
|
|
String ProtocolVersion = String.Empty;
|
|
String Temp = String.Empty;
|
|
l_DispRxStringLength.Text = RxDataBuffer[MeterNumber].Length.ToString(culture); // Debug length of rxstring
|
|
#endregion
|
|
#region Prepare data
|
|
for (UInt16 i = 0; i < RxDataBuffer[MeterNumber].Count(); i++)
|
|
{
|
|
if (RxDataBuffer[MeterNumber].ElementAt(0).ToString(culture).Equals("@"))
|
|
{
|
|
if (!String.IsNullOrEmpty(Output[MeterNumber]))
|
|
{
|
|
Temp = $"@{Output[MeterNumber]}";
|
|
ValidData[MeterNumber] = true;
|
|
}
|
|
Output[MeterNumber] = String.Empty;
|
|
}
|
|
else
|
|
Output[MeterNumber] = $"{Output[MeterNumber]}{RxDataBuffer[MeterNumber].ElementAt(0)}";
|
|
|
|
RxDataBuffer[MeterNumber] = RxDataBuffer[MeterNumber].Remove(0, 1);
|
|
}
|
|
#endregion
|
|
#region Decode
|
|
if (ValidData[MeterNumber])
|
|
{
|
|
Temp = Temp.Replace("\n", String.Empty);
|
|
ValidData[MeterNumber] = false;
|
|
#region Decode data
|
|
DecodingResult = DecodeTelegram.DecodedDataDecodeTelegram(Output[MeterNumber], cB_StdDevEnable.Checked, cB_MeanValuesEnable.Checked, DecodingResult, Constants.NominalFrequency);
|
|
#endregion
|
|
#region Get timestamp
|
|
DateTime CurrentTime = new DateTime();
|
|
CurrentTime = DateTime.Now;
|
|
String RawTimestamp = CurrentTime.ToString(Formats.RawDataDateTimeLogString, culture);
|
|
String CsvTimestamp = CurrentTime.ToString(Formats.CsvDateTimeLogString, culture);
|
|
#endregion
|
|
#region Additional decoding parameters
|
|
UInt16 Path = DecodingResult[Constants.PATH0].Path; // the same value for all paths
|
|
MessageType = DecodingResult[Path].MessageType;
|
|
ProtocolVersion = DecodingResult[Path].ProtocolVersion;
|
|
#endregion
|
|
#region CSV-Logging
|
|
//if ((LoggingCsvEn == true) && (MessageType == Message.Data))
|
|
//{
|
|
// CsvLogging.Log(Path, ref CsvIndexValue, cB_Form1CsvLoggingPath0.Checked,
|
|
// cB_Form1CsvLoggingPath1.Checked, cB_Form1CsvLoggingPath2.Checked, DecodingResult, @SaveDataPathCsv, CsvTimestamp, ref CsvDataToLog, Constants.CsvCyclesToStorage);
|
|
//}
|
|
#endregion
|
|
#region Refresh values for background workers
|
|
Decoded[Constants.PATH0] = (DecodedData)DecodingResult[Constants.PATH0].Clone();
|
|
Decoded[Constants.PATH1] = (DecodedData)DecodingResult[Constants.PATH1].Clone();
|
|
Decoded[Constants.PATH2] = (DecodedData)DecodingResult[Constants.PATH2].Clone();
|
|
#endregion
|
|
#region Monitor background workers
|
|
DebugElapsedValues(ElapsedCounterTofMean, ElapsedCounterDifTofMean, ElapsedCounterMultiHitMean, ElapsedCounterOthersMean, ElapsedCounterTemperatureMean, ElapsedCounterFlowMean, ElapsedCounterStdDeviation, InvokeMainloopExceptionsCounter, SumOfAllElapsedValues, this.globalCulture);
|
|
#endregion
|
|
|
|
Misc.GarbageCollector(ref GcCounter);
|
|
|
|
}
|
|
#endregion
|
|
}
|
|
private void MainLoopMassLoggingMeter2(object sender, EventArgs e)
|
|
{
|
|
CultureInfo culture = GetGlobalCulture();
|
|
const UInt16 MeterNumber = Constants.Meter2;
|
|
|
|
#region Definitions and initializations
|
|
DecodedData[] DecodingResult = DecodedDataHelper.getDefaultDecodedDataArray(Constants.NumberOfPaths);
|
|
DecodingResult[Constants.PATH0] = ((DecodedData)Decoded[Constants.PATH0].Clone());
|
|
DecodingResult[Constants.PATH1] = ((DecodedData)Decoded[Constants.PATH1].Clone());
|
|
DecodingResult[Constants.PATH2] = ((DecodedData)Decoded[Constants.PATH2].Clone());
|
|
|
|
String MessageType = String.Empty;
|
|
String ProtocolVersion = String.Empty;
|
|
String Temp = String.Empty;
|
|
l_DispRxStringLength.Text = RxDataBuffer[MeterNumber].Length.ToString(culture); // Debug length of rxstring
|
|
#endregion
|
|
#region Prepare data
|
|
for (UInt16 i = 0; i < RxDataBuffer[MeterNumber].Count(); i++)
|
|
{
|
|
if (RxDataBuffer[MeterNumber].ElementAt(0).ToString(culture).Equals("@"))
|
|
{
|
|
if (!String.IsNullOrEmpty(Output[MeterNumber]))
|
|
{
|
|
Temp = $"@{Output[MeterNumber]}";
|
|
ValidData[MeterNumber] = true;
|
|
}
|
|
Output[MeterNumber] = String.Empty;
|
|
}
|
|
else
|
|
Output[MeterNumber] = $"{Output[MeterNumber]}{RxDataBuffer[MeterNumber].ElementAt(0)}";
|
|
|
|
RxDataBuffer[MeterNumber] = RxDataBuffer[MeterNumber].Remove(0, 1);
|
|
}
|
|
#endregion
|
|
#region Decode
|
|
if (ValidData[MeterNumber])
|
|
{
|
|
#region Decode data
|
|
Temp = Temp.Replace("\n", String.Empty);
|
|
ValidData[MeterNumber] = false;
|
|
DecodingResult = DecodeTelegram.DecodedDataDecodeTelegram(Output[MeterNumber], cB_StdDevEnable.Checked, cB_MeanValuesEnable.Checked, DecodingResult, Constants.NominalFrequency);
|
|
#endregion
|
|
#region Get timestamp
|
|
DateTime CurrentTime = new DateTime();
|
|
CurrentTime = DateTime.Now;
|
|
String RawTimestamp = CurrentTime.ToString(Formats.RawDataDateTimeLogString, culture);
|
|
String CsvTimestamp = CurrentTime.ToString(Formats.CsvDateTimeLogString, culture);
|
|
#endregion
|
|
#region Additional decoding parameters
|
|
UInt16 Path = DecodingResult[Constants.PATH0].Path; // the same value for all paths
|
|
MessageType = DecodingResult[Path].MessageType;
|
|
ProtocolVersion = DecodingResult[Path].ProtocolVersion;
|
|
#endregion
|
|
#region Raw data
|
|
//RawData.DisplayAndSaveText(SaveDataPathRaw, RawTimestamp, RawLoggingSingleMeterEnable, Output[MeterNumber], Constants.RawCyclesToStorage); // print complet
|
|
#endregion
|
|
#region CSV-Logging
|
|
//if ((LoggingCsvEn == true) && (MessageType == Message.Data))
|
|
//{
|
|
// CsvLogging.Log(Path, ref CsvIndexValue, cB_Form1CsvLoggingPath0.Checked,
|
|
// cB_Form1CsvLoggingPath1.Checked, cB_Form1CsvLoggingPath2.Checked, DecodingResult, @SaveDataPathCsv, CsvTimestamp, ref CsvDataToLog, Constants.CsvCyclesToStorage);
|
|
//}
|
|
#endregion
|
|
#region Refresh values for background workers
|
|
Decoded[Constants.PATH0] = (DecodedData)DecodingResult[Constants.PATH0].Clone();
|
|
Decoded[Constants.PATH1] = (DecodedData)DecodingResult[Constants.PATH1].Clone();
|
|
Decoded[Constants.PATH2] = (DecodedData)DecodingResult[Constants.PATH2].Clone();
|
|
#endregion
|
|
#region Monitor background workers
|
|
DebugElapsedValues(ElapsedCounterTofMean, ElapsedCounterDifTofMean, ElapsedCounterMultiHitMean, ElapsedCounterOthersMean, ElapsedCounterTemperatureMean, ElapsedCounterFlowMean, ElapsedCounterStdDeviation, InvokeMainloopExceptionsCounter, SumOfAllElapsedValues, culture);
|
|
#endregion
|
|
|
|
Misc.GarbageCollector(ref GcCounter);
|
|
|
|
}
|
|
#endregion
|
|
}
|
|
private void MainLoopMassLoggingMeter3(object sender, EventArgs e)
|
|
{
|
|
CultureInfo culture = GetGlobalCulture();
|
|
const UInt16 MeterNumber = Constants.Meter3;
|
|
|
|
#region Definitions and initializations
|
|
DecodedData[] DecodingResult = DecodedDataHelper.getDefaultDecodedDataArray(Constants.NumberOfPaths);
|
|
DecodingResult[Constants.PATH0] = ((DecodedData)Decoded[Constants.PATH0].Clone());
|
|
DecodingResult[Constants.PATH1] = ((DecodedData)Decoded[Constants.PATH1].Clone());
|
|
DecodingResult[Constants.PATH2] = ((DecodedData)Decoded[Constants.PATH2].Clone());
|
|
String MessageType = String.Empty;
|
|
String ProtocolVersion = String.Empty;
|
|
String Temp = String.Empty;
|
|
l_DispRxStringLength.Text = RxDataBuffer[MeterNumber].Length.ToString(culture); // Debug length of rxstring
|
|
#endregion
|
|
#region Prepare data
|
|
for (UInt16 i = 0; i < RxDataBuffer[MeterNumber].Count(); i++)
|
|
{
|
|
if (RxDataBuffer[MeterNumber].ElementAt(0).ToString(culture).Equals("@"))
|
|
{
|
|
if (!String.IsNullOrEmpty(Output[MeterNumber]))
|
|
{
|
|
Temp = $"@{Output[MeterNumber]}";
|
|
ValidData[MeterNumber] = true;
|
|
}
|
|
Output[MeterNumber] = String.Empty;
|
|
}
|
|
else
|
|
Output[MeterNumber] = $"{Output[MeterNumber]}{RxDataBuffer[MeterNumber].ElementAt(0)}";
|
|
|
|
RxDataBuffer[MeterNumber] = RxDataBuffer[MeterNumber].Remove(0, 1);
|
|
}
|
|
#endregion
|
|
#region Decode
|
|
if (ValidData[MeterNumber])
|
|
{
|
|
#region Decode data
|
|
Temp = Temp.Replace("\n", String.Empty);
|
|
ValidData[MeterNumber] = false;
|
|
DecodingResult = DecodeTelegram.DecodedDataDecodeTelegram(Output[MeterNumber], cB_StdDevEnable.Checked, cB_MeanValuesEnable.Checked, DecodingResult, Constants.NominalFrequency);
|
|
#endregion
|
|
#region Get timestamp
|
|
DateTime CurrentTime = new DateTime();
|
|
CurrentTime = DateTime.Now;
|
|
String RawTimestamp = CurrentTime.ToString(Formats.RawDataDateTimeLogString, culture);
|
|
String CsvTimestamp = CurrentTime.ToString(Formats.CsvDateTimeLogString, culture);
|
|
#endregion
|
|
#region Additional decoding parameters
|
|
UInt16 Path = DecodingResult[Constants.PATH0].Path; // the same value for all paths
|
|
MessageType = DecodingResult[Path].MessageType;
|
|
ProtocolVersion = DecodingResult[Path].ProtocolVersion;
|
|
#endregion
|
|
#region Raw data
|
|
//RawData.DisplayAndSaveText(SaveDataPathRaw, RawTimestamp, RawLoggingSingleMeterEnable, Output[MeterNumber], Constants.RawCyclesToStorage); // print complet
|
|
#endregion
|
|
#region CSV-Logging
|
|
//if ((LoggingCsvEn == true) && (MessageType == Message.Data))
|
|
//{
|
|
// CsvLogging.Log(Path, ref CsvIndexValue, cB_Form1CsvLoggingPath0.Checked,
|
|
// cB_Form1CsvLoggingPath1.Checked, cB_Form1CsvLoggingPath2.Checked, DecodingResult, @SaveDataPathCsv, CsvTimestamp, ref CsvDataToLog, Constants.CsvCyclesToStorage);
|
|
//}
|
|
#endregion
|
|
#region Refresh values for background workers
|
|
Decoded[Constants.PATH0] = (DecodedData)DecodingResult[Constants.PATH0].Clone();
|
|
Decoded[Constants.PATH1] = (DecodedData)DecodingResult[Constants.PATH1].Clone();
|
|
Decoded[Constants.PATH2] = (DecodedData)DecodingResult[Constants.PATH2].Clone();
|
|
#endregion
|
|
#region Monitor background workers
|
|
DebugElapsedValues(ElapsedCounterTofMean, ElapsedCounterDifTofMean, ElapsedCounterMultiHitMean, ElapsedCounterOthersMean, ElapsedCounterTemperatureMean, ElapsedCounterFlowMean, ElapsedCounterStdDeviation, InvokeMainloopExceptionsCounter, SumOfAllElapsedValues, culture);
|
|
#endregion
|
|
|
|
Misc.GarbageCollector(ref GcCounter);
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
|
|
}
|
|
}
|