diff --git a/Common/CommonCore.Configuration/ServiceUrls.cs b/Common/CommonCore.Configuration/ServiceUrls.cs
index 1cee286c..3abb956c 100644
--- a/Common/CommonCore.Configuration/ServiceUrls.cs
+++ b/Common/CommonCore.Configuration/ServiceUrls.cs
@@ -420,6 +420,19 @@ namespace Xylem.Common.CommonCore.Configuration
DefaultGetCordonelRequirementInfoUrl;
}
+ ///
+ /// Get all production infos for skip process checks or limits for production like:
+ /// - Battery drained percentage upper limit,
+ /// - Production due date for a special register,
+ /// - Required life time for assembly line,
+ /// - Required life time for shipping line.
+ ///
+ ///
+ public static String GetCordonelRequirementByFANrInfoServiceUrl(string ponr)
+ {
+ return $"http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/cordonel/requirements/pono/{ponr}";
+ }
+
///
/// Get all applications versions installed to a specific Cordonel.
///
diff --git a/Common/CordonelAssemblyLine/CordonelAssemblyLine.csproj b/Common/CordonelAssemblyLine/CordonelAssemblyLine.csproj
index 5aa52c31..4fade0db 100644
--- a/Common/CordonelAssemblyLine/CordonelAssemblyLine.csproj
+++ b/Common/CordonelAssemblyLine/CordonelAssemblyLine.csproj
@@ -230,6 +230,10 @@
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}
WaterMeterRegisters
+
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}
+ LaaPackages.Features.Cordonel
+
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}
Logic.ProductionToProductMapper
diff --git a/Common/CordonelAssemblyLine/Model/PickingModel.cs b/Common/CordonelAssemblyLine/Model/PickingModel.cs
index 731c6b28..d909d012 100644
--- a/Common/CordonelAssemblyLine/Model/PickingModel.cs
+++ b/Common/CordonelAssemblyLine/Model/PickingModel.cs
@@ -1,4 +1,5 @@
-using Logic.ProductionToProductMapper.Cordonel;
+using LaaPackages.Features.Cordonel.Models;
+using Logic.ProductionToProductMapper.Cordonel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -569,10 +570,10 @@ namespace CordonelAssemblyLine.Model
meter.SetProcessState(DisplayCodes.PickingStarted);
var ret = RunCheck(checkAppsIdVersion, frequency, meterSize, pressurePresent, meter);
lblS08Color = _progressWaiting;
+ var sbMSG = new StringBuilder();
+
if (ret)
{
-
-
if (!meter.WriteRegister("POWERMON_BatteryQuantity", 2, true, true))
{
lblS08Text = "1";
@@ -582,55 +583,157 @@ namespace CordonelAssemblyLine.Model
meter.WriteRegister("POWERMON_StoreConfiguration", 1, true);
-
-
-
var genesisStatus = new GenesisStatus();
+ var requirements = new CordonelRequirements();
- // this calculates all life time values
- if (!GenesisStatusHandler.BuildLifeTimeInformation(meter, genesisStatus, out _))
+ if (GenesisStatusHandler.GetCordonelRequirementInfoFromDbByFANr(_order, requirements, out var error))
{
- meter.WriteLog("Batterie nicht lesbar");
- lblS08Text = "Batterie nicht lesbar";
- lblS08Color = _progressError;
- ret = false;
- }
- else
- {
- var sbMSG = new StringBuilder();
- sbMSG.AppendLine($"Pcb = {meter.PcbId}");
+ genesisStatus.QuiescentCurrent_uA = requirements.QuiescentCurrent_uA;
+ genesisStatus.EstimatedProductionBatteryLoadPercent = requirements.EstimatedProductionBatteryLoadPercent;
- sbMSG.AppendLine($"POWERMON_TotalUsedSeconds = {genesisStatus.ExceededLifeTime_s}");
- sbMSG.AppendLine($"POWERMON_TotalUsedCharge = {genesisStatus.DrainedBatteryLoad_uAs}");
- sbMSG.AppendLine($"POWERMON_BatteryQuantity = {genesisStatus.BatteryQuantity}");
- sbMSG.AppendLine($"POWERMON_BatteryMilliAHrRating = {genesisStatus.InitialBatteryLoad_mAh}");
- sbMSG.AppendLine("");
- sbMSG.AppendLine($"Remaining life time in years {genesisStatus.RemainingLifeTimeYears:F2}");
- sbMSG.AppendLine($"Totally drained battery load in % {genesisStatus.DrainedBatteryLoadPercent:F2}");
- if (genesisStatus.RemainingLifeTimeYears >= 21 || genesisStatus.DrainedBatteryLoadPercent <= 1)
+ if (GenesisStatusHandler.BuildLifeTimeInformation(meter, genesisStatus, out _))
{
- lblS08Text = $"{genesisStatus.RemainingLifeTimeYears} Jahre";
+ sbMSG.AppendLine($"Pcb = {meter.PcbId}");
+
+ sbMSG.AppendLine($"POWERMON_TotalUsedSeconds = {genesisStatus.ExceededLifeTime_s}");
+ sbMSG.AppendLine($"POWERMON_TotalUsedCharge = {genesisStatus.DrainedBatteryLoad_uAs}");
+ sbMSG.AppendLine($"POWERMON_BatteryQuantity = {genesisStatus.BatteryQuantity}");
+ sbMSG.AppendLine($"POWERMON_BatteryMilliAHrRating = {genesisStatus.InitialBatteryLoad_mAh}");
+ sbMSG.AppendLine("");
+ sbMSG.AppendLine($"Remaining life time in years {genesisStatus.RemainingLifeTimeYears:F2}");
+ sbMSG.AppendLine($"Totally drained battery load in % {genesisStatus.DrainedBatteryLoadPercent:F2}");
+
+ //restlaufzeit monate -RequiredLifeTimeYearsAssembly
+
+
+ var hasFehlern = false;
+
+ // restlaufzeit monate - RequiredLifeTimeYearsAssembly
+ if (genesisStatus.RemainingLifeTimeYears < requirements.RequiredLifeTimeYearsAssembly)
+ {
+ lblS08Text = $"{nameof(genesisStatus.RemainingLifeTimeYears)}: " +
+ $"{genesisStatus.RemainingLifeTimeYears} < " +
+ $"{requirements.RequiredLifeTimeYearsAssembly}";
+ lblS08Color = _progressError;
+ ret = false;
+ sbMSG.AppendLine($"{nameof(genesisStatus.RemainingLifeTimeYears)}: " +
+ $"{genesisStatus.RemainingLifeTimeYears} < " +
+ $"{requirements.RequiredLifeTimeYearsAssembly}");
+ }
+ else sbMSG.AppendLine($"Restlaufzeit i.O.");
+
+
+
+
+ if (genesisStatus.AlternativeRequiredBatteryLoadPercent != null &&
+ genesisStatus.AlternativeRequiredBatteryLoadPercent > requirements.MaxDrainedBatteryLoadPercentAssembly)
+ {
+ sbMSG.AppendLine($"{nameof(genesisStatus.AlternativeRequiredBatteryLoadPercent)}: " +
+ $"{genesisStatus.AlternativeRequiredBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}");
+ ret = false;
+ }
+ else sbMSG.AppendLine($"Alternative Batterieverbrauch Montage i.O.");
+ // max bat verbrauch - MaxDrainedBatteryLoadPercentAssembly
+
+ if (genesisStatus.DrainedBatteryLoadPercent > requirements.MaxDrainedBatteryLoadPercentAssembly)
+ {
+ lblS08Text = $"{nameof(genesisStatus.DrainedBatteryLoadPercent)}: " +
+ $"{genesisStatus.DrainedBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}";
+ lblS08Color = _progressError;
+ ret = false;
+ sbMSG.AppendLine($"{nameof(genesisStatus.DrainedBatteryLoadPercent)}: " +
+ $"{genesisStatus.DrainedBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}");
+ }
+ else sbMSG.AppendLine($"Maximaler Batterieverbrauch Montage i.O.");
+ // lagerzeit - MaxStorageMonths
+ if (genesisStatus.StorageMonths > requirements.MaxStorageMonths)
+ {
+ lblS08Text = $"{nameof(genesisStatus.DrainedBatteryLoadPercent)}: " +
+ $"{genesisStatus.DrainedBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}";
+ lblS08Color = _progressError;
+ ret = false;
+ sbMSG.AppendLine($"{nameof(genesisStatus.StorageMonths)}: " +
+ $"{genesisStatus.StorageMonths} > " +
+ $"{requirements.MaxStorageMonths}");
+ }
+
+ else sbMSG.AppendLine($"Maximallagerzeit i.O.");
+ meter.WriteLog(sbMSG.ToString());
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
else
{
- lblS08Text = $"{genesisStatus.RemainingLifeTimeYears} Jahre";
+ meter.WriteLog("Batterie nicht lesbar");
+ lblS08Text = "Batterie nicht lesbar";
lblS08Color = _progressError;
ret = false;
}
- if (_orderDetails.FrequencyIndicator == 0)
- {
- if ((342000000 + (genesisStatus.ExceededLifeTime_s * 77.7)) <= genesisStatus.DrainedBatteryLoad_uAs)
- {
- lblS08Text = $"UNT Limit überschritten";
- lblS08Color = _progressError;
- ret = false;
- }
- }
- meter.WriteLog(sbMSG.ToString());
+
}
+ else
+ {
+ if (string.IsNullOrWhiteSpace(error)) error = "Fehler beim laden von Cordonel Freigaben";
+
+
+ meter.WriteLog(error);
+ lblS08Text = error;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lblS08Color = _progressError;
+ ret = false;
+ }
+
+ // this calculates all life time values
}
+ if (!ret)
+ sbMSG.AppendLine($"Battery lifetime limits sind Übreschritten");
+ else
+ sbMSG.AppendLine($"Battery lifetime limits sind OK");
+
if (_skipProcessSteps == null || !_skipProcessSteps.SkipLUT)
{
diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatusHandler.cs b/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatusHandler.cs
index 6490f1f8..59fdd835 100644
--- a/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatusHandler.cs
+++ b/Common/Hardware/WaterMeter/Genesis/GenesisStatus/GenesisStatusHandler.cs
@@ -101,6 +101,44 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisStatus
return false;
}
+ public static Boolean GetCordonelRequirementInfoFromDbByFANr(String fanr, CordonelRequirements prodRequirements, out string errorMsg)
+ {
+ errorMsg = "";
+ if (null == prodRequirements || string.IsNullOrEmpty(fanr))
+ {
+ return false;
+ }
+
+ try
+ {
+ var url = ServiceUrls.GetCordonelRequirementByFANrInfoServiceUrl(fanr);
+ var response = LocalWebRequest.GetRequest(url, 30000, out var httpStatus);
+ if (httpStatus == HttpStatusCode.OK && !string.IsNullOrEmpty(response))
+ {
+ var requirements = JsonConvert.DeserializeObject(response);
+ var type = typeof(CordonelRequirements);
+ foreach (var prop in type.GetProperties())
+ {
+ if (prop.CanWrite)
+ prop.SetValue(prodRequirements, prop.GetValue(requirements, null), null);
+ }
+
+ // For standard requirements the order number has to be set as those are neither PcbId based
+ // nor order number based
+ if (prodRequirements.ProductionOrderNr == null)
+ prodRequirements.ProductionOrderNr = prodRequirements.OuterProductionOrderNr;
+ return true;
+ }
+ }
+ catch (Exception e)
+ {
+ errorMsg = e.Message;
+ return false;
+ }
+
+ return false;
+ }
+
///
/// Get the calibration results for a meter from a test-bench calibration.
///
diff --git a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache
index 4163759b..8865d283 100644
--- a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache
+++ b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-8cb55c312de586b683d72cf58c13e2801d10e14b767777d98338d3e1473a1213
+89102b0142e574de38a9f47d370f3334e5e6c268
diff --git a/Common/LaaPackages b/Common/LaaPackages
index e7aa3e27..ce1dc260 160000
--- a/Common/LaaPackages
+++ b/Common/LaaPackages
@@ -1 +1 @@
-Subproject commit e7aa3e2723a435f0a714df661dc5d86dfd45a71c
+Subproject commit ce1dc26047374fd7a9328914a6c2bd7eb591f012
diff --git a/Common/Ui/GenesisToolBox/FrmQsTool.cs b/Common/Ui/GenesisToolBox/FrmQsTool.cs
index 60d13991..da16f69c 100644
--- a/Common/Ui/GenesisToolBox/FrmQsTool.cs
+++ b/Common/Ui/GenesisToolBox/FrmQsTool.cs
@@ -1,4 +1,5 @@
-using Newtonsoft.Json;
+using LaaPackages.Features.Cordonel.Models;
+using Newtonsoft.Json;
using NLog;
using System;
using System.Collections.Generic;
@@ -108,8 +109,17 @@ namespace Xylem.Common.Ui.GenesisToolBox
_currentGenesis = ((GenesisMeter)me);
var genesisStatus = new GenesisStatus();
+ var requirements = new CordonelRequirements();
+
+
+
+ if (GenesisStatusHandler.GetCordonelRequirementInfoFromDb($"{_currentGenesis.PcbId}", requirements, out var error))
+ {
+ genesisStatus.QuiescentCurrent_uA = requirements.QuiescentCurrent_uA;
+ genesisStatus.EstimatedProductionBatteryLoadPercent = requirements.EstimatedProductionBatteryLoadPercent;
+ }
//TODO Roland: Check this implementation --- START
- if (_currentGenesis.Region.Equals("EMEA"))
+ else if (_currentGenesis.Region.Equals("EMEA"))
{
genesisStatus.QuiescentCurrent_uA = 119.8;
genesisStatus.EstimatedProductionBatteryLoadPercent = 1.0;
@@ -119,8 +129,11 @@ namespace Xylem.Common.Ui.GenesisToolBox
genesisStatus.QuiescentCurrent_uA = 77.7;
genesisStatus.EstimatedProductionBatteryLoadPercent = 1.0;
}
- if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, genesisStatus, out _))
+
+ if (GenesisStatusHandler.BuildLifeTimeInformation(_currentGenesis, genesisStatus, out var message))
{
+ if (!string.IsNullOrWhiteSpace(message))
+ MessageBox.Show(message);
var sbMSG = new StringBuilder();
sbMSG.AppendLine($"Pcb = {_currentGenesis.PcbId}");
@@ -135,33 +148,117 @@ namespace Xylem.Common.Ui.GenesisToolBox
sbMSG.AppendLine($"Totally drained battery load in %: {genesisStatus.DrainedBatteryLoadPercent:F2}");
sbMSG.AppendLine("");
+ var hasFehlern = false;
+
+
+ // + RemainingLifeTimeYears
+
+ // restlaufzeit monate - RequiredLifeTimeYearsAssembly
+ if (genesisStatus.RemainingLifeTimeYears < requirements.RequiredLifeTimeYearsAssembly)
+ {
+ hasFehlern = true;
+ sbMSG.AppendLine($"{nameof(genesisStatus.RemainingLifeTimeYears)}: " +
+ $"{genesisStatus.RemainingLifeTimeYears} < " +
+ $"{requirements.RequiredLifeTimeYearsAssembly}");
+ }
+ else sbMSG.AppendLine($"Restlaufzeit i.O.");
+
+
+
+
+ // + AlternativeRequiredBatteryLoadPercent
+ if (genesisStatus.AlternativeRequiredBatteryLoadPercent != null &&
+ genesisStatus.AlternativeRequiredBatteryLoadPercent > requirements.MaxDrainedBatteryLoadPercentAssembly)
+ {
+ sbMSG.AppendLine($"{nameof(genesisStatus.AlternativeRequiredBatteryLoadPercent)}: " +
+ $"{genesisStatus.AlternativeRequiredBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}");
+ hasFehlern = true;
+ }
+ else sbMSG.AppendLine($"Alternative Batterieverbrauch Montage i.O.");
+ // max bat verbrauch - MaxDrainedBatteryLoadPercentAssembly
+
+ // + DrainedBatteryLoadPercent
+ if (genesisStatus.DrainedBatteryLoadPercent > requirements.MaxDrainedBatteryLoadPercentAssembly)
+ {
+ sbMSG.AppendLine($"{nameof(genesisStatus.DrainedBatteryLoadPercent)}: " +
+ $"{genesisStatus.DrainedBatteryLoadPercent} > " +
+ $"{requirements.MaxDrainedBatteryLoadPercentAssembly}");
+ hasFehlern = true;
+ }
+ else sbMSG.AppendLine($"Maximaler Batterieverbrauch Montage i.O.");
+
+
+ // + StorageMonths
+ // lagerzeit - MaxStorageMonths
+ if (genesisStatus.StorageMonths > requirements.MaxStorageMonths)
+ {
+ hasFehlern = true;
+ sbMSG.AppendLine($"{nameof(genesisStatus.StorageMonths)}: " +
+ $"{genesisStatus.StorageMonths} > " +
+ $"{requirements.MaxStorageMonths}");
+ }
+
+ else sbMSG.AppendLine($"Maximallagerzeit i.O.");
+
+ //// strom verbrauch - QuiescentCurrent_uA
+ //if (genesisStatus.QuiescentCurrent_uA > requirements.QuiescentCurrent_uA)
+ //{
+ // hasFehlern = true;
+ // sbMSG.AppendLine($"{nameof(genesisStatus.QuiescentCurrent_uA)}: " +
+ // $"{genesisStatus.QuiescentCurrent_uA} > " +
+ // $"{requirements.QuiescentCurrent_uA}");
+ //} // max bat verbrauch prod - EstimatedProductionBatteryLoadPercent
+ //else sbMSG.AppendLine($"Stromverbrauch i.O.");
+ //if (genesisStatus.EstimatedProductionBatteryLoadPercent > requirements.EstimatedProductionBatteryLoadPercent)
+ //{
+ // sbMSG.AppendLine($"{nameof(genesisStatus.EstimatedProductionBatteryLoadPercent)}: " +
+ // $"{genesisStatus.EstimatedProductionBatteryLoadPercent} > " +
+ // $"{requirements.EstimatedProductionBatteryLoadPercent}");
+ // // TODO error
+ // hasFehlern = true;
+ //}
+
+
+
+
+
+ //else sbMSG.AppendLine($"Maximaler Batterieverbrauch Produktion i.O.");
+
//if (_currentGenesis.Region == "NA")
//{
//if (genesisStatus.UNTStatus)
// This is the limit given by the "AlternativeRequiredBatteryLoadPercent"
- if (genesisStatus.AlternativeRequiredBatteryLoadPercent != null &&
- genesisStatus.DrainedBatteryLoadPercent < genesisStatus.AlternativeRequiredBatteryLoadPercent)
- {
- sbMSG.AppendLine($"{_currentGenesis.Region} limit OK ");
- }
- else
- {
- sbMSG.AppendLine($"{_currentGenesis.Region} limit Failed ");
- }
- //sbMSG.AppendLine($"UNT Limit data Limit {genesisStatus.UNTLimit} Meter has {genesisStatus.DrainedBatteryLoad_uAs}");
- sbMSG.AppendLine($"Maximum drained battery load: {genesisStatus.AlternativeRequiredBatteryLoadPercent} %");
- sbMSG.AppendLine($"Meter reports drained battery load: {genesisStatus.DrainedBatteryLoadPercent} %");
+ //if (genesisStatus.AlternativeRequiredBatteryLoadPercent != null &&
+ // genesisStatus.DrainedBatteryLoadPercent < requirements.MaxDrainedBatteryLoadPercentAssembly)
+ //{
+ // sbMSG.AppendLine($"{_currentGenesis.Region} limit OK ");
+ //}
+ //else
+ //{
+ // sbMSG.AppendLine($"{_currentGenesis.Region} limit Failed ");
+ //}
+ ////sbMSG.AppendLine($"UNT Limit data Limit {genesisStatus.UNTLimit} Meter has {genesisStatus.DrainedBatteryLoad_uAs}");
+ //sbMSG.AppendLine($"Maximum drained battery load: {genesisStatus.AlternativeRequiredBatteryLoadPercent} %");
+ //sbMSG.AppendLine($"Meter reports drained battery load: {genesisStatus.DrainedBatteryLoadPercent} %");
- var preproductionLimit = genesisStatus.AlternativeRequiredBatteryLoadPercent -
- genesisStatus.EstimatedProductionBatteryLoadPercent;
- if (genesisStatus.DrainedBatteryLoadPercent < preproductionLimit)
- {
- sbMSG.AppendLine($"{_currentGenesis.Region} preproduction limit OK ");
- }
+ //var preproductionLimit = genesisStatus.AlternativeRequiredBatteryLoadPercent -
+ // genesisStatus.EstimatedProductionBatteryLoadPercent;
+ //if (genesisStatus.DrainedBatteryLoadPercent < preproductionLimit)
+ //{
+ // sbMSG.AppendLine($"{_currentGenesis.Region} preproduction limit OK ");
+ //}
+ //else
+ //{
+ // sbMSG.AppendLine($"{_currentGenesis.Region} preproduction limit Failed ");
+ //}
+ if (hasFehlern)
+ sbMSG.AppendLine($"Battery lifetime limits sind Übreschritten");
else
- {
- sbMSG.AppendLine($"{_currentGenesis.Region} preproduction limit Failed ");
- }
+ sbMSG.AppendLine($"Battery lifetime limits sind OK");
+
+ sbMSG.AppendLine(
+ );
sbMSG.AppendLine($"Preproduction max. drained battery load: {genesisStatus.AlternativeRequiredBatteryLoadPercent} %");
sbMSG.AppendLine($"Meter reports drained battery load: {genesisStatus.DrainedBatteryLoadPercent} %");
diff --git a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
index 16faa439..78ef1599 100644
--- a/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
+++ b/Common/Ui/GenesisToolBox/GenesisToolBox.csproj
@@ -728,6 +728,10 @@
{26afcf1e-1287-48b8-a506-32b1e8a0dd0e}
WaterMeterRegisters
+
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}
+ LaaPackages.Features.Cordonel
+
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}
Logic.ProductionToProductMapper