Fix parmeter bug when lenght sammler then 3

This commit is contained in:
Roland Drabesch 2024-07-18 08:42:01 +02:00
parent 2c927aa46e
commit aa906b1bdb
31 changed files with 17553 additions and 17100 deletions

View File

@ -155,7 +155,7 @@
</site>
<site name="MeterProcessState" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="D:\Projekte\SENSUS_GitLab\LAA_PRODUCTION\Common\Service\MeterProcessState" />
<virtualDirectory path="/" physicalPath="C:\Users\drabesch_ro\Repo\lab\la_operations\laa_production\Common\Service\MeterProcessState" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:56011:localhost" />

View File

@ -225,6 +225,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.UI.SIRTBroadcaster",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Hardware.Interfaces.Protocols.SIRT", "Hardware\Interfaces\Protocols\Common.Hardware.Interfaces.Protocols.SIRT\Common.Hardware.Interfaces.Protocols.SIRT.csproj", "{DE225BDD-7DCD-4F4F-9E3F-348589DFE93C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenesisCore.UnitTest", "GenesisCore.UnitTest\GenesisCore.UnitTest.csproj", "{88995CF2-4E8B-4347-AB79-7D2796E59E7C}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Utils\DateTimeServerShared\DateTimeServerShared.projitems*{4806d89a-fbfb-41bc-aaa7-2242444bf55a}*SharedItemsImports = 4
@ -5443,6 +5445,70 @@ Global
{DE225BDD-7DCD-4F4F-9E3F-348589DFE93C}.XP32bit|x64.Build.0 = Release|Any CPU
{DE225BDD-7DCD-4F4F-9E3F-348589DFE93C}.XP32bit|x86.ActiveCfg = Release|Any CPU
{DE225BDD-7DCD-4F4F-9E3F-348589DFE93C}.XP32bit|x86.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}._MANUAL_CONTROL|x86.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.COM|x86.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Debug|x86.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.PerformTest|x86.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|Any CPU.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|x64.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|x64.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|x86.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.Release|x86.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.ReleaseTest|x86.Build.0 = Release|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|Mixed Platforms.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|x64.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|x64.Build.0 = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|x86.ActiveCfg = Debug|Any CPU
{88995CF2-4E8B-4347-AB79-7D2796E59E7C}.XP32bit|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -5545,6 +5611,7 @@ Global
{B23BFAF9-08AE-4311-8C08-FB2BB49EA2AD} = {B9444AB7-1EB1-484A-8DE6-4EEE03498CD7}
{8D3B1C46-B23E-46CC-9B59-24E34DE60510} = {03D4F23E-7E4A-4091-BC96-036C996D351A}
{DE225BDD-7DCD-4F4F-9E3F-348589DFE93C} = {EC10DAFE-88CF-42D5-99E7-D247938B6430}
{88995CF2-4E8B-4347-AB79-7D2796E59E7C} = {B5F43F61-4448-4992-85B5-7EDFB82FD643}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BCB7B69-696C-436A-86F7-C91EA5588164}

View File

@ -10,25 +10,97 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="80*"/>
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="10*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="21*"/>
<RowDefinition Height="200*"/>
<RowDefinition Height="200*"/>
<RowDefinition Height="100*"/>
<RowDefinition Height="21*"/>
</Grid.RowDefinitions>
<Label x:Name="FileName" >
</Label>
<Button Click="Button_Click" Grid.Row="0" Grid.Column="2" >File</Button>
<ScottPlot:WpfPlot x:Name="WpfPlot1" Grid.Row="1" Grid.Column="1" />
<ScottPlot:WpfPlot x:Name="WpfPlot2" Grid.Row="2" Grid.Column="1" />
<ScottPlot:WpfPlot x:Name="WpfPlot3" Grid.Row="2" Grid.Column="2" />
<Grid Grid.Column="2" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="40*"/>
<ColumnDefinition Width="10*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="40*"/>
<RowDefinition Height="100*"/>
<RowDefinition Height="10*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Grid.Column="1">Serialnr</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="1">TestRunNr</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="1">TestBenchNr</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="1">Date</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="1">MeterSize</TextBlock>
<TextBlock Grid.Row="6" Grid.Column="1">AirTempC</TextBlock>
<TextBlock Grid.Row="7" Grid.Column="1">AirPressure</TextBlock>
<TextBlock Grid.Row="8" Grid.Column="1">AirHumanity</TextBlock>
<TextBlock Grid.Row="9" Grid.Column="1">WaterTempC</TextBlock>
<TextBlock Grid.Row="10" Grid.Column="1">TotalMeters</TextBlock>
<TextBlock Grid.Row="11" Grid.Column="1">Remark</TextBlock>
</Label><Button Click="Button_Click" Grid.Row="0" Grid.Column="2" >File</Button>
<ScottPlot:WpfPlot x:Name="WpfPlot1" Grid.Row="1" Grid.Column="1" />
<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding Path=testBenchresults.Serialnr }"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="{Binding Path=testBenchresults.TestRunNr}"/>
<TextBlock Grid.Row="3" Grid.Column="2" Text="{Binding Path=testBenchresults.TestBenchNr}"/>
<TextBlock Grid.Row="4" Grid.Column="2" Text="{Binding Path=testBenchresults.Date}"/>
<TextBlock Grid.Row="5" Grid.Column="2" Text="{Binding Path=testBenchresults.MeterSize}"/>
<TextBlock Grid.Row="6" Grid.Column="2" Text="{Binding Path=testBenchresults.AirTempC}"/>
<TextBlock Grid.Row="7" Grid.Column="2" Text="{Binding Path=testBenchresults.AirPressure}"/>
<TextBlock Grid.Row="8" Grid.Column="2" Text="{Binding Path=testBenchresults.AirHumanity}"/>
<TextBlock Grid.Row="9" Grid.Column="2" Text="{Binding Path=testBenchresults.WaterTempC}"/>
<TextBlock Grid.Row="10" Grid.Column="2" Text="{Binding Path=testBenchresults.TotalMeters}"/>
<TextBlock Grid.Row="11" Grid.Column="2" Text="{Binding Path=testBenchresults.Remark}"/>
<ScottPlot:WpfPlot x:Name="WpfPlot2" Grid.Row="1" Grid.Column="2" />
<ScottPlot:WpfPlot x:Name="WpfPlot3" Grid.Row="2" Grid.Column="1" />
<ScottPlot:WpfPlot x:Name="WpfPlot4" Grid.Row="2" Grid.Column="2" />
<TextBlock Grid.Row="12" Grid.Column="2" ></TextBlock>
<DataGrid
x:Name="dataGrid"
Grid.Row="12"
Grid.Column="1" Grid.ColumnSpan="2" SelectedCellsChanged="DataGrid_SelectedCellsChanged" />
</Grid>
<!--DataContext="{Binding testBenchresults}">
<TextBlock Text="testpoint"
Grid.Row="0"
Margin="9,-7,0,0" ></TextBlock>
<TextBlock Text="{Binding TestRunNr}"
Grid.Row="1"
Margin="9,-7,0,0" />-->
</Grid>
</Window>

View File

@ -2,11 +2,12 @@
using ScottPlot.WPF;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol;
using Xylem.Common.Logic.ProductionOrderCore.TestResults;
using Xylem.Common.Logic.SoftwareAccessHelper;
@ -18,8 +19,29 @@ namespace CordoPlot
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
public partial class MainWindow : Window , INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private PlotableTestResults _testBenchresults;
public PlotableTestResults testBenchresults
{
get { return _testBenchresults; }
set
{
if (value != _testBenchresults)
{
_testBenchresults = value;
OnPropertyChanged("testBenchresults");
}
}
}
public MainWindow()
{
InitializeComponent();
@ -45,16 +67,19 @@ namespace CordoPlot
//lade testresult from webservise
// Open document
string filename = dialog.FileName;
PlotableTestResults testBenchresults = new PlotableTestResults();
testBenchresults = new PlotableTestResults();
var AllLines = File.ReadAllLines(filename);
//LedRawData__Slot_7_SN24712962_PG2016079130.log
if (filename.Contains("_SN") && filename.Contains("_PG"))
{
var sn = filename.Substring(filename.LastIndexOf("_SN") +3, filename.LastIndexOf("_PG") - filename.LastIndexOf("_SN") - 3);
var pg = filename.Substring(filename.LastIndexOf("_PG") +3, filename.LastIndexOf(".log") - filename.LastIndexOf("_PG") - 3);
var sn = filename.Substring(filename.LastIndexOf("_SN") + 3, filename.LastIndexOf("_PG") - filename.LastIndexOf("_SN") - 3);
var pg = filename.Substring(filename.LastIndexOf("_PG") + 3, filename.LastIndexOf(".log") - filename.LastIndexOf("_PG") - 3);
testBenchresults = JsonConvert.DeserializeObject<PlotableTestResults>(LocalWebRequest.GetRequest($"http://10.49.40.25/MeterProcessState/api/TestBench/GetTestResults?SerialNr={sn}&TestRunNr={pg}"));
testBenchresults.HasResults = true;
dataGrid.ItemsSource = testBenchresults.TestPointsMain;
dataGrid.Items.Refresh();
}
var listOfData = new List<List<IMeasurementRecord>>();
@ -65,8 +90,10 @@ namespace CordoPlot
var decoder = new StreamingDecoder();
var currentSyncmark = SyncMarkRecord.DecodeEveryPackage;
//DecodeMsg
var linecounter = 0;
foreach (var line in AllLines)
{
linecounter = linecounter + 1;
decoder = new StreamingDecoder();
if (line.Contains("|"))
@ -89,15 +116,17 @@ namespace CordoPlot
{
decoder.DataCalib.ReceivedTime = recived;
decoder.DataCalib.SyncMarkRecord = currentSyncmark;
recordToAdd = decoder.DataCalib;
listOfData[recordToAdd.GetChannel()].Add(recordToAdd);
var n = new PlotCalibrationRecord(decoder.DataCalib, linecounter);
listOfData[n.GetChannel()].Add(n);
}
else if (decoder.DataFlowTest != null && decoder.DataFlowTest.IsValid)
{
decoder.DataFlowTest.ReceivedTime = recived;
decoder.DataFlowTest.SyncMarkRecord = currentSyncmark;
recordToAdd = decoder.DataFlowTest;
listOfData[0].Add(recordToAdd);
var n = new PlotFlowTestRecord(decoder.DataFlowTest, linecounter);
listOfData[n.GetChannel()].Add(n);
}
else
{
@ -151,6 +180,12 @@ namespace CordoPlot
Lines.Add(new List<double>());
var ChnlHelper = new List<Tuple<int, WpfPlot, int?>>();
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(0, WpfPlot1, null));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(1, WpfPlot1, null));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(2, WpfPlot1, null));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(3, WpfPlot1, null));
Plot(ChnlHelper);
//List<List<ushort>> Errors = new List<List<ushort>>();
//Errors.Add(new List<ushort>());
//Errors.Add(new List<ushort>());
@ -189,64 +224,6 @@ namespace CordoPlot
// }
// }
//}
List<Tuple<ScottPlot.Color, ScottPlot.Color>> colors = new List<Tuple<ScottPlot.Color, ScottPlot.Color>>();
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Blue, ScottPlot.Colors.DarkBlue));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Brown, ScottPlot.Colors.DarkGoldenRod));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Yellow, ScottPlot.Colors.DarkKhaki));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Violet, ScottPlot.Colors.DarkViolet));
List<List<double>> FinLines = new List<List<double>>();
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
var ChnlHelper = new List<Tuple<int, WpfPlot>>();
ChnlHelper.Add(new Tuple<int, WpfPlot>(0, WpfPlot1));
ChnlHelper.Add(new Tuple<int, WpfPlot>(1, WpfPlot2));
ChnlHelper.Add(new Tuple<int, WpfPlot>(2, WpfPlot3));
ChnlHelper.Add(new Tuple<int, WpfPlot>(3, WpfPlot4));
var Plotresults = new List<PlotResult>();
foreach (var item in ChnlHelper)
{
var volLines = testBenchresults.Plot( item.Item1, null);
volLines.Color = colors[item.Item1].Item1;
Plotresults.Add(volLines);
//foreach (var item in Errors[i])
//{
// if (item != 0)
// {
// WpfPlot1.Plot.Add.Marker(Linescale[cordHelp], FinLines[i][cordHelp], ScottPlot.MarkerShape.Cross, 10, colors[1].Item2);
// }
// cordHelp = cordHelp + 1;
//}
}
var maxScale = Plotresults.Max(p => p.ScaleLine.Count);
var AddScale = Plotresults.First(p => p.ScaleLine.Count == maxScale);
var srtExport = new System.Text.StringBuilder();
foreach (var item in ChnlHelper)
{
Plotresults[item.Item1].ScaleUp(AddScale.ScaleLine);
item.Item2.Plot.Add.Scatter(Plotresults[item.Item1].ScaleLine.ToArray(), Plotresults[item.Item1].VolumeLine.ToArray(), Plotresults[item.Item1].Color);
var exprLine = 0;
srtExport.AppendLine($"Chnl {item.Item1} ;Scale; Vol;");
foreach (var exprHelpLine in Plotresults[item.Item1].ScaleLine)
{
srtExport.AppendLine($"{exprHelpLine};{Plotresults[item.Item1].VolumeLine[exprLine]};");
exprLine = exprLine + 1;
}
item.Item2.Plot.Axes.AutoScale();
item.Item2.Refresh();
}
@ -280,6 +257,109 @@ namespace CordoPlot
}
private void Plot(List<Tuple<int, WpfPlot, int?>> ChnlHelper)
{
WpfPlot1.Reset();
WpfPlot2.Reset();
WpfPlot3.Reset();
List<Tuple<ScottPlot.Color, ScottPlot.Color>> colors = new List<Tuple<ScottPlot.Color, ScottPlot.Color>>();
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Blue, ScottPlot.Colors.DarkBlue));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Brown, ScottPlot.Colors.DarkGoldenRod));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Yellow, ScottPlot.Colors.DarkKhaki));
colors.Add(new Tuple<ScottPlot.Color, ScottPlot.Color>(ScottPlot.Colors.Violet, ScottPlot.Colors.DarkViolet));
List<List<double>> FinLines = new List<List<double>>();
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
FinLines.Add(new List<double>());
var Plotresults = new List<PlotResult>();
foreach (var item in ChnlHelper)
{
var volLines = testBenchresults.Plot(item.Item1, item.Item3);
volLines.Color = colors[item.Item1].Item1;
Plotresults.Add(volLines);
//foreach (var item in Errors[i])
//{
// if (item != 0)
// {
// WpfPlot1.Plot.Add.Marker(Linescale[cordHelp], FinLines[i][cordHelp], ScottPlot.MarkerShape.Cross, 10, colors[1].Item2);
// }
// cordHelp = cordHelp + 1;
//}
}
var maxScale = Plotresults.Max(p => p.ScaleLine.Count);
var AddScale = Plotresults.First(p => p.ScaleLine.Count == maxScale);
var srtExport = new System.Text.StringBuilder();
foreach (var item in ChnlHelper)
{
// Plotresults[item.Item1].ScaleUp(AddScale.ScaleLine);
WpfPlot1.Plot.Add.Scatter(Plotresults[item.Item1].ScaleLine.ToArray(), Plotresults[item.Item1].VolumeLine.ToArray(), Plotresults[item.Item1].Color);
if (Plotresults[item.Item1].TofLine.Any())
{
WpfPlot2.Plot.Add.Scatter(Plotresults[item.Item1].ScaleLine.ToArray(), Plotresults[item.Item1].TofLine.ToArray(), Plotresults[item.Item1].Color);
}
if (Plotresults[item.Item1].AmplitudeDownVLine.Any())
{
WpfPlot3.Plot.Add.Scatter(Plotresults[item.Item1].ScaleLine.ToArray(), Plotresults[item.Item1].AmplitudeDownVLine.ToArray(), Plotresults[item.Item1].Color);
WpfPlot3.Plot.Add.Scatter(Plotresults[item.Item1].ScaleLine.ToArray(), Plotresults[item.Item1].AmplitudeUpVLine.ToArray(), Plotresults[item.Item1].Color);
}
var exprLine = 0;
srtExport.AppendLine($"Chnl {item.Item1} ;Scale; Vol;");
foreach (var exprHelpLine in Plotresults[item.Item1].ScaleLine)
{
srtExport.AppendLine($"{exprHelpLine};{Plotresults[item.Item1].VolumeLine[exprLine]};");
exprLine = exprLine + 1;
}
}
WpfPlot1.Plot.Axes.AutoScale();
WpfPlot1.Refresh();
WpfPlot2.Plot.Axes.AutoScale();
WpfPlot2.Refresh();
WpfPlot3.Plot.Axes.AutoScale();
WpfPlot3.Refresh();
}
private void DataGrid_SelectedCellsChanged(Object sender, System.Windows.Controls.SelectedCellsChangedEventArgs e)
{
DataGridCellInfo di = e.AddedCells.First();
//Cast the DataGridCellInfo.Item to the source object type
//In this case the ItemsSource is a DataTable and individual items are DataRows
if (di.Item is TestPoint tp)
{
var ChnlHelper = new List<Tuple<int, WpfPlot, int?>>();
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(0, WpfPlot1, tp.TestPointNr -1 ));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(1, WpfPlot1, tp.TestPointNr -1));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(2, WpfPlot1, tp.TestPointNr -1 ));
ChnlHelper.Add(new Tuple<int, WpfPlot, int?>(3, WpfPlot1, tp.TestPointNr -1));
Plot(ChnlHelper);
}
}
}
}

View File

@ -8,12 +8,81 @@ using Xylem.Common.Metrology.Measurements;
namespace CordoPlot
{
public class PlotCalibrationRecord : CalibrationRecord
{
public PlotCalibrationRecord(CalibrationRecord c, int linenr)
{
base.AccuVolumeRaw = c.AccuVolumeRaw;
base.AmplitudeDownV = c.AmplitudeDownV;
base.AmplitudeUpV = c.AmplitudeUpV;
base.Channel = c.Channel;
base.Crc = c.Crc;
base.DecodedTime = c.DecodedTime;
base.DeltaTimeOfFlightS = c.DeltaTimeOfFlightS;
base.DeltaVolumeQm = c.DeltaVolumeQm;
base.DeltaVolumeRaw = c.DeltaVolumeRaw;
base.FlowRateCmPh = c.FlowRateCmPh;
base.ForwardVolumeCm = c.ForwardVolumeCm;
base.IsValid = c.IsValid;
base.NegativeReverseVolumeCm = c.NegativeReverseVolumeCm;
base.OverflowTimeS = c.OverflowTimeS;
base.OverflowVolumeCm = c.OverflowVolumeCm;
base.PulseWidthRatioDown = c.PulseWidthRatioDown;
base.PulseWidthRatioUp = c.PulseWidthRatioUp;
base.RawDeltaTimeOfFlight = c.RawDeltaTimeOfFlight;
base.RawTotalTimeOfFlight = c.RawTotalTimeOfFlight;
base.ReceivedTime = c.ReceivedTime;
base.SampleIntervalS = c.SampleIntervalS;
base.SyncMarkRecord = c.SyncMarkRecord;
base.TemperatureDegC = c.TemperatureDegC;
base.TemperaturePowFactor = c.TemperaturePowFactor;
base.TemperatureRaw = c.TemperatureRaw;
base.TimeS = c.TimeS;
base.TotalTimeOfFlightS = c.TotalTimeOfFlightS;
base.Validation = c.Validation;
base.VolumeCm = c.VolumeCm;
base.VolumeFactorRawToQm = c.VolumeFactorRawToQm;
base.VolumeScaleRawPerMl = c.VolumeScaleRawPerMl;
LineNummer = linenr;
}
public int LineNummer { get; set; }
}
public class PlotFlowTestRecord : FlowTestRecord
{
public PlotFlowTestRecord(FlowTestRecord c , int linenr)
{
base.Channel = 0;
base.Crc = c.Crc;
base.DecodedTime = c.DecodedTime;
base.FlowRateCmPh = c.FlowRateCmPh;
base.ForwardVolumeCm = c.ForwardVolumeCm;
base.IsValid = c.IsValid;
base.NegativeReverseVolumeCm = c.NegativeReverseVolumeCm;
base.OverflowTimeS = c.OverflowTimeS;
base.OverflowVolumeCm = c.OverflowVolumeCm;
base.ReceivedTime = c.ReceivedTime;
base.SyncMarkRecord = c.SyncMarkRecord;
base.TimeS = c.TimeS;
base.VolumeCm = c.VolumeCm;
LineNummer = linenr;
}
public int LineNummer { get; set; }
}
public class PlotResult
{
public List<double> VolumeLine = new List<double>();
public List<double> ScaleLine = new List<double>();
public List<double> GP30Erros = new List<double>();
public List<double> TestMarks = new List<double>();
public List<double> TofLine = new List<double>();
public List<double> AmplitudeUpVLine = new List<double>();
public List<double> AmplitudeDownVLine = new List<double>();
public Color Color { get; internal set; }
@ -56,12 +125,14 @@ namespace CordoPlot
var CurrentTestPoint = 0;
var CurrentChnl = -1;
var testPointLocked = false;
//14787
foreach (var allChnlItems in this.ListOfRecords)
{
var intiVol = 0.0;
CurrentChnl = CurrentChnl + 1;//29586
CurrentTestPoint = 0;
testPointLocked = false;
foreach (var item in allChnlItems)
{
@ -99,9 +170,16 @@ namespace CordoPlot
var results = testPointResults.Where(t => t.Chnl == Chnl && (!TestNr.HasValue || t.TestNr == TestNr.Value));
List<double> VolumeLine = new List<double>();
double LastVolOrig = 0;
List<double> ScaleLine = new List<double>();
List<double> GP30Erros = new List<double>();
List<double> TestMarks = new List<double>();
List<double> TofLines = new List<double>();
List<double> AmplitudeUpVLines = new List<double>();
List<double> AmplitudeDownVLines = new List<double>();
var linecounter = 0;
var counter = 0;
var intiVol = 0.0;
@ -115,35 +193,47 @@ namespace CordoPlot
{
TestMarks.Add(line.GetTimeS());
currentTestNr = lines.TestNr;
intiVol = 0.0;
LastVolOrig = line.GetVolumeCm();
}
ScaleLine.Add(line.GetTimeS() + (100000 * currentTestNr));
if (line is CalibrationRecord cal)
ScaleLine.Add(line.GetTimeS());
if (line is PlotCalibrationRecord cal)
{
GP30Erros.Add(cal.Validation);
TofLines.Add(cal.TotalTimeOfFlightS);
AmplitudeUpVLines.Add(cal.AmplitudeUpV);
AmplitudeDownVLines.Add(cal.AmplitudeDownV);
//VolumeLine.Add(cal.LineNummer);
}
else
else if (line is PlotFlowTestRecord disp)
{
GP30Erros.Add(0);
//VolumeLine.Add(disp.LineNummer);
}
if (!VolumeLine.Any())
{
VolumeLine.Add(0);
intiVol = line.GetVolumeCm();
LastVolOrig = line.GetVolumeCm();
intiVol = 0;
}
else
{
var addVol = line.GetVolumeCm() - intiVol;
var addVol = line.GetVolumeCm() - LastVolOrig;
var dutOverflowVolumeCm = line.GetOverflowVolumeCm();
//an overflow is detected when absolute volume difference is higher than 1/2 of the OverflowVolumeCm
if (Math.Abs(addVol - VolumeLine.Last()) > (0.5 * dutOverflowVolumeCm))
if (intiVol != 0 && Math.Abs(addVol) > (0.5 * dutOverflowVolumeCm))
{
//if the overflow has been detected the end volume is higher than the start volume
//indicates the negative flow direction
if (addVol > VolumeLine.Last())
if (addVol < 0)
{
//negative overflow
intiVol -= dutOverflowVolumeCm;
intiVol += dutOverflowVolumeCm;
//LoggerMeasurement.Info($"Slot:{Slot}, Channel: {IntermediateRecord.GetChannel()} - has negative overflow. currentVolumeQm ({currentVolumeQm}) - lastVolumeQm ({lastVolumeQm}). current accuOverflowVolume is {_accuDutOverflowVolumeCm}");
}
else
@ -153,11 +243,10 @@ namespace CordoPlot
//LoggerMeasurement.Info($"Slot:{Slot}, Channel: {IntermediateRecord.GetChannel()} - has positive overflow. currentVolumeQm ({currentVolumeQm}) - lastVolumeQm ({lastVolumeQm}). current accuOverflowVolume is {_accuDutOverflowVolumeCm}");
}
}
addVol = line.GetVolumeCm() - intiVol;
VolumeLine.Add(addVol);
intiVol += addVol;
LastVolOrig = line.GetVolumeCm();
VolumeLine.Add(intiVol);
}
@ -169,7 +258,7 @@ namespace CordoPlot
linecounter = 1 + linecounter;
}
return new PlotResult() { VolumeLine = VolumeLine, ScaleLine = ScaleLine, GP30Erros = GP30Erros, TestMarks = TestMarks };
return new PlotResult() { VolumeLine = VolumeLine, ScaleLine = ScaleLine, GP30Erros = GP30Erros, TestMarks = TestMarks, TofLine = TofLines, AmplitudeUpVLine = AmplitudeUpVLines, AmplitudeDownVLine = AmplitudeDownVLines };
}
}

View File

@ -5,7 +5,7 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D0C8D887-ED52-40AB-A069-90BCE0E801E2}</ProjectGuid>
<OutputType>WinExe</OutputType>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Xylem.Common.Ui.CordonelPreadjustmentUi</RootNamespace>
<AssemblyName>Xylem.Common.Ui.CordonelPreadjustmentUi</AssemblyName>
@ -114,6 +114,8 @@
<PropertyGroup />
<PropertyGroup />
<PropertyGroup />
<PropertyGroup />
<PropertyGroup />
<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

View File

@ -17,6 +17,8 @@ namespace Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters
case MeterSize.DN50:
case MeterSize.DN40:
case MeterSize.US1_5:
case MeterSize.US2:
FlowrateQmH = 40;
DurationS = 120;
break;
@ -25,20 +27,23 @@ namespace Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters
DurationS = 120;
break;
case MeterSize.DN80:
case MeterSize.US3:
FlowrateQmH = 100;
DurationS = 120;
break;
case MeterSize.DN100:
case MeterSize.US4:
FlowrateQmH = 140;
DurationS = 120;
break;
case MeterSize.DN125:
FlowrateQmH = 140;
DurationS = 120;
case MeterSize.US6:
FlowrateQmH = 400;
DurationS = 60;
break;
case MeterSize.DN150:
FlowrateQmH = 200;
DurationS = 120;
FlowrateQmH = 400;
DurationS = 60;
break;
default:
Message = $"Warning no parameter for meter size {meterSize.GetHashCode()} use default!{Environment.NewLine}";

View File

@ -530,21 +530,21 @@ namespace CordonelPreadjustmentUi.Processes.Actions
private Boolean CheckDistance(ProcessProgress pp, Double left, Double right, out String debugMessage, int Slot)
{
Boolean Ok = true;
debugMessage = $"Distance check successful at {Slot}";
debugMessage = $"Distance check successful at {Slot} Left {left} right {right}";
if (left < pp.Setting.AmpTestFirstHitLevelPropMin)
{
Ok = false;
debugMessage = $"Distance check failed at {Slot}";
return Ok;
}
//if (left < pp.Setting.AmpTestFirstHitLevelPropMin)
//{
// Ok = false;
// debugMessage = $"Distance check failed at {Slot}";
// return Ok;
//}
if (right < pp.Setting.AmpTestFirstHitLevelPropMin)
{
Ok = false;
debugMessage = $"Distance check failed at {Slot}";
return Ok;
}
//if (right < pp.Setting.AmpTestFirstHitLevelPropMin)
//{
// Ok = false;
// debugMessage = $"Distance check failed at {Slot}";
// return Ok;
//}
return Ok;
}

View File

@ -86,10 +86,24 @@ namespace CordonelPreadjustmentUi.Processes.Actions
{
meterctl.SetTemperature((decimal)0);
}
pp.RequestTemperatur();
if (pp.Setting.GetTempUsePtOverSps())
{
pp.RequestTemperatur();
}
else
{
pp.RequestTempretureSelection();
}
while (!pp.TempretureSelected)
{
Thread.Sleep(5000);
}
foreach (var meterctl in TempMeterStateCtls)
{
meterctl.SetTemperature((decimal)0);
meterctl.OnTempretureChangedHandler += delegate (Object sender, EventArgsDecimal d)
{
decimal avgTemp = 0;
@ -118,12 +132,7 @@ namespace CordonelPreadjustmentUi.Processes.Actions
listOfProcessTask.Add(new Task<bool>(() =>
{
pp.RequestTempretureSelection();
while (!pp.TempretureSelected)
{
Thread.Sleep(100);
}
if (pp.Setting.GetTempUsePtOverSps() && pp.PushedTestBenchTemp.HasValue)
{
foreach (var updateMeter in MetersToProcess)

View File

@ -0,0 +1,13 @@
Feature: Calculator
![Calculator](https://specflow.org/wp-content/uploads/2020/09/calculator.png)
Simple calculator for adding **two** numbers
Link to a feature: [Calculator](GenesisCore.UnitTest/Features/Calculator.feature)
***Further read***: **[Learn more about how to generate Living Documentation](https://docs.specflow.org/projects/specflow-livingdoc/en/latest/LivingDocGenerator/Generating-Documentation.html)**
@mytag
Scenario: Add two numbers
Given the first number is 50
And the second number is 70
When the two numbers are added
Then the result should be 120

View File

@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="SpecFlow.Plus.LivingDocPlugin" Version="3.9.57" />
<PackageReference Include="SpecFlow.NUnit" Version="3.9.74" />
<PackageReference Include="nunit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
<PackageReference Include="FluentAssertions" Version="6.2.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Drivers\" />
<Folder Include="Hooks\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,58 @@
using TechTalk.SpecFlow;
namespace GenesisCore.UnitTest.Steps
{
[Binding]
public sealed class CalculatorStepDefinitions
{
// For additional details on SpecFlow step definitions see https://go.specflow.org/doc-stepdef
private readonly ScenarioContext _scenarioContext;
public CalculatorStepDefinitions(ScenarioContext scenarioContext)
{
_scenarioContext = scenarioContext;
}
[Given("the first number is (.*)")]
public void GivenTheFirstNumberIs(int number)
{
//TODO: implement arrange (precondition) logic
// For storing and retrieving scenario-specific data see https://go.specflow.org/doc-sharingdata
// To use the multiline text or the table argument of the scenario,
// additional string/Table parameters can be defined on the step definition
// method.
_scenarioContext.Pending();
}
[Given("the second number is (.*)")]
public void GivenTheSecondNumberIs(int number)
{
//TODO: implement arrange (precondition) logic
// For storing and retrieving scenario-specific data see https://go.specflow.org/doc-sharingdata
// To use the multiline text or the table argument of the scenario,
// additional string/Table parameters can be defined on the step definition
// method.
_scenarioContext.Pending();
}
[When("the two numbers are added")]
public void WhenTheTwoNumbersAreAdded()
{
//TODO: implement act (action) logic
_scenarioContext.Pending();
}
[Then("the result should be (.*)")]
public void ThenTheResultShouldBe(int result)
{
//TODO: implement assert (verification) logic
_scenarioContext.Pending();
}
}
}

View File

@ -103,7 +103,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd
{
var url = ServiceUrls.GenesisGetPasswordContainerServiceUrl();
var requestResponse = LocalWebRequest.GetRequestWithError(url + pcbId, out var errorCode, 30000, isRetry: true);
var requestResponse = LocalWebRequest.GetRequestWithError(url + pcbId, out var errorCode, 80000, isRetry: true);
if (errorCode == HttpStatusCode.OK.GetHashCode())
{
passwordContainer = JsonConvert.DeserializeObject<MeterPwdDb>(requestResponse);

View File

@ -1 +1 @@
8fbe991b217e7692af4817ad205b768685aa5a72
c43c40a030005a8f189e6179faf40a6d42bfef5c

View File

@ -167,13 +167,13 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
return MeterSize.US3;
case 4:
return MeterSize.US4;
case 5:
return MeterSize.US6;
case 6:
return MeterSize.US8;
case 7:
return MeterSize.US10;
return MeterSize.US6;
case 8:
return MeterSize.US8;
case 10:
return MeterSize.US10;
case 12:
return MeterSize.US12;
case 38:

View File

@ -24,7 +24,7 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
using (var dataAccess = new SqlDataAccess(connectionString))
{
var sb = new StringBuilder();
sb.AppendLine($" SELECT distinct[MapPcbIdToSerialNumber_SerialNumber], mapOrder.CordonelPressureTest_FertigungsAuftragsNr ");
@ -59,12 +59,12 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
ret.Add(new ProgrammingParameters("SENSUSRADIO_EncryptionKey", radioParams.EncryptionKey.ToArray()));
if (radioParams.PowerLevel > 0 && radioParams.PowerLevelOption > 0 && radioParams.ImpedanceCodeNew > 0 && radioParams.ImpedanceCodeOption > 0)
{
ret.Add(new ProgrammingParameters("SENSUSRADIO_PowerLevel", BitConverter.GetBytes(radioParams.PowerLevel).Reverse().ToArray()));
ret.Add(new ProgrammingParameters("SENSUSRADIO_PowerLevelOption", BitConverter.GetBytes(radioParams.PowerLevelOption).Reverse().ToArray()));
ret.Add(new ProgrammingParameters("SENSUSRADIO_PowerLevelOption", BitConverter.GetBytes(radioParams.PowerLevelOption).Reverse().ToArray()));
ret.Add(new ProgrammingParameters("SENSUSRADIO_ImpedanceCodeNew", BitConverter.GetBytes(radioParams.ImpedanceCodeNew).Reverse().ToArray()));
ret.Add(new ProgrammingParameters("SENSUSRADIO_ImpedanceCodeOption", BitConverter.GetBytes(radioParams.ImpedanceCodeOption).Reverse().ToArray()));
}
@ -132,7 +132,7 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
foreach (DataRow row in mapData.Rows)
{
ret.Add(new ProgrammingParameters(row["RegisterName"].ToString(), RegisterConverter.ValueToByteArray(Convert.ToInt32(row["RegisterValue"]))));
ret.Add(new ProgrammingParameters(row["RegisterName"].ToString(), RegisterConverter.ValueToByteArray(Convert.ToInt32(row["RegisterValue"]))));
}
}
var ident = "GNS";
@ -141,19 +141,18 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
ident += vakoData.KeyValues.First(k => k.Key == "Nennweite").Charcode;
}
var retStr = LocalWebRequest.GetRequest($"http://sla12iis01/csdcore/csdservice/getstampings?CsdIdent={csdIdent}&GroupId=1&ProductIdent={ident}&ProductDn={rawVako.Dn}&ShowOnlyValidStampings=0", 8000);
var retListRealCsd = JsonConvert.DeserializeObject<List<CsdParameterResult>>(retStr);
if (retListRealCsd != null && retListRealCsd.Any())
{
foreach (var csdItemToConvert in retListRealCsd)
{
if (csdItemToConvert.ValueText.Contains("-"))
{
ret.Add(new ProgrammingParameters(csdItemToConvert.Name, ByteStyler.Parse(csdItemToConvert.ValueText, false), ProgrammingSource.Csd));
}
ret.Add(new ProgrammingParameters(csdItemToConvert.Name, ByteStyler.Parse(csdItemToConvert.ValueText, false), ProgrammingSource.Csd));
}
}
@ -173,7 +172,7 @@ namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
var ret = new List<ProgrammingParameters>();
Int32 orderNr = 3215223;
var rawVako = VakoDbAdapter.GetRawVako(connectionString, orderNr);
var rawMapping = VakoDbAdapter.GetVakoMapping(connectionString, rawVako.Type);
var vakoData = VakoParser.Parse(rawVako, rawMapping);

View File

@ -34,13 +34,13 @@ namespace Xylem.Common.Logic.ProductionOrderCore
/// <summary>
/// The register name
/// </summary>
public String RegisterName { get; }
public String RegisterName { get; set; }
/// <summary>
/// The register value converted to raw bytes by register converter
/// </summary>
public Byte[] RegisterValue { get; }
public Byte[] RegisterValue { get; set; }
public ProgrammingSource Source { get; }
public ProgrammingSource Source { get; set; }
}
}

View File

@ -1,28 +1,52 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace Xylem.Common.Logic.ProductionOrderCore.TestResults
{
public class TestResults
public class TestResults : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public List<TestPointDetail> Details;
public List<TestPoint> TestPointsMain;
public List<ChnlTestPoint> TestPointsChannels;
public String MeterType;
public Int32 Serialnr { get; set; }
public Int32 TestRunNr { get; set; }
public Int32 TestBenchNr { get; set; }
public DateTime Date { get; set; }
public Int32 MeterSize { get; set; }
public Double AirTempC { get; set; }
public Double AirPressure { get; set; }
public Double AirHumanity { get; set; }
public Double WaterTempC { get; set; }
public Int32 TotalMeters { get; set; }
public String Remark { get; set; }
public Int32 Serialnr { get { return _Serialnr; } set { if (value != _Serialnr) { _Serialnr = value; OnPropertyChanged("Serialnr"); } } }
public Int32 TestRunNr { get { return _TestRunNr; } set { if (value != _TestRunNr) { _TestRunNr = value; OnPropertyChanged("TestRunNr"); } } }
public Int32 TestBenchNr { get { return _TestBenchNr; } set { if (value != _TestBenchNr) { _TestBenchNr = value; OnPropertyChanged("TestBenchNr"); } } }
public DateTime Date { get { return _Date; } set { if (value != _Date) { _Date = value; OnPropertyChanged("Date"); } } }
public Int32 MeterSize { get { return _MeterSize; } set { if (value != _MeterSize) { _MeterSize = value; OnPropertyChanged("MeterSize"); } } }
public Double AirTempC { get { return _AirTempC; } set { if (value != _AirTempC) { _AirTempC = value; OnPropertyChanged("AirTempC"); } } }
public Double AirPressure { get { return _AirPressure; } set { if (value != _AirPressure) { _AirPressure = value; OnPropertyChanged("AirPressure"); } } }
public Double AirHumanity { get { return _AirHumanity; } set { if (value != _AirHumanity) { _AirHumanity = value; OnPropertyChanged("AirHumanity"); } } }
public Double WaterTempC { get { return _WaterTempC; } set { if (value != _WaterTempC) { _WaterTempC = value; OnPropertyChanged("WaterTempC"); } } }
public Int32 TotalMeters { get { return _TotalMeters; } set { if (value != _TotalMeters) { _TotalMeters = value; OnPropertyChanged("TotalMeters"); } } }
public String Remark { get { return _Remark; } set { if (value != _Remark) { _Remark = value; OnPropertyChanged("Remark"); } } }
private Int32 _Serialnr;
private Int32 _TestRunNr ;
private Int32 _TestBenchNr ;
private DateTime _Date ;
private Int32 _MeterSize ;
private Double _AirTempC ;
private Double _AirPressure ;
private Double _AirHumanity ;
private Double _WaterTempC ;
private Int32 _TotalMeters ;
private String _Remark ;
}
public class TestPoint
{

View File

@ -8,7 +8,7 @@
mc:Ignorable="d"
Title="FinalTest" MinHeight="500" MinWidth="600" Height="638" Width="800" Initialized="Window_Initialized" Closing="Window_Closing" PreviewKeyDown="Window_PreviewKeyDown">
<DockPanel HorizontalAlignment="Stretch" Width="800" Height="600" VerticalAlignment="Top" Margin="0,0,2,0">
<ToolBarTray DockPanel.Dock="Top" Visibility="Collapsed">
<ToolBarTray DockPanel.Dock="Top" Visibility="Visible">
<ToolBar>
<Label>Slot:</Label>
<ComboBox Name="cbxSlotBox" Margin="0,5,0,0" VerticalAlignment="Top" SelectionChanged="CbxSlotBox_SelectionChanged" />

View File

@ -269,8 +269,7 @@ namespace ProductionUiCordonel
}
var url = $"{ServiceUrls.MarriageServiceUrl()}GetSerialNumberAndOrderNumber?PcbId={pcbID}&withRadioAdress=true";
Task.Run(() =>
{
try
{
var responseJson = LocalWebRequest.GetRequest(url);
@ -306,10 +305,12 @@ namespace ProductionUiCordonel
MessageBox.Show(ex.Message);
}
});
}
private Boolean Detect(Boolean IgnorErrors, Int32 slot)
{
slot = 1;
if (!detectIsLocked)
{
LastMsg = "Start Detect";
@ -410,10 +411,6 @@ namespace ProductionUiCordonel
var connectProcess = new ProductionProcessConnect(CurrentGenesisMeter);
pc.Processes.Add(connectProcess); //[x] [x] [x]
if (RadioAddress != 0)
{
RadioAddress = 1;
}
orderBarcode = new ProductionProcessCheckOrderNumber(0);

View File

@ -40,6 +40,25 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
{
//clear
}
private void setTxt(string msg, bool log, bool msgbox)
{
if (log)
{
Meter.WriteLog(msg);
}
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
if (msgbox)
{
UserControl.MessageBox(msg);
}
UserControl.lblText.Content = msg;
}
));
}
private void doStartProcessLoop()
@ -87,23 +106,14 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
if (!HyState.HasValue || !HyState.Value)
{
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.lblText.Content = "Zähler nicht erfolgreich geprüft";
}
));
setTxt("Zähler nicht erfolgreich geprüft",true,true);
currentProcessState = ProductionProcessState.Error;
}
if (!preState.HasValue || !preState.Value)
{
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.lblText.Content = "Zähler nicht erfolgreich vorbehandelt";
}
));
setTxt("Zähler nicht erfolgreich vorbehandelt", true, true);
currentProcessState = ProductionProcessState.Error;
}
@ -114,14 +124,9 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
// this calculates all life time values
if (!GenesisStatusHandler.BuildLifeTimeInformation(Meter, genesisStatus))
{
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.lblText.Content = "Batterie nicht lesbar";
}
));
Meter.WriteLog("Batterie nicht lesbar");
setTxt("Batterie nicht lesbar", true, true);
break;
}
@ -138,21 +143,31 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
{
if (Meter.Region == "NA")
{
//currentProcessState = ProductionProcessState.Error;
if (
Meter.PcbId == "235130036" ||
Meter.PcbId == "235130211" ||
Meter.PcbId == "235130121" ||
Meter.PcbId == "235130122" ||
Meter.PcbId == "235130353" ||
Meter.PcbId == "235130447" ||
Meter.PcbId == "235130112" ||
Meter.PcbId == "235130582" ||
Meter.PcbId == "235130237")
{
//currentProcessState = ProductionProcessState.Error;
}
else
{
//currentProcessState = ProductionProcessState.Error;
}
}
//
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.MessageBox($"UNT Limit überschritten Limit{genesisStatus.UNTLimit} vs {genesisStatus.DrainedBatteryLoad_uAs}");
UserControl.lblText.Content = $"UNT Limit überschritten Limit{genesisStatus.UNTLimit} vs {genesisStatus.DrainedBatteryLoad_uAs}";
}
));
//
setTxt($"UNT Limit überschritten Limit{genesisStatus.UNTLimit} vs {genesisStatus.DrainedBatteryLoad_uAs}", true, true);
Meter.WriteLog($"UNT Limit überschritten Limit{genesisStatus.UNTLimit} vs {genesisStatus.DrainedBatteryLoad_uAs}");
}
if (genesisStatus.RemainingLifeTimeYears < 20)
@ -160,14 +175,8 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
if (genesisStatus.DrainedBatteryLoadPercent > 9)
{
currentProcessState = ProductionProcessState.Error;
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.MessageBox($"EMEA Limit überschritten Limit 8% vs {genesisStatus.DrainedBatteryLoadPercent}");
UserControl.lblText.Content = "Batterie über 10% entladen";
}
));
setTxt("EMEA Limit überschritten Limit 8% vs {genesisStatus.DrainedBatteryLoadPercent}", true, true);
Meter.WriteLog("Batterie über 10% entladen");
}
@ -190,33 +199,29 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
currentProcessState = ProductionProcessState.Error;
setTxt("Lut not correct", true, true);
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.lblText.Content = "Lut not correct";
}
));
}
var meterFWApp = Meter.MeterAppListVersion.First(a => a.AppId == 24);
if (string.IsNullOrEmpty(res[9]) || !Meter.InstalledFwVersion.HasValue || Meter.InstalledFwVersion.Value != uint.Parse(res[9]))
{
currentProcessState = ProductionProcessState.Error;
if (!string.IsNullOrEmpty(res[9]) && Meter.InstalledFwVersion.HasValue && uint.Parse(res[9]) == 8194 && Meter.InstalledFwVersion.Value == 8198)
{
UserControl.MessageBox($"Achtung FW 2.0.06");
}
else
{
currentProcessState = ProductionProcessState.Error;
setTxt($"FW not correct Meter has {meterFWApp.Version} and should have {uint.Parse(res[9])}", true, true);
}
UserControl.lblText.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
UserControl.lblText.Content = $"FW not correct Meter has {meterFWApp.Version} and should have {uint.Parse(res[9])}";
}
));
}
if (currentProcessState != ProductionProcessState.Error)
{
currentProcessState = ProductionProcessState.Done;

View File

@ -18,7 +18,9 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
Abort
}
public Boolean DialogIsDone { get; }
public String PcbSerialNumber { get; private set; }
public String PcbSerialNumber {
get;
private set; }
public String AltRadio { get; }
@ -70,7 +72,7 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
private void UserControl_KeyDown(Object sender, String input)
{
var a = input;
PcbSerialNumber = Meter.SerialNumber;
//PcbSerialNumber = Meter.SerialNumber;
UserControl.txtHiddenInput.Text = "";
if (a.Trim().Contains(PcbSerialNumber.Trim()))
{
@ -91,6 +93,7 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
}
else
{
StepMismatch($"Falsche oder fehlerhafter Scan! {Environment.NewLine} Dieser Zähler müsste die ({PcbSerialNumber}) haben. gescannt wurde {a}");
}
}
@ -104,7 +107,7 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
public override void StartProcess()
{
PcbSerialNumber = Meter.SerialNumber;
//PcbSerialNumber = Meter.SerialNumber;
UserControl.SetDesc($"Bitte den Deckel des Zählers Scannern{Environment.NewLine} Die Seriennummer muss abgeglichen werden.");
UserControl.SetFocusMe();
UserControl.BarcodeInput += UserControl_KeyDown;

View File

@ -64,18 +64,18 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
{
var url = ServiceUrls.GenesisGetPasswordContainerServiceUrl();
//var url = ServiceUrls.GenesisGetPasswordContainerServiceUrl();
var requestResponse = LocalWebRequest.GetRequestWithError(url + Meter.PcbId, out var errorCode, 30000, isRetry: true);
if (errorCode == System.Net.HttpStatusCode.OK.GetHashCode())
{
var passwordContainer = JsonConvert.DeserializeObject<Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd.MeterPwdDb>(requestResponse);
if (Meter.Login(System.Text.Encoding.UTF8.GetString(passwordContainer.ListOfPasswords[7])))
{
Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd.MeterPwdHandlerDb.SetPwdFromSkeletonToLvl8inDd(Meter.PcbId, passwordContainer);
}
//var requestResponse = LocalWebRequest.GetRequestWithError(url + Meter.PcbId, out var errorCode, 30000, isRetry: true);
//if (errorCode == System.Net.HttpStatusCode.OK.GetHashCode())
//{
// var passwordContainer = JsonConvert.DeserializeObject<Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd.MeterPwdDb>(requestResponse);
// if (Meter.Login(System.Text.Encoding.UTF8.GetString(passwordContainer.ListOfPasswords[7])))
// {
// Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd.MeterPwdHandlerDb.SetPwdFromSkeletonToLvl8inDd(Meter.PcbId, passwordContainer);
// }
}
//}
}
}

View File

@ -197,9 +197,11 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
overAllResult.Add(_currentGenesis_WriteRegister("PERIODICLOG_ResetCounter",
(new Byte[] { 0x00, 0x00, 0x00, 0x00 }).Reverse().ToArray()));
overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
(new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
}
overAllResult.Add(_currentGenesis_WriteRegister("GENESISFLOW_SealDisplay",
(new Byte[] { 0x00, 0x00, 0x00, 0x01 }).Reverse().ToArray(), true, true));
var ret = true;

View File

@ -80,6 +80,11 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
if (ret)
{
ret = WriteAndVerifyPasswordFileToMeter();
if (!ret)
{
Meter.WriteLog("WriteAndVerifyPasswordFileToMeter failed!");
}
}
updateImage(_userControl.WriteToMeter, ret);
@ -90,6 +95,10 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
{
Meter.Logout();
ret = Meter.Login(Encoding.UTF8.GetString(_pwdContainer.ListOfPasswords.Last()));
if (!ret)
{
Meter.WriteLog("Login after pw failed!");
}
}
//Password in Production DB can be updated (overwrite Skeleton-key in Password column with

View File

@ -124,7 +124,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
return await Task.Run(() =>
{
var builder = new StringBuilder();
var ret = OrderProgrammingParameters.GetProgrammingParametersFixNa( GlobalConfig.ConnectionString.Value);
var ret = OrderProgrammingParameters.GetProgrammingParametersFixNa(GlobalConfig.ConnectionString.Value);
foreach (var r in ret.Where(r => r.RegisterName == "SENSUSRADIO_EncryptionKey"))
{
foreach (var t in r.RegisterValue)
@ -473,22 +473,19 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
foreach (var item in dt.Select())
{
try
{
var jsonString = item["JSON"].ToString();
var jsonString = item["JSON"].ToString();
var jResults = JsonConvert.DeserializeObject<JToken>(jsonString);
if (DateTimeOffset.TryParse(jResults["JsonObject"]["StartDT"].ToString(), out ret))
{
return ret;
}
}
catch (Exception)
var jResults = JsonConvert.DeserializeObject<JToken>(jsonString);
if (DateTimeOffset.TryParse(jResults["JsonObject"]["StartDT"].ToString(), out ret))
{
return ret;
}
}
return DateTimeOffset.MinValue;
}));
}
@ -993,21 +990,21 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
//}
[Route("SetMeterEOLState"), HttpPost]
public async Task<HttpResponseMessage> SetMeterEOLState(int PcbID,int OrderNumber)
public async Task<HttpResponseMessage> SetMeterEOLState(int PcbID, int OrderNumber)
{
try
{
var sb = new StringBuilder();
sb.AppendLine($" UPDATE [dbo].[CordonelEol] ");
sb.AppendLine($" SET ");
sb.AppendLine($" [CordonelEolPcbId] = {PcbID} ");
sb.AppendLine($" ,[CordonelEolOrderNumber] = {OrderNumber} ");
sb.AppendLine($" ,[CordonelEolDate] = CURRENT_TIMESTAMP ");
sb.AppendLine($" ,[CordonelEolPublishAction] = null ");
sb.AppendLine($" ,[CordonelEolSAPFeedback] = null ");
sb.AppendLine($" WHERE [CordonelEolPcbId] = {PcbID} ");
sb.AppendLine($" [CordonelEolPcbId] = {PcbID} ");
sb.AppendLine($" ,[CordonelEolOrderNumber] = {OrderNumber} ");
sb.AppendLine($" ,[CordonelEolDate] = CURRENT_TIMESTAMP ");
sb.AppendLine($" ,[CordonelEolPublishAction] = null ");
sb.AppendLine($" ,[CordonelEolSAPFeedback] = null ");
sb.AppendLine($" WHERE [CordonelEolPcbId] = {PcbID} ");
sb.AppendLine($" and [CordonelEolOrderNumber] = {OrderNumber} ");
sb.AppendLine($"IF @@ROWCOUNT = 0 ");
sb.AppendLine($" BEGIN ");
@ -1024,7 +1021,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
sb.AppendLine($" ,null ");
sb.AppendLine($" ,null) ");
sb.AppendLine($" END ");
using (var dataacces = new SqlDataAccess(GlobalConfig.ConnectionString.Value))
{

View File

@ -353,7 +353,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
//var Url = $"{ServiceUrls.KeyServerCustom()}devices
var Url = $"https://nodes.sms-esaap.com:8081/api/v3/custom/keysetkeys?orderNumber={orderNumber}&radioAdress={radioAdress}";
//Url = $"https://nodes.sms-esaap.com:8081/api/v3/custom/keysetkeys?setId={orderNumber}&radioAdress={radioAdress}";//
//Url = $"https://nodes.sms-esaap.com:8081/api/v3/custom/keysetkeys?setId={da948379-2aa1-4a47-911f-8031a20ecebf}&radioAdress={radioAdress}";//
var header = new Dictionary<String, String>();
header.Add("Cache-Control", "no-cache");
@ -660,100 +660,100 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
var lst = new List<Tuple<int, long, int>>();
lst.Add(new Tuple<int, long, int>(22735455, 10402001195, 3187517));
lst.Add(new Tuple<int, long, int>(22735458, 10402001198, 3187517));
lst.Add(new Tuple<int, long, int>(22735459, 10402001199, 3187517));
lst.Add(new Tuple<int, long, int>(22750101, 10402001361, 3190243));
lst.Add(new Tuple<int, long, int>(22750102, 10402001362, 3190243));
lst.Add(new Tuple<int, long, int>(22750103, 10402001363, 3190243));
lst.Add(new Tuple<int, long, int>(22773935, 10402003482, 3194465));
lst.Add(new Tuple<int, long, int>(22773936, 10402003483, 3194465));
lst.Add(new Tuple<int, long, int>(22773937, 10402003484, 3194465));
lst.Add(new Tuple<int, long, int>(22773939, 10402003486, 3194465));
lst.Add(new Tuple<int, long, int>(22773940, 10402003487, 3194465));
lst.Add(new Tuple<int, long, int>(22773941, 10402003488, 3194465));
lst.Add(new Tuple<int, long, int>(22773942, 10402003489, 3194465));
lst.Add(new Tuple<int, long, int>(22773943, 10402003490, 3194465));
lst.Add(new Tuple<int, long, int>(23719324, 10402004169, 3205719));
lst.Add(new Tuple<int, long, int>(23719325, 10402004170, 3205719));
lst.Add(new Tuple<int, long, int>(23719326, 10402004171, 3205719));
lst.Add(new Tuple<int, long, int>(23719327, 10402004172, 3205719));
lst.Add(new Tuple<int, long, int>(23719328, 10402004173, 3205719));
lst.Add(new Tuple<int, long, int>(23719329, 10402004174, 3205719));
lst.Add(new Tuple<int, long, int>(23719353, 10402004198, 3205720));
lst.Add(new Tuple<int, long, int>(23719355, 10402004200, 3205720));
lst.Add(new Tuple<int, long, int>(23719361, 10402004206, 3205720));
lst.Add(new Tuple<int, long, int>(23719365, 10402004210, 3205721));
lst.Add(new Tuple<int, long, int>(23719366, 10402004211, 3205721));
lst.Add(new Tuple<int, long, int>(23719367, 10402004212, 3205721));
lst.Add(new Tuple<int, long, int>(23719368, 10402004213, 3205721));
lst.Add(new Tuple<int, long, int>(23719369, 10402004214, 3205721));
lst.Add(new Tuple<int, long, int>(23719370, 10402004215, 3205721));
lst.Add(new Tuple<int, long, int>(23719374, 10402004219, 3205722));
lst.Add(new Tuple<int, long, int>(23719375, 10402004220, 3205722));
lst.Add(new Tuple<int, long, int>(23719376, 10402004221, 3205722));
lst.Add(new Tuple<int, long, int>(23719377, 10402004222, 3205722));
lst.Add(new Tuple<int, long, int>(23719378, 10402004223, 3205722));
lst.Add(new Tuple<int, long, int>(23719379, 10402004224, 3205722));
lst.Add(new Tuple<int, long, int>(23719380, 10402004225, 3205722));
lst.Add(new Tuple<int, long, int>(23719381, 10402004226, 3205722));
lst.Add(new Tuple<int, long, int>(23719382, 10402004227, 3205722));
lst.Add(new Tuple<int, long, int>(23719383, 10402004228, 3205722));
lst.Add(new Tuple<int, long, int>(23719384, 10402004229, 3205722));
lst.Add(new Tuple<int, long, int>(23719385, 10402004230, 3205722));
lst.Add(new Tuple<int, long, int>(23719387, 10402004232, 3205722));
lst.Add(new Tuple<int, long, int>(23719388, 10402004233, 3205722));
lst.Add(new Tuple<int, long, int>(23719389, 10402004234, 3205722));
lst.Add(new Tuple<int, long, int>(23719390, 10402004235, 3205722));
lst.Add(new Tuple<int, long, int>(23719391, 10402004236, 3205722));
lst.Add(new Tuple<int, long, int>(23719392, 10402004237, 3205722));
lst.Add(new Tuple<int, long, int>(23719393, 10402004238, 3205722));
lst.Add(new Tuple<int, long, int>(23719394, 10402004239, 3205722));
lst.Add(new Tuple<int, long, int>(23719395, 10402004240, 3205722));
lst.Add(new Tuple<int, long, int>(23719396, 10402004241, 3205722));
lst.Add(new Tuple<int, long, int>(23719465, 10402004264, 3205759));
lst.Add(new Tuple<int, long, int>(23719466, 10402004265, 3205759));
lst.Add(new Tuple<int, long, int>(23719467, 10402004266, 3205759));
lst.Add(new Tuple<int, long, int>(23719468, 10402004267, 3205759));
lst.Add(new Tuple<int, long, int>(23719469, 10402004268, 3205759));
lst.Add(new Tuple<int, long, int>(23719470, 10402004269, 3205759));
lst.Add(new Tuple<int, long, int>(23719471, 10402004270, 3205759));
lst.Add(new Tuple<int, long, int>(23719472, 10402004271, 3205759));
lst.Add(new Tuple<int, long, int>(23719473, 10402004272, 3205759));
lst.Add(new Tuple<int, long, int>(23719479, 10402004278, 3205759));
lst.Add(new Tuple<int, long, int>(23719480, 10402004279, 3205759));
lst.Add(new Tuple<int, long, int>(23719481, 10402004280, 3205759));
lst.Add(new Tuple<int, long, int>(23719482, 10402004281, 3205759));
lst.Add(new Tuple<int, long, int>(23720650, 10402004369, 3206400));
lst.Add(new Tuple<int, long, int>(23720651, 10402004370, 3206401));
lst.Add(new Tuple<int, long, int>(23720744, 10402004377, 3206443));
lst.Add(new Tuple<int, long, int>(23749514, 10402004737, 3210028));
lst.Add(new Tuple<int, long, int>(23749516, 10402004739, 3210028));
lst.Add(new Tuple<int, long, int>(23749517, 10402004740, 3210029));
lst.Add(new Tuple<int, long, int>(23749518, 10402004741, 3210029));
lst.Add(new Tuple<int, long, int>(23749519, 10402004742, 3210029));
lst.Add(new Tuple<int, long, int>(23749520, 10402004743, 3210029));
lst.Add(new Tuple<int, long, int>(23749521, 10402004744, 3210029));
lst.Add(new Tuple<int, long, int>(23749523, 10402004745, 3210033));
lst.Add(new Tuple<int, long, int>(23749524, 10402004746, 3210033));
lst.Add(new Tuple<int, long, int>(23749525, 10402004747, 3210033));
lst.Add(new Tuple<int, long, int>(23749526, 10402004748, 3210033));
lst.Add(new Tuple<int, long, int>(23749527, 10402004749, 3210033));
lst.Add(new Tuple<int, long, int>(23749528, 10402004750, 3210033));
lst.Add(new Tuple<int, long, int>(23749529, 10402004751, 3210033));
lst.Add(new Tuple<int, long, int>(23749530, 10402004752, 3210033));
lst.Add(new Tuple<int, long, int>(23749531, 10402004753, 3210033));
lst.Add(new Tuple<int, long, int>(23749532, 10402004754, 3210033));
lst.Add(new Tuple<int, long, int>(23766896, 10402005092, 3213958));
lst.Add(new Tuple<int, long, int>(23766897, 10402005093, 3213958));
lst.Add(new Tuple<int, long, int>(23766898, 10402005094, 3213958));
lst.Add(new Tuple<int, long, int>(23766899, 10402005095, 3213958));
lst.Add(new Tuple<int, long, int>(23766900, 10402005096, 3213958));
lst.Add(new Tuple<int, long, int>(23766901, 10402005097, 3213958));
lst.Add(new Tuple<int, long, int>(23766902, 10402005098, 3213958));
lst.Add(new Tuple<int, long, int>(23766903, 10402005099, 3213958));
lst.Add(new Tuple<int, long, int>(23766904, 10402005100, 3213958));
lst.Add(new Tuple<int, long, int>(23766905, 10402005101, 3213958));
//lst.Add(new Tuple<int, long, int>(22735455, 10402001195, 3187517));
//lst.Add(new Tuple<int, long, int>(22735458, 10402001198, 3187517));
//lst.Add(new Tuple<int, long, int>(22735459, 10402001199, 3187517));
//lst.Add(new Tuple<int, long, int>(22750101, 10402001361, 3190243));
//lst.Add(new Tuple<int, long, int>(22750102, 10402001362, 3190243));
//lst.Add(new Tuple<int, long, int>(22750103, 10402001363, 3190243));
//lst.Add(new Tuple<int, long, int>(22773935, 10402003482, 3194465));
//lst.Add(new Tuple<int, long, int>(22773936, 10402003483, 3194465));
//lst.Add(new Tuple<int, long, int>(22773937, 10402003484, 3194465));
//lst.Add(new Tuple<int, long, int>(22773939, 10402003486, 3194465));
//lst.Add(new Tuple<int, long, int>(22773940, 10402003487, 3194465));
//lst.Add(new Tuple<int, long, int>(22773941, 10402003488, 3194465));
//lst.Add(new Tuple<int, long, int>(22773942, 10402003489, 3194465));
//lst.Add(new Tuple<int, long, int>(22773943, 10402003490, 3194465));
//lst.Add(new Tuple<int, long, int>(23719324, 10402004169, 3205719));
//lst.Add(new Tuple<int, long, int>(23719325, 10402004170, 3205719));
//lst.Add(new Tuple<int, long, int>(23719326, 10402004171, 3205719));
//lst.Add(new Tuple<int, long, int>(23719327, 10402004172, 3205719));
//lst.Add(new Tuple<int, long, int>(23719328, 10402004173, 3205719));
//lst.Add(new Tuple<int, long, int>(23719329, 10402004174, 3205719));
//lst.Add(new Tuple<int, long, int>(23719353, 10402004198, 3205720));
//lst.Add(new Tuple<int, long, int>(23719355, 10402004200, 3205720));
//lst.Add(new Tuple<int, long, int>(23719361, 10402004206, 3205720));
//lst.Add(new Tuple<int, long, int>(23719365, 10402004210, 3205721));
//lst.Add(new Tuple<int, long, int>(23719366, 10402004211, 3205721));
//lst.Add(new Tuple<int, long, int>(23719367, 10402004212, 3205721));
//lst.Add(new Tuple<int, long, int>(23719368, 10402004213, 3205721));
//lst.Add(new Tuple<int, long, int>(23719369, 10402004214, 3205721));
//lst.Add(new Tuple<int, long, int>(23719370, 10402004215, 3205721));
//lst.Add(new Tuple<int, long, int>(23719374, 10402004219, 3205722));
//lst.Add(new Tuple<int, long, int>(23719375, 10402004220, 3205722));
//lst.Add(new Tuple<int, long, int>(23719376, 10402004221, 3205722));
//lst.Add(new Tuple<int, long, int>(23719377, 10402004222, 3205722));
//lst.Add(new Tuple<int, long, int>(23719378, 10402004223, 3205722));
//lst.Add(new Tuple<int, long, int>(23719379, 10402004224, 3205722));
//lst.Add(new Tuple<int, long, int>(23719380, 10402004225, 3205722));
//lst.Add(new Tuple<int, long, int>(23719381, 10402004226, 3205722));
//lst.Add(new Tuple<int, long, int>(23719382, 10402004227, 3205722));
//lst.Add(new Tuple<int, long, int>(23719383, 10402004228, 3205722));
//lst.Add(new Tuple<int, long, int>(23719384, 10402004229, 3205722));
//lst.Add(new Tuple<int, long, int>(23719385, 10402004230, 3205722));
//lst.Add(new Tuple<int, long, int>(23719387, 10402004232, 3205722));
//lst.Add(new Tuple<int, long, int>(23719388, 10402004233, 3205722));
//lst.Add(new Tuple<int, long, int>(23719389, 10402004234, 3205722));
//lst.Add(new Tuple<int, long, int>(23719390, 10402004235, 3205722));
//lst.Add(new Tuple<int, long, int>(23719391, 10402004236, 3205722));
//lst.Add(new Tuple<int, long, int>(23719392, 10402004237, 3205722));
//lst.Add(new Tuple<int, long, int>(23719393, 10402004238, 3205722));
//lst.Add(new Tuple<int, long, int>(23719394, 10402004239, 3205722));
//lst.Add(new Tuple<int, long, int>(23719395, 10402004240, 3205722));
//lst.Add(new Tuple<int, long, int>(23719396, 10402004241, 3205722));
//lst.Add(new Tuple<int, long, int>(23719465, 10402004264, 3205759));
//lst.Add(new Tuple<int, long, int>(23719466, 10402004265, 3205759));
//lst.Add(new Tuple<int, long, int>(23719467, 10402004266, 3205759));
//lst.Add(new Tuple<int, long, int>(23719468, 10402004267, 3205759));
//lst.Add(new Tuple<int, long, int>(23719469, 10402004268, 3205759));
//lst.Add(new Tuple<int, long, int>(23719470, 10402004269, 3205759));
//lst.Add(new Tuple<int, long, int>(23719471, 10402004270, 3205759));
//lst.Add(new Tuple<int, long, int>(23719472, 10402004271, 3205759));
//lst.Add(new Tuple<int, long, int>(23719473, 10402004272, 3205759));
//lst.Add(new Tuple<int, long, int>(23719479, 10402004278, 3205759));
//lst.Add(new Tuple<int, long, int>(23719480, 10402004279, 3205759));
//lst.Add(new Tuple<int, long, int>(23719481, 10402004280, 3205759));
//lst.Add(new Tuple<int, long, int>(23719482, 10402004281, 3205759));
//lst.Add(new Tuple<int, long, int>(23720650, 10402004369, 3206400));
//lst.Add(new Tuple<int, long, int>(23720651, 10402004370, 3206401));
//lst.Add(new Tuple<int, long, int>(23720744, 10402004377, 3206443));
//lst.Add(new Tuple<int, long, int>(23749514, 10402004737, 3210028));
//lst.Add(new Tuple<int, long, int>(23749516, 10402004739, 3210028));
//lst.Add(new Tuple<int, long, int>(23749517, 10402004740, 3210029));
//lst.Add(new Tuple<int, long, int>(23749518, 10402004741, 3210029));
//lst.Add(new Tuple<int, long, int>(23749519, 10402004742, 3210029));
//lst.Add(new Tuple<int, long, int>(23749520, 10402004743, 3210029));
//lst.Add(new Tuple<int, long, int>(23749521, 10402004744, 3210029));
//lst.Add(new Tuple<int, long, int>(23749523, 10402004745, 3210033));
//lst.Add(new Tuple<int, long, int>(23749524, 10402004746, 3210033));
//lst.Add(new Tuple<int, long, int>(23749525, 10402004747, 3210033));
//lst.Add(new Tuple<int, long, int>(23749526, 10402004748, 3210033));
//lst.Add(new Tuple<int, long, int>(23749527, 10402004749, 3210033));
//lst.Add(new Tuple<int, long, int>(23749528, 10402004750, 3210033));
//lst.Add(new Tuple<int, long, int>(23749529, 10402004751, 3210033));
//lst.Add(new Tuple<int, long, int>(23749530, 10402004752, 3210033));
//lst.Add(new Tuple<int, long, int>(23749531, 10402004753, 3210033));
//lst.Add(new Tuple<int, long, int>(23749532, 10402004754, 3210033));
//lst.Add(new Tuple<int, long, int>(23766896, 10402005092, 3213958));
//lst.Add(new Tuple<int, long, int>(23766897, 10402005093, 3213958));
//lst.Add(new Tuple<int, long, int>(23766898, 10402005094, 3213958));
//lst.Add(new Tuple<int, long, int>(23766899, 10402005095, 3213958));
//lst.Add(new Tuple<int, long, int>(23766900, 10402005096, 3213958));
//lst.Add(new Tuple<int, long, int>(23766901, 10402005097, 3213958));
//lst.Add(new Tuple<int, long, int>(23766902, 10402005098, 3213958));
//lst.Add(new Tuple<int, long, int>(23766903, 10402005099, 3213958));
//lst.Add(new Tuple<int, long, int>(23766904, 10402005100, 3213958));
//lst.Add(new Tuple<int, long, int>(23766905, 10402005101, 3213958));
var lstResult = new List<String>();

View File

@ -1 +1 @@
1babc7d629fd8c486aff20f4990c117c2e58a68f
65d75c3322f8a137c69963cfdc0cb6f1ffacf62a

View File

@ -224,4 +224,4 @@ namespace XylemCommonUiLegacyGenCtl
bool IsReadyForMesuremnt();
}
}
}

View File

@ -556,7 +556,7 @@ namespace XylemCommonUiLegacyGenCtl
{
return;
}
if (!string.IsNullOrEmpty(meter.PcbId) && meter.PcbId.Length < 6 && meter.Login())
if (!string.IsNullOrEmpty(PcbId) && PcbId.Length > 6 && meter.Login())
{
changeCurrentSlotState(TaskState.LoginDone);