MeterSize moved from "Logic.PrdctionToProductMapper" to "ProductionOrderCore",

RegionRadio split to Region (string) and RadioFrequencyMhz (Int32?),
CoreRevision changed from string to Int32?,
Service\MeterProcessState\Controllers\GetCorondelFw changed to GetCordonelFw and corrected
This commit is contained in:
Thomas Wiedebusch
2022-12-06 13:15:53 +01:00
parent 51c5934b8b
commit ef0d333d66
67 changed files with 2314 additions and 2343 deletions
+1 -1
View File
@@ -155,7 +155,7 @@
</site>
<site name="MeterProcessState" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\drabesch_ro\Repo\lab\la_operations\laa_production\Common\Service\MeterProcessState" />
<virtualDirectory path="/" physicalPath="D:\Projekte\SENSUS_GitLab\laa_production\Common\Service\MeterProcessState" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:56011:localhost" />
+58 -44
View File
@@ -10,139 +10,144 @@ namespace Xylem.Common.CommonCore.Configuration
public static class ServiceUrls
{
private const String DefaultGetPcbIdsFromSafeServiceUrl =
"http://10.49.40.25/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetPcbIdsFromSafe?ContainerDbId=";
private const String DefaultAddPcbIdsToSafeServiceUrl =
"http://10.49.40.25/MeterProcessState/AddPcbIdsToSafe?ContainerDbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/AddPcbIdsToSafe?ContainerDbId=";
private const String DefaultDownloadFilesPartsServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFileParts?ParentFileId=";
private const String DefaultListAllFwPackagesServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1";
private const String DefaultListAllSwPackagesServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5";
private const String DefaultListAllConfigFilePackagesServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6";
private const String DefaultListAllFwUpdateSafesServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4";
private const String DefaultSetCordonelAppVersionServiceUrl =
"http://10.49.40.25/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/SetCordonelProgress?PcbId=";
private const String DefaultGetCordonelAppVersionServiceUrl =
"http://10.49.40.25/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/GetCordonelAppVersion?PcbId=";
private const String DefaultListAllCordonelCustomersWithFilterServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Order/GetCordonelCustomers?FilterName=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelCustomers?FilterName=";
private const String DefaultListAllCordonelCustomerOrdersServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCustomersCordonelOrders?CustomerNumber=";
private const String DefaultListAllOrderCordonelsServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Order/GetCordonelOrderList?CustomerOrderNumber=";
private const String DefaultDownloadFwUpdateSafeServiceUrl =
"http://10.49.40.25/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainerContent?SafeContainerId=";
private const String DefaultListAllFwUpdateSafesForUserServiceUrl =
"http://10.49.40.25/MeterProcessState/GetFWUpdateSafeContainers?UserId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateSafeContainers?UserId=";
private const String DefaultFileContentDownloadServiceUrl =
"http://10.49.40.25/MeterProcessState/GetFileContent?FileId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFileContent?FileId=";
private const String DefaultFwUpdateReportUploadServiceUrl =
"http://10.49.40.25/MeterProcessState/PostFWUpdateReportFile";
"http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateReportFile";
private const String DefaultFwUpdateReportDownloadServiceUrl =
"http://10.49.40.25/MeterProcessState/GetFWUpdateReportFile?";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetFWUpdateReportFile?";
private const String DefaultFwUpdateSafeContainerUploadServiceUrl =
"http://10.49.40.25/MeterProcessState/PostFWUpdateSafeOdd";
"http://sla12iis01.emea.sensus.net/MeterProcessState/PostFWUpdateSafeOdd";
private const String DefaultEditFwUpdateUserValidityServiceUrl =
"http://10.49.40.25/MeterProcessState/EditUserValidity?Id=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/EditUserValidity?Id=";
private const String DefaultRefreshFwUpdateUsersHardwareIdServiceUrl =
"http://10.49.40.25/MeterProcessState/RefreshUsersHardwareId?Id=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersHardwareId?Id=";
private const String DefaultRefreshFwUpdateUsersPasswordHashServiceUrl =
"http://10.49.40.25/MeterProcessState/RefreshUsersPasswordHash?Id=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/RefreshUsersPasswordHash?Id=";
private const String DefaultCreateNewFwUpdateUserServiceUrl =
"http://10.49.40.25/MeterProcessState/AddNewUser?";
"http://sla12iis01.emea.sensus.net/MeterProcessState/AddNewUser?";
private const String DefaultListAllFwUpdateUsersServiceUrl =
"http://10.49.40.25/MeterProcessState/GetUserList";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList";
private const String DefaultListAllFwUpdateBuilderOperatorsServiceUrl =
"http://10.49.40.25/MeterProcessState/GetAllBuilderOperator";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetAllBuilderOperator";
private const String DefaultGetFwUpdateUserByIdServiceUrl =
"http://10.49.40.25/MeterProcessState/GetUserList?Id=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?Id=";
private const String DefaultGetFwUpdateUserByLoginNameServiceUrl =
"http://10.49.40.25/MeterProcessState/GetUserList?LogInName=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/GetUserList?LogInName=";
private const String DefaultRegisterWatchServiceUrl =
"http://10.49.40.25/MeterProcessState/api/RegisterWatch/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/RegisterWatch/";
private const String DefaultGenesisGetOrderNumberServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/ordernumber?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/ordernumber?PcbId=";
private const String DefaultGenesisGetRadioAddressServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/radioadress?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/radioadress?PcbId=";
private const String DefaultGenesisGetKeySetIdServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/getkeysetid?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/getkeysetid?PcbId=";
private const String DefaultGenesisGetPasswordServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/GetPassword?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPassword?PcbId=";
private const String DefaultGenesisSetPasswordServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/setpassword?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/setpassword?PcbId=";
private const String DefaultGenesisPasswordContainerServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=";
private const String DefaultMarriageServiceUrl =
"http://10.49.40.25/MeterProcessState/api/Marriage/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/Marriage/";
private const String DefaultMeterProcessStateUrl =
"http://10.49.40.25/MeterProcessState/api/ProccesState/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/ProccesState/";
private const String DefaultGenesisFinalCheckServiceUrl =
"http://10.49.40.25/MeterProcessState/api/FinalCheck/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FinalCheck/";
private const String DefaultGenesisRadioCheckServiceUrl =
"http://10.49.40.25/MeterProcessState/api/RadioCheck/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/RadioCheck/";
private const String DefaultGetSoftwareStartUpAccessUrl =
"http://10.49.40.25/MeterProcessState/api/SoftwareAccess/GetVersionIsValid";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetVersionIsValid";
private const String DefaultSetSoftwareLicenseUrl =
"http://10.49.40.25/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/SetVersionIsValid?Program=";
private const String DefaultGetSoftwareLicenseUrl =
"http://10.49.40.25/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/SoftwareAccess/GetCurrentVersion?Program=";
private const String DefaultGenesisCalibrationResult =
"http://10.49.40.25/MeterProcessState/api/GenesisMeter/PostCalibrationResult";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/PostCalibrationResult";
private const String DefaultGenesisMeter =
"http://10.49.40.25/MeterProcessState/api/GenesisMeter/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/GenesisMeter/";
private const String DefaultFileContentController =
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/";
private const String DefaultKeyServerCustom =
"https://nodes.sms-esaap.com/keygenproxy/api/v3/custom/";
private const String DefaultMeterInfoForTestBench =
"http://10.49.40.25/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID=";
"http://sla12iis01.emea.sensus.net/MeterProcessState/api/TestBench/GetMeterInfoForTestBench?PcbID=";
//private const String DefaultCordonelFwInfoUrl =
// "http://sla12iis01.emea.sensus.net/MeterProcessState/api/FileUpToDate/GetCordonelFw";
private const String DefaultCordonelFwInfoUrl =
"http://localhost:56011/api/FileUpToDate/GetCordonelFw";
@@ -186,6 +191,15 @@ namespace Xylem.Common.CommonCore.Configuration
/// <summary>
/// List all Cordonel FW packages.
/// </summary>
/// <returns></returns>
public static String ListAllCordonelFwPackagesUrl()
{
return ConfigurationManager.AppSettings["CordonelFwInfoUrl"] ??
DefaultCordonelFwInfoUrl;
}
/// <summary>
/// List all PCB IDs from a safe. As the safe may be deleted, this information is still accessible.
/// </summary>
@@ -257,6 +257,10 @@
<Project>{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}</Project>
<Name>Logic.ProductionToProductMapper</Name>
</ProjectReference>
<ProjectReference Include="..\Logic\ProductionOrderCore\ProductionOrderCore.csproj">
<Project>{6D2777BB-7A88-466D-A49B-3266F9BF0160}</Project>
<Name>ProductionOrderCore</Name>
</ProjectReference>
<ProjectReference Include="..\Metrology\Measurements\Measurements.csproj">
<Project>{6CCDB656-C676-4360-BABA-C4596AAD175D}</Project>
<Name>Measurements</Name>
@@ -1,8 +1,7 @@
using System;
using Logic.ProductionToProductMapper.Cordonel;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
namespace CordonelPreadjustmentUi.Parameters
namespace Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters
{
public class FlushParams
{
@@ -1,5 +1,4 @@
using CordonelPreadjustmentUi.Parameters;
using CordonelPreadjustmentUi.Processes;
using CordonelPreadjustmentUi.Processes;
using CordonelPreadjustmentUi.Processes.Actions;
using CordonelPreadjustmentUi.Processes.Itinerary;
using Logic.ProductionToProductMapper.Cordonel;
@@ -13,6 +12,8 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters;
namespace CordonelPreadjustmentUi
{
@@ -5,6 +5,7 @@ using System.Globalization;
using System.Linq;
using System.Text;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
namespace CordonelPreadjustmentUi
{
@@ -1,5 +1,4 @@
using CordonelPreadjustmentUi.Parameters;
using System;
using System;
using System.Drawing;
using System.Globalization;
using System.Threading;
@@ -8,6 +7,8 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Ui.CordonelPreadjustmentUi;
using System.Collections.Generic;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters;
namespace CordonelPreadjustmentUi.Processes.Itinerary
{
@@ -27,7 +27,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Applications
/// <summary>
/// Version string of application because of FLEXNETVERSION
/// does return a different layout, instead of decimals it
/// used hexadecimals. Therefore the version has to be safed as
/// used hexadecimals. Therefore the version has to be saved as
/// string at time of receiving for the FW-Update comparison
/// </summary>
public String StrVersion;
@@ -36,6 +36,7 @@ using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters;
using Xylem.Common.Logic.ProductionOrderCore.File;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.RelatePcb;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Metrology.Measurements;
@@ -1138,6 +1139,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
return msbPartString + $"{msb & 0x0F:X0}" + "." + $"{(lsb & 0xF0) >> 4:X1}" + $"{lsb & 0x0F:X1}";
}
/// <summary>
/// Building a version string with 2 decimals e.g. " 12.34"
/// </summary>
/// <remarks date="2022-Dec-02" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
/// <param name="version">the version</param>
/// <returns>converted version to string </returns>
public static String BuildFwVersionString(Int32? version)
{
return version == null ? "0.00" : $@"{version / 100}.{version % 100 :D2}";
}
/// <summary>
/// List of all present meter applications
/// </summary>
@@ -1146,7 +1160,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <summary>
/// Core revision of boot code.
/// </summary>
public String CoreRevision;
//public String CoreRevision;
public Int32? CoreRevision;
/// <summary>
/// This is the FLEXNET version which describes the entire packet.
@@ -1164,9 +1179,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
public String MeterSize;
/// <summary>
/// Region (EMEA or NA) and Radio frequency (433 or 868 or null).
/// Region (EMEA or NA).
/// </summary>
public String RegionRadio;
public String Region;
/// <summary>
/// Radio frequency in MHz (433 or 868 or null).
/// </summary>
public Int32? RadioFrequencyMhz;
/// <summary>
/// Metrology upgrade permission.
@@ -1192,6 +1212,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
/// <remarks date="2022-Apr-27" author="Thomas Wiedebusch">
/// - Read lockup table CRC bugfix with try, catch for legacy versions, where this register does not exists.
/// </remarks>
/// <remarks date="2022-Dec-02" author="Thomas Wiedebusch">
/// - CoreRevision from String to Int32?,
/// - MeterSize from String to MeterSize,
/// - Region separated from RadioRegion as String,
/// - RadioFrequencyMhz introduced as Int32? (null if "NA" region or not installed),
/// - LutCrc from String to Int32?.
/// </remarks>
private void ReadMeterFirmwareAndAssignRegisters()
{
//avoid overwriting of list if this already exits
@@ -1284,18 +1311,32 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
//read core revision
var coreRegisterRead = RegisterConverter.ConvertTo<String>(ReadRegister(Register.System.CoreRevision, 16));
var coreRevision = coreRegisterRead?.Split('\0');
CoreRevision = coreRevision == null ? "0.00" : $"{coreRevision[0].ToLower().Replace("cordonel ", "")}";
CoreRevision = null;
if (!string.IsNullOrEmpty(coreRegisterRead))
{
var coreRevisionStrings = coreRegisterRead.Split('\0');
//remove Cordonel sub-string and the blanks
var coreRevisionSubString = $"{coreRevisionStrings[0].ToLower().Replace("cordonel ", "")}";
var coreRevisionSubStrings = coreRevisionSubString.Split('.');
if (Int32.TryParse(coreRevisionSubStrings[0], out var coreRevisionMsb))
{
if (Int32.TryParse(coreRevisionSubStrings[1], out var coreRevisionLsb))
{
CoreRevision = coreRevisionMsb * 100 + coreRevisionLsb;
}
}
}
//read radio frequency
RegionRadio = "NA";
Region = "NA";
RadioFrequencyMhz = null;
try
{
var radioFrequencyRaw = ReadRegister(Register.Sensusradio.FrequencyIndicator);
if (radioFrequencyRaw != null)
{
var radioFrequency = RegisterConverter.ConvertTo<UInt16>(radioFrequencyRaw);
RegionRadio = $"EMEA_{radioFrequency}";
Region = "EMEA";
RadioFrequencyMhz = RegisterConverter.ConvertTo<Int32>(radioFrequencyRaw);
}
}
catch (Exception)
@@ -1309,10 +1350,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
_logger.Info($"Date time (UTC): {DateTimeOffset.UtcNow}");
if (CoreRevision != null)
{
_logger.Info("System Core Revision: " + CoreRevision);
_logger.Info("System Core Revision: " + BuildFwVersionString(CoreRevision));
}
_logger.Info("Region and radio frequency[Mhz]: " + RegionRadio);
_logger.Info("Region: " + Region);
if (RadioFrequencyMhz != null)
{
_logger.Info($"Radio frequency [MHz]: {RadioFrequencyMhz}");
}
foreach (var fm in MeterAppListVersion.OrderBy(o => o.AppId))
{
@@ -2144,9 +2190,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15));
}
apps.Add(new CordonelAppVersion(-1, CoreRevision, false));
apps.Add(new CordonelAppVersion(-1, BuildFwVersionString(CoreRevision), false));
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={PcbId}&ProgressName={progressName}&version={version}";
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={PcbId}" +
$"&ProgressName={progressName}&version={version}";
LocalWebRequest.PostRequestAsync(url, json: apps);
}
@@ -136,6 +136,10 @@
<Project>{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}</Project>
<Name>Logic.ProductionToProductMapper</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Logic\ProductionOrderCore\ProductionOrderCore.csproj">
<Project>{6D2777BB-7A88-466D-A49B-3266F9BF0160}</Project>
<Name>ProductionOrderCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Utils\Crc16Ccitt\Crc16Ccitt.csproj">
<Project>{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}</Project>
<Name>Crc16Ccitt</Name>
@@ -99,19 +99,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
public Int32 MaxPartialFileDataSize = 2 * 1024;
/// <summary>
/// Core revision minimum as double for comparison
/// Core revision minimum as int32? with major * 100 + minor for comparison
/// </summary>
public Double? CoreRevisionMinimum
{
get; set;
}
public Int32? CoreRevisionMinimum { get; private set; }
/// <summary>
/// Core revision maximum as double for comparison
/// Core revision maximum as int32? with major * 100 + minor for comparison
/// </summary>
public Double? CoreRevisionMaximum
{
get; private set;
}
public Int32? CoreRevisionMaximum { get; private set; }
//reminder for the core minimum requirement as string
private String _strCoreRevisionMinimum;
@@ -1950,9 +1944,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// </summary>
/// <param name="version"></param>
/// <returns></returns>
public static String ConvertVersionToString(UInt32 version)
public static String ConvertVersionToString(Int32? version)
{
return $"{version / 100}.{version % 100:D2}";
return version == null ? "0.00" : $"{version / 100}.{version % 100:D2}";
}
/// <summary>
@@ -2062,7 +2056,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// Checks if the core version is in range of required minimum to maximum version.
/// The package file has to be read in advance as this contains the min/max.
/// </summary>
/// <param name="coreVersionString">string containing the core version</param>
/// <param name="coreRevision">containing the core version</param>
/// <returns>true if version is in range</returns>
/// <remarks date="2020-Dec-08" author="Thomas Wiedebusch">
/// - Initial.
@@ -2070,16 +2064,18 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// <remarks date="2021-Mar-10" author="Thomas Wiedebusch">
/// - Removed "Cordonel " string check.
/// </remarks>
public Boolean CheckCoreRevision(String coreVersionString)
/// <remarks date="2022-Dec-05" author="Thomas Wiedebusch">
/// - Core revision data type changed from string ti int32?.
/// </remarks>
public Boolean CheckCoreRevision(Int32? coreRevision)
{
if (null == CoreRevisionMaximum || null == CoreRevisionMinimum || null == coreVersionString ||
if (null == CoreRevisionMaximum || null == CoreRevisionMinimum || null == coreRevision ||
null == _packageDescriptionFile)
{
return false;
}
var meterCoreRevision = ExtractVersionFromString(coreVersionString);
return meterCoreRevision >= CoreRevisionMinimum && meterCoreRevision <= CoreRevisionMaximum;
return coreRevision >= CoreRevisionMinimum && coreRevision <= CoreRevisionMaximum;
}
/// <summary>
@@ -2097,7 +2093,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// <remarks date="2021-Mar-09" author="Thomas Wiedebusch">
/// - Changed to Int32 with major * 100 + minor.
/// </remarks>
public static Int32 ExtractVersionFromString(String versionString)
private static Int32 ExtractVersionFromString(String versionString)
{
var majorVersion = 0;
@@ -57,15 +57,18 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
/// The package file has to be read in advance as this contains the min/max.
/// </summary>
/// <param name="meterFwUpdate"></param>
/// <param name="coreVersionString">string containing the core version</param>
/// <param name="coreRevision">containing the core version</param>
/// <returns>true if version is in range</returns>
/// <remarks date="2020-Dec-08" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
public static Boolean CheckCoreRevision(MeterFwUpdate meterFwUpdate, String coreVersionString)
/// <remarks date="2022-Dec-05" author="Thomas Wiedebusch">
/// - Core revision data type changed from string ti int32?.
/// </remarks>
public static Boolean CheckCoreRevision(MeterFwUpdate meterFwUpdate, Int32? coreRevision)
{
if (meterFwUpdate == null || coreVersionString == null) return false;
return meterFwUpdate.CheckCoreRevision(coreVersionString);
if (meterFwUpdate == null || coreRevision == null) return false;
return meterFwUpdate.CheckCoreRevision(coreRevision);
}
}
}
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
using Logic.ProductionToProductMapper.Cordonel;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
@@ -4,12 +4,12 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using Logic.ProductionToProductMapper.Cordonel;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Utils.Crc16Ccitt;
using Xylem.Common.Utils.ProcessExec;
using Xylem.Common.Utils.ProcessExec.EventArguments;
@@ -1 +1 @@
5ed75d99ee45ff67821090f1b3dbb001dd9e4fe3
1a3d4919c9c702245832d925951f2b7cb72fc333
@@ -1,4 +1,5 @@
using System;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
namespace Logic.ProductionToProductMapper.Cordonel
{
@@ -73,9 +73,7 @@
</Compile>
<Compile Include="Cordonel\CalibrationResult.cs" />
<Compile Include="Cordonel\CordonelAppVersion.cs" />
<Compile Include="Cordonel\MeterSize.cs" />
<Compile Include="Cordonel\MarriagePossibleEnum.cs" />
<Compile Include="Cordonel\MeterSizeConverter.cs" />
<Compile Include="Cordonel\PickingCompareItem.cs" />
<Compile Include="Cordonel\RegisterHistory.cs" />
<Compile Include="Cordonel\SkipProcess.cs" />
@@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
namespace Xylem.Common.Logic.ProductionOrderCore.FW
{
public class CordonelFw
{
public int Id { get; set; }
public int RadioFrequencyMhz { get; set; }
public int FlexnetAppId { get; set; }
public int Version { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
public DateTime? DeletedDate { get; set; }
public bool ForPressure { get; set; }
public int Metersize { get; set; }
public Region Region { get; set; }
public bool CurrentForProd { get; set; }
public int? FileClusterStoreId { get; set; }
public Int32? CoreRevisionMin { get; set; }
public Int32? CoreRevisionMax { get; set; }
public Int32? MetrologyVersion { get; set; }
public Boolean IsReleased { get; set; }
public DateTime? ReleaseDate { get; set; }
public String Remark { get; set; }
public bool IsDeleted() { return DeletedDate.HasValue; }
}
}
@@ -0,0 +1,107 @@
using System;
namespace Xylem.Common.Logic.ProductionOrderCore.FW
{
/// <summary>
/// This class collects all information needed to specify the FW-Update package.
/// </summary>
[Serializable]
public class CordonelFwPackageInfo
{
/// <summary>
/// Used to keep the selection information on e.g. data tables stuck at the Cordonel.
/// </summary>
public Boolean IsSelected;
/// <summary>
/// DB table entry
/// </summary>
public Int32 Id;
/// <summary>
/// Frequency in MHz, null if not used or not assigned
/// </summary>
public Int32? RadioFrequencyMhz;
/// <summary>
/// Application Id of FLEXNETVERSION
/// </summary>
public Int32 FlexnetAppId;
/// <summary>
/// Version of FLEXNETVERSION as number
/// </summary>
public Int32? Version;
/// <summary>
/// Version of FLEXNETVERSION as string
/// </summary>
public String Name;
/// <summary>
/// Meter size
/// </summary>
public String MeterSize;
/// <summary>
/// Meter size
/// </summary>
public String Region;
/// <summary>
/// Current version for production
/// </summary>
public Boolean CurrentForProd;
/// <summary>
/// Clustered file to connect to physical content
/// </summary>
public Int32 FileClusterStoreId;
/// <summary>
/// Required minimum core version
/// </summary>
public Int32? CoreRevisionMin;
/// <summary>
/// Required maximum core version
/// </summary>
public Int32? CoreRevisionMax;
/// <summary>
/// Required metrology version
/// </summary>
public Int32? MetrologyVersion;
/// <summary>
/// Marker if it is released.
/// </summary>
public Boolean IsReleased;
/// <summary>
/// Date of release approval
/// </summary>
public DateTime? ReleaseDate;
/// <summary>
/// Comment
/// </summary>
public String Remark;
/// <summary>
/// Complete name of the FW release package
/// </summary>
public String FileName;
/// <summary>
/// Date of deletion
/// </summary>
public DateTime? DeletedDate;
/// <summary>
/// Returns is deleted if deletion date is set
/// </summary>
public Boolean IsDeleted() { return DeletedDate.HasValue; }
}
}
@@ -1,4 +1,4 @@
namespace Logic.ProductionToProductMapper.Cordonel
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
{
/// <summary>
/// Enumeration of meter sizes named as flow tube inner diameter,
@@ -1,6 +1,6 @@
using System;
namespace Logic.ProductionToProductMapper.Cordonel
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
{
/// <summary>
/// Converter from meter size of production order to name or MeterSize enum or vice versa.
@@ -10,8 +10,9 @@ namespace Logic.ProductionToProductMapper.Cordonel
/// <summary>
/// Convert Meter size enumeration to name .
/// </summary>
public static String ConvertMeterSizeEnumToSizeName(MeterSize meterSizeId)
public static String ConvertMeterSizeEnumToSizeName(MeterSize? meterSizeId)
{
if (meterSizeId == null) return "*";
switch (meterSizeId)
{
case MeterSize.DN40:
@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
{
public enum Region
{
@@ -0,0 +1,33 @@
using System;
namespace Xylem.Common.Logic.ProductionOrderCore.OrderData
{
/// <summary>
/// Converter for region.
/// </summary>
public static class RegionConverter
{
/// <summary>
/// Convert region enumeration to name .
/// </summary>
public static String ConvertRegionEnumToRegionName(Region? regionId)
{
if (regionId == null) return "*";
switch (regionId)
{
case Region.EMEA:
return "EMEA";
case Region.NA:
return "NA";
case Region.China:
return "China";
default:
return "*";
}
}
}
}
@@ -88,11 +88,14 @@
</Compile>
<Compile Include="Csd\CsdParameterResult.cs" />
<Compile Include="File\BaseFile.cs" />
<Compile Include="FW\CordonelFw.cs" />
<Compile Include="FW\CordonelFwPackageInfo.cs" />
<Compile Include="FW\CordonelFWTypeEnum.cs" />
<Compile Include="IProductionData.cs" />
<Compile Include="KitronTestResults\JsonObject.cs" />
<Compile Include="KitronTestResults\RadioTest.cs" />
<Compile Include="OrderData\MeterSize.cs" />
<Compile Include="OrderData\MeterSizeConverter.cs" />
<Compile Include="OrderData\RegionConverter.cs" />
<Compile Include="OrderData\OrderOverViewCordonel.cs" />
<Compile Include="OrderData\OrderRadioParameter.cs" />
<Compile Include="OrderData\OrderProgrammingParameters.cs" />
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Reflection;
using System.Windows.Controls;
using Xylem.Common.CommonCore.Configuration;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Logic.SoftwareAccessHelper;
namespace ProductionUiCordonel.ProductionProcesses.Actions
@@ -46,13 +47,13 @@ namespace ProductionUiCordonel.ProductionProcesses.Actions
var apps = new List<CordonelAppVersion>();
foreach (var item in Meter.MeterAppListVersion)
{
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, (item.AppId != 15 ? true : false)));
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15));
}
apps.Add(new CordonelAppVersion(-1, Meter.CoreRevision, false));
apps.Add(new CordonelAppVersion(-1, GenesisMeter.BuildFwVersionString(Meter.CoreRevision), false));
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={Meter.PcbId}&ProgressName=Shipping&version={Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
var a = LocalWebRequest.PostRequestAsync(url, json: apps);
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={Meter.PcbId}&ProgressName=Shipping&version={Assembly.GetExecutingAssembly().GetName().Version}";
LocalWebRequest.PostRequestAsync(url, json: apps);
Meter.PushProgress("Shipping", Assembly.GetExecutingAssembly().GetName().Version.ToString());
Meter.Logout();
@@ -12,6 +12,7 @@ using System.Web;
using System.Web.Http;
using Xylem.Common.Logic.ProductionOrderCore.File;
using Xylem.Common.Logic.ProductionOrderCore.FW;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.ServiceCore;
namespace Xylem.Common.Service.MeterProcessState.Controllers
@@ -460,26 +461,24 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
/// <summary>
/// Retruns filted FW files for Cordonel without content
/// Returns filtered FW files for Cordonel without content
/// </summary>
/// <returns></returns>
[Route("GetCorondelFw"), HttpGet]
public async Task<HttpResponseMessage> GetCorondelFw(Int32? Metersize = null, int? Frequency = null, String Region = null, Boolean? ForProd = null, Boolean? Deleted = false)
[Route("GetCordonelFw"), HttpGet]
public async Task<HttpResponseMessage> GetCordonelFw(Int32? meterSize = null, Int32? radioFrequencyMhz = null,
String region = null, Boolean? forProd = null, Boolean? deleted = false)
{
try
{
return await Task.Run(() =>
{
var ret = new List<CordonelFw>();
var ret = new List<CordonelFwPackageInfo>();
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
using (var dataAccess = new SqlDataAccess(GlobalConfig.connectionString.Value))
{
var sb = new StringBuilder();
sb.AppendLine($" SELECT [Id] ");
sb.AppendLine($" ,[RadioFrequencyMhz] ");
sb.AppendLine($" ,[FlexnetAppId] ");
@@ -500,104 +499,88 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
sb.AppendLine($" FROM[Auftrag].[dbo].[Cordonel_CurrentFw] ");
sb.AppendLine($" left outer join [Auftrag].[dbo].[FileClusterStore] on [FileId] = [FileClusterStoreId]");
sb.AppendLine($" where 1= 1 ");
if (Metersize.HasValue)
if (meterSize != null)
{
sb.AppendLine($" and Metersize= {Metersize.Value} ");
sb.AppendLine($" and Metersize={meterSize} ");
}
if (!string.IsNullOrEmpty(Region))
if (radioFrequencyMhz != null)
{
sb.AppendLine($" and Region ='{Region}' ");
sb.AppendLine($" and radioFrequencyMhz={radioFrequencyMhz} ");
}
if (ForProd.HasValue)
if (region != null)
{
sb.AppendLine($" and currentForProd ={(ForProd.Value ? "1" : "0") } ");
sb.AppendLine($" and Region ='{region}' ");
}
if (Deleted.HasValue)
if (forProd.HasValue)
{
sb.AppendLine($" and Deleted is {(Deleted.Value ? "not" : "")} null");
sb.AppendLine($" and currentForProd ={(forProd.Value ? "1" : "0") } ");
}
if (deleted.HasValue)
{
sb.AppendLine($" and Deleted is {(deleted.Value ? "not" : "")} null");
}
var retDT = dataacces.ExecuteQuery(sb.ToString());
var retDT = dataAccess.ExecuteQuery(sb.ToString());
foreach (DataRow item in retDT.Rows)
{
var add = new CordonelFw() { Id = (int)item["Id"] };
add.RadioFrequencyMhz = (int)item["RadioFrequencyMhz"];
add.Name = (string)item["Name"];
add.FileName = "";
var add = new CordonelFwPackageInfo
{
Id = (Int32)item["Id"],
RadioFrequencyMhz = (Int32?)item["RadioFrequencyMhz"],
Name = (String)item["Name"],
FlexnetAppId = (Int32)item["FlexnetAppId"],
Version = (Int32)item["Version"],
FileClusterStoreId = (Int32)item["FileClusterStoreId"],
FileName = ""
};
if (item["FileName"].GetType() != typeof(DBNull))
{
add.FileName = (string)item["FileName"];
add.FileName = (String)item["FileName"];
}
if (item["Deleted"].GetType() != typeof(DBNull))
{
add.DeletedDate = (DateTime)item["Deleted"];
}
add.FlexnetAppId = (int)item["FlexnetAppId"];
add.Version = (int)item["Version"];
add.Metersize = (Int16)item["Metersize"];
add.FileClusterStoreId = null;
if (item["FileClusterStoreId"].GetType() != typeof(DBNull))
if (item["Metersize"].GetType() != typeof(DBNull))
{
add.FileClusterStoreId = (int)item["FileClusterStoreId"];
add.MeterSize = MeterSizeConverter.ConvertMeterSizeEnumToSizeName((MeterSize)(Int16)item["Metersize"]);
}
add.CurrentForProd = false;
if (item["CurrentForProd"].GetType() != typeof(DBNull))
{
add.CurrentForProd = (bool)item["CurrentForProd"];
add.CurrentForProd = (Boolean)item["CurrentForProd"];
}
switch ((string)item["Region"].ToString())
if (item["Region"].GetType() != typeof(DBNull))
{
case "emea":
add.Region = Logic.ProductionOrderCore.OrderData.Region.EMEA;
break;
case "na":
add.Region = Logic.ProductionOrderCore.OrderData.Region.NA;
break;
case "china":
add.Region = Logic.ProductionOrderCore.OrderData.Region.China;
break;
default:
add.Region = Logic.ProductionOrderCore.OrderData.Region.EMEA;
break;
}
var reg = (String)item["Region"];
add.Region = reg.Replace(" ","");
}
add.CoreRevisionMin = null;
if (item["CoreRevisionMin"].GetType() != typeof(DBNull))
{
add.CoreRevisionMin = (int)item["CoreRevisionMin"];
add.CoreRevisionMin = (Int32)item["CoreRevisionMin"];
}
add.CoreRevisionMax = null;
if (item["CoreRevisionMax"].GetType() != typeof(DBNull))
{
add.CoreRevisionMin = (int)item["CoreRevisionMax"];
add.CoreRevisionMax = (Int32)item["CoreRevisionMax"];
}
add.MetrologyVersion = null;
if (item["MetrologyVersion"].GetType() != typeof(DBNull))
{
add.CoreRevisionMin = (int)item["MetrologyVersion"];
add.MetrologyVersion = (Int32)item["MetrologyVersion"];
}
@@ -605,7 +588,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
if (item["IsReleased"].GetType() != typeof(DBNull))
{
add.IsReleased = (bool)item["IsReleased"];
add.IsReleased = (Boolean)item["IsReleased"];
}
add.ReleaseDate = null;
if (item["ReleaseDate"].GetType() != typeof(DBNull))
@@ -723,16 +723,19 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
}
[Route("GetRecoveryFile"), HttpGet]
public async Task<HttpResponseMessage> GetRecoveryFile(Int32 PcbID, Int32? RadioFrq, String Region, String FlexnetVersion)
public async Task<HttpResponseMessage> GetRecoveryFile(Int32 pcbId, Int32? radioFrq, String region, String flexnetVersion)
{
var file = new RecoverySettings() { PcbId = PcbID, RadioFrequencyMhz = RadioFrq, Region = Region, Release = FlexnetVersion };
file.RecoveryRegisters = new List<RecoveryRegisterItem>();
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } });
var file = new RecoverySettings { PcbId = pcbId, RadioFrequencyMhz = radioFrq, Region = region, Release = flexnetVersion,
RecoveryRegisters = new List<RecoveryRegisterItem>
{
new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 },
IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } }
}
};
var csdRet = OrderProgrammingParameters.GetProgrammingParameters(PcbID.ToString(), GlobalConfig.connectionString.Value);
var csdRet = OrderProgrammingParameters.GetProgrammingParameters(pcbId.ToString(), GlobalConfig.connectionString.Value);
foreach (var item in csdRet.Where(w => w.Source == Logic.ProductionOrderCore.ProgrammingSource.Vako))
@@ -741,8 +744,8 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
{
RegisterIdent = item.RegisterName,
WriteValue = item.RegisterValue,
ReadbackValue = null,
IsCiritcal = false,
ReadBackValue = null,
IsCritical = false,
Access = RegisterRecoveryAccess.SetAlways,
});
}
@@ -753,26 +756,26 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
{
RegisterIdent = item.RegisterName,
WriteValue = item.RegisterValue,
ReadbackValue = null,
IsCiritcal = false,
ReadBackValue = null,
IsCritical = false,
Access = RegisterRecoveryAccess.SetAlways,
});
}
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCiritcal = true });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "GENESISFLOW_SealDisplay", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCritical = true });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x01 }, IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_MainAlarmMask", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_ExtendedAlarmMask", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0x00 } });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0xFF }, IsCiritcal = true, ReadbackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } });
file.RecoveryRegisters.Add(new RecoveryRegisterItem() { RegisterIdent = "SENSUSRADIO_SystemState", WriteValue = new Byte[] { 0x00, 0x00, 0x00, 0xFF }, IsCritical = true, ReadBackValue = new Byte[] { 0x00, 0x00, 0x00, 0x0c } });
var blacklist = new List<String>()
var blackList = new List<String>()
{
"CUSTOMER_RebootCount",
"GENESISFLOW_ForwardArrow",
@@ -785,7 +788,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
};
var Crit = new List<String>()
var Critical = new List<String>()
{
"GENESISFLOW_SealDisplay",
"GENESISFLOW_MeterSize",
@@ -811,14 +814,9 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
};
file.RecoveryRegisters.Where(d => Critical.Contains(d.RegisterIdent)).ToList().ForEach(f => { f.IsCritical = true; f.ReadBackValue = f.WriteValue; });
file.RecoveryRegisters.Where(d => Crit.Contains(d.RegisterIdent)).ToList().ForEach(f => { f.IsCiritcal = true; f.ReadbackValue = f.WriteValue; });
var onlyIfDefaultl = new List<String>()
var onlyIfDefault = new List<String>()
{
"METROLOGYASST_PulseWeight",
"METROLOGYASST_PressureUnits",
@@ -841,7 +839,7 @@ namespace Xylem.Common.Service.MeterProcessState.Controllers
};
file.RecoveryRegisters.Where(d => onlyIfDefaultl.Contains(d.RegisterIdent)).ToList().ForEach(f => f.Access = RegisterRecoveryAccess.SetIfDefault);
file.RecoveryRegisters.Where(d => onlyIfDefault.Contains(d.RegisterIdent)).ToList().ForEach(f => f.Access = RegisterRecoveryAccess.SetIfDefault);
return Request.CreateResponse(HttpStatusCode.OK, file);
}
+2 -2
View File
@@ -1,5 +1,4 @@
using Logic.ProductionToProductMapper.Cordonel;
using Logic.ProductionToProductMapper.Files.Fw;
using Logic.ProductionToProductMapper.Files.Fw;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -10,6 +9,7 @@ using System.Text;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Configuration;
using Xylem.Common.Logic.ProductionOrderCore.FW;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
+5 -4
View File
@@ -20,6 +20,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.FW;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Ui.GenesisToolBox.Properties;
@@ -730,7 +731,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
Invoke(new Action(() =>
{
lblConnectPcb.Text = StrPartPcbConnected + _currentGenesis.PcbId;
lblCoreRevision.Text = StrCoreRevision + _currentGenesis.CoreRevision;
lblCoreRevision.Text = StrCoreRevision +
GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision);
lblConnectPcb.ForeColor = Color.Green;
_meterFwUpdate?.CompareAllMeterAndFileApps();
FillDataGridWithAllInfos();
@@ -1857,10 +1859,9 @@ namespace Xylem.Common.Ui.GenesisToolBox
else if (item.FileName.ToLower().EndsWith(".txt"))
{
//encode content
String controlFileContent;
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
controlFileContent = enc.GetString(item.FileContent.ToArray());
var enc = new System.Text.ASCIIEncoding();
var controlFileContent = enc.GetString(item.FileContent.ToArray());
+1 -1
View File
@@ -10,7 +10,7 @@ using System.Text;
using System.Threading;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Logic.ProductionOrderCore.File;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Utils.Crc16Ccitt;
+40 -17
View File
@@ -30,7 +30,7 @@
{
this.components = new System.ComponentModel.Container();
this.grpSetup = new System.Windows.Forms.GroupBox();
this.tbxRegionRadio = new System.Windows.Forms.TextBox();
this.tbxRegion = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.tbxPcbId = new System.Windows.Forms.TextBox();
this.tbxMeterFw = new System.Windows.Forms.TextBox();
@@ -74,6 +74,8 @@
this.label9 = new System.Windows.Forms.Label();
this.lblUpdateTime = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.tbxRadio = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.grpSetup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.groupBox1.SuspendLayout();
@@ -81,7 +83,9 @@
//
// grpSetup
//
this.grpSetup.Controls.Add(this.tbxRegionRadio);
this.grpSetup.Controls.Add(this.label10);
this.grpSetup.Controls.Add(this.tbxRadio);
this.grpSetup.Controls.Add(this.tbxRegion);
this.grpSetup.Controls.Add(this.label8);
this.grpSetup.Controls.Add(this.tbxPcbId);
this.grpSetup.Controls.Add(this.tbxMeterFw);
@@ -96,31 +100,31 @@
this.grpSetup.Controls.Add(this.cbComSlot);
this.grpSetup.Location = new System.Drawing.Point(12, 69);
this.grpSetup.Name = "grpSetup";
this.grpSetup.Size = new System.Drawing.Size(248, 250);
this.grpSetup.Size = new System.Drawing.Size(257, 250);
this.grpSetup.TabIndex = 24;
this.grpSetup.TabStop = false;
this.grpSetup.Text = "Cordonel";
//
// tbxRegionRadio
// tbxRegion
//
this.tbxRegionRadio.Location = new System.Drawing.Point(124, 178);
this.tbxRegionRadio.Name = "tbxRegionRadio";
this.tbxRegionRadio.ReadOnly = true;
this.tbxRegionRadio.Size = new System.Drawing.Size(68, 20);
this.tbxRegionRadio.TabIndex = 34;
this.tbxRegion.Location = new System.Drawing.Point(128, 178);
this.tbxRegion.Name = "tbxRegion";
this.tbxRegion.ReadOnly = true;
this.tbxRegion.Size = new System.Drawing.Size(68, 20);
this.tbxRegion.TabIndex = 34;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(10, 182);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(105, 13);
this.label8.Size = new System.Drawing.Size(44, 13);
this.label8.TabIndex = 33;
this.label8.Text = "Region/Radio[MHz]:";
this.label8.Text = "Region:";
//
// tbxPcbId
//
this.tbxPcbId.Location = new System.Drawing.Point(124, 59);
this.tbxPcbId.Location = new System.Drawing.Point(128, 59);
this.tbxPcbId.Name = "tbxPcbId";
this.tbxPcbId.ReadOnly = true;
this.tbxPcbId.Size = new System.Drawing.Size(68, 20);
@@ -128,7 +132,7 @@
//
// tbxMeterFw
//
this.tbxMeterFw.Location = new System.Drawing.Point(124, 88);
this.tbxMeterFw.Location = new System.Drawing.Point(128, 88);
this.tbxMeterFw.Name = "tbxMeterFw";
this.tbxMeterFw.ReadOnly = true;
this.tbxMeterFw.Size = new System.Drawing.Size(68, 20);
@@ -136,7 +140,7 @@
//
// tbxMeterMeterSize
//
this.tbxMeterMeterSize.Location = new System.Drawing.Point(124, 148);
this.tbxMeterMeterSize.Location = new System.Drawing.Point(128, 148);
this.tbxMeterMeterSize.Name = "tbxMeterMeterSize";
this.tbxMeterMeterSize.ReadOnly = true;
this.tbxMeterMeterSize.Size = new System.Drawing.Size(68, 20);
@@ -144,7 +148,7 @@
//
// tbxMeterLutCrc
//
this.tbxMeterLutCrc.Location = new System.Drawing.Point(124, 118);
this.tbxMeterLutCrc.Location = new System.Drawing.Point(128, 118);
this.tbxMeterLutCrc.Name = "tbxMeterLutCrc";
this.tbxMeterLutCrc.ReadOnly = true;
this.tbxMeterLutCrc.Size = new System.Drawing.Size(68, 20);
@@ -179,7 +183,7 @@
//
// btnConnect
//
this.btnConnect.Location = new System.Drawing.Point(123, 24);
this.btnConnect.Location = new System.Drawing.Point(128, 24);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(116, 25);
this.btnConnect.TabIndex = 24;
@@ -534,6 +538,23 @@
this.label7.TabIndex = 32;
this.label7.Text = "Cordonel LUT Update";
//
// tbxRadio
//
this.tbxRadio.Location = new System.Drawing.Point(128, 208);
this.tbxRadio.Name = "tbxRadio";
this.tbxRadio.ReadOnly = true;
this.tbxRadio.Size = new System.Drawing.Size(68, 20);
this.tbxRadio.TabIndex = 35;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(10, 212);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(116, 13);
this.label10.TabIndex = 36;
this.label10.Text = "Radio frequency[MHz]:";
//
// FrmLutUpdate
//
this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound;
@@ -608,7 +629,7 @@
private System.Windows.Forms.TextBox tbxMeterFw;
private System.Windows.Forms.TextBox tbxPcbId;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox tbxRegionRadio;
private System.Windows.Forms.TextBox tbxRegion;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label lblSelectDb;
private System.Windows.Forms.RadioButton rbtDb;
@@ -617,5 +638,7 @@
private System.Windows.Forms.RadioButton rbtProd;
private System.Windows.Forms.ComboBox cbxDbLuts;
private System.Windows.Forms.Button btnLoadfromDb;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox tbxRadio;
}
}
+10 -3
View File
@@ -13,6 +13,7 @@ using Newtonsoft.Json;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Utils.ProcessExec.EventArguments;
@@ -235,11 +236,17 @@ namespace Xylem.Common.Ui.GenesisToolBox
tbxMeterFw.Text = _currentGenesis.FwVersion;
tbxMeterMeterSize.Text = _currentGenesis.MeterSize;
tbxMeterLutCrc.Text = _currentGenesis.LutCrc;
tbxRegionRadio.Text = _currentGenesis.RegionRadio;
tbxRegion.Text = _currentGenesis.Region;
LogText("Meter FW Version: " + _currentGenesis.FwVersion);
LogText("Meter LUT CRC: " + _currentGenesis.LutCrc);
LogText("Meter Size: " + _currentGenesis.MeterSize);
LogText("Meter Region/Radio[MHz]: " + _currentGenesis.RegionRadio);
LogText("Meter Region: " + _currentGenesis.Region);
if (_currentGenesis.RadioFrequencyMhz != null)
{
tbxRadio.Text = $@"{_currentGenesis.RadioFrequencyMhz}";
LogText($"Meter radio frequency [MHz]: {_currentGenesis.RadioFrequencyMhz}");
}
lblConnectPcb.ForeColor = Color.Green;
CheckUpdateEnabled();
_currentGenesis.Logout();
@@ -379,7 +386,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
return;
LogText(StrSeparator);
LogText($"PCB ID: {_currentGenesis.PcbId}");
LogText($"Core Version: {_currentGenesis.CoreRevision}");
LogText($"Core Version: {GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}");
LogText("");
LogText("Installed Applications:");
@@ -9,6 +9,7 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Configuration;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
namespace Xylem.Common.Ui.GenesisToolBox
+6 -3
View File
@@ -1092,7 +1092,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
var sb = new StringBuilder();
sb.AppendLine($"PCBID: {_currentGenesis.PcbId}");
sb.AppendLine($"Date: {DateTimeOffset.UtcNow}");
sb.AppendLine($"System Core Revision: {_currentGenesis.CoreRevision}");
sb.AppendLine($"System Core Revision: {GenesisMeter.BuildFwVersionString(_currentGenesis.CoreRevision)}");
foreach (var fm in _currentGenesis.MeterAppListVersion.OrderBy(o => o.AppId))
{
var versionString = fm.IsInstalled
@@ -1879,15 +1879,18 @@ namespace Xylem.Common.Ui.GenesisToolBox
/// <remarks date="2021-Mar-10" author="Thomas Wiedebusch">
/// - Changed version from Uint32 to String
/// </remarks>
/// <remarks date="2022-Dec-02" author="Thomas Wiedebusch">
/// - Changed core revision from string to Int32?.
/// </remarks>
private void button3_Click(Object sender, EventArgs e)
{
var apps = new List<CordonelAppVersion>();
foreach (var item in _currentGenesis.MeterAppListVersion)
{
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, (item.AppId != 15 ? true : false)));
apps.Add(new CordonelAppVersion(item.AppId, item.StrVersion, item.AppId != 15));
}
apps.Add(new CordonelAppVersion(-1, _currentGenesis.CoreRevision, false));
apps.Add(new CordonelAppVersion(-1, BuildFwVersionString(_currentGenesis.CoreRevision), false));
var url = $"{ServiceUrls.MeterProcessStateUrl()}SetCordonelProgress?PcbId={_currentGenesis.PcbId}&ProgressName=toolbox&version={Assembly.GetExecutingAssembly().GetName().Version}";
var a = LocalWebRequest.PostRequestAsync(url, json: apps);
@@ -1,8 +1,4 @@
using Logic.ProductionToProductMapper.Cordonel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using XylemCommonUiLegacyGenCtl.Enums;
namespace XylemCommonUiLegacyGenCtl.DataPackage
@@ -226,6 +226,10 @@
<Project>{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}</Project>
<Name>Logic.ProductionToProductMapper</Name>
</ProjectReference>
<ProjectReference Include="..\..\Logic\ProductionOrderCore\ProductionOrderCore.csproj">
<Project>{6D2777BB-7A88-466D-A49B-3266F9BF0160}</Project>
<Name>ProductionOrderCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\Metrology\Measurements\Measurements.csproj">
<Project>{6CCDB656-C676-4360-BABA-C4596AAD175D}</Project>
<Name>Measurements</Name>
+1 -1
View File
@@ -1,5 +1,4 @@
using CordonelPreadjustmentUi;
using CordonelPreadjustmentUi.Parameters;
using CordonelPreadjustmentUi.Processes.Itinerary;
using Newtonsoft.Json;
using NLog;
@@ -12,6 +11,7 @@ using System.Text;
using System.Windows.Forms;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters;
using Xylem.Common.Utils.Logging;
using XylemCommonUiLegacyGenCtl.DataPackage;
+2 -2
View File
@@ -1,7 +1,7 @@
using Logic.ProductionToProductMapper.Cordonel;
using System;
using System;
using System.Linq;
using System.Runtime.InteropServices;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using XylemCommonUiLegacyGenCtl.DataPackage;
namespace XylemCommonUiLegacyGenCtl
+10 -10
View File
@@ -772,7 +772,7 @@
this.ctlMeterReady10.CustomerSerialNr = null;
this.ctlMeterReady10.LastTestBechState = 0;
this.ctlMeterReady10.Location = new System.Drawing.Point(3, 635);
this.ctlMeterReady10.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady10.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady10.Name = "ctlMeterReady10";
this.ctlMeterReady10.OrderNumber = null;
this.ctlMeterReady10.RadioAdress = null;
@@ -786,7 +786,7 @@
this.ctlMeterReady9.CustomerSerialNr = null;
this.ctlMeterReady9.LastTestBechState = 0;
this.ctlMeterReady9.Location = new System.Drawing.Point(3, 579);
this.ctlMeterReady9.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady9.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady9.Name = "ctlMeterReady9";
this.ctlMeterReady9.OrderNumber = null;
this.ctlMeterReady9.RadioAdress = null;
@@ -800,7 +800,7 @@
this.ctlMeterReady8.CustomerSerialNr = null;
this.ctlMeterReady8.LastTestBechState = 0;
this.ctlMeterReady8.Location = new System.Drawing.Point(3, 522);
this.ctlMeterReady8.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady8.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady8.Name = "ctlMeterReady8";
this.ctlMeterReady8.OrderNumber = null;
this.ctlMeterReady8.RadioAdress = null;
@@ -814,7 +814,7 @@
this.ctlMeterReady7.CustomerSerialNr = null;
this.ctlMeterReady7.LastTestBechState = 0;
this.ctlMeterReady7.Location = new System.Drawing.Point(3, 466);
this.ctlMeterReady7.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady7.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady7.Name = "ctlMeterReady7";
this.ctlMeterReady7.OrderNumber = null;
this.ctlMeterReady7.RadioAdress = null;
@@ -828,7 +828,7 @@
this.ctlMeterReady6.CustomerSerialNr = null;
this.ctlMeterReady6.LastTestBechState = 0;
this.ctlMeterReady6.Location = new System.Drawing.Point(3, 410);
this.ctlMeterReady6.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady6.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady6.Name = "ctlMeterReady6";
this.ctlMeterReady6.OrderNumber = null;
this.ctlMeterReady6.RadioAdress = null;
@@ -842,7 +842,7 @@
this.ctlMeterReady5.CustomerSerialNr = null;
this.ctlMeterReady5.LastTestBechState = 0;
this.ctlMeterReady5.Location = new System.Drawing.Point(3, 354);
this.ctlMeterReady5.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady5.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady5.Name = "ctlMeterReady5";
this.ctlMeterReady5.OrderNumber = null;
this.ctlMeterReady5.RadioAdress = null;
@@ -856,7 +856,7 @@
this.ctlMeterReady4.CustomerSerialNr = null;
this.ctlMeterReady4.LastTestBechState = 0;
this.ctlMeterReady4.Location = new System.Drawing.Point(3, 298);
this.ctlMeterReady4.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady4.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady4.Name = "ctlMeterReady4";
this.ctlMeterReady4.OrderNumber = null;
this.ctlMeterReady4.RadioAdress = null;
@@ -870,7 +870,7 @@
this.ctlMeterReady3.CustomerSerialNr = null;
this.ctlMeterReady3.LastTestBechState = 0;
this.ctlMeterReady3.Location = new System.Drawing.Point(3, 242);
this.ctlMeterReady3.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady3.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady3.Name = "ctlMeterReady3";
this.ctlMeterReady3.OrderNumber = null;
this.ctlMeterReady3.RadioAdress = null;
@@ -884,7 +884,7 @@
this.ctlMeterReady2.CustomerSerialNr = null;
this.ctlMeterReady2.LastTestBechState = 0;
this.ctlMeterReady2.Location = new System.Drawing.Point(3, 186);
this.ctlMeterReady2.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady2.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady2.Name = "ctlMeterReady2";
this.ctlMeterReady2.OrderNumber = null;
this.ctlMeterReady2.RadioAdress = null;
@@ -900,7 +900,7 @@
this.ctlMeterReady1.CustomerSerialNr = null;
this.ctlMeterReady1.LastTestBechState = 0;
this.ctlMeterReady1.Location = new System.Drawing.Point(3, 130);
this.ctlMeterReady1.Metersize = Logic.ProductionToProductMapper.Cordonel.MeterSize.DN40;
this.ctlMeterReady1.Metersize = Xylem.Common.Logic.ProductionOrderCore.OrderData.MeterSize.DN40;
this.ctlMeterReady1.Name = "ctlMeterReady1";
this.ctlMeterReady1.OrderNumber = null;
this.ctlMeterReady1.RadioAdress = null;
@@ -10,6 +10,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using XylemCommonUiLegacyGenCtl.DataPackage;
using XylemCommonUiLegacyGenCtl.Enums;
+2 -2
View File
@@ -1,5 +1,4 @@
using Logic.ProductionToProductMapper.Cordonel;
using Newtonsoft.Json;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -15,6 +14,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using XylemCommonUiLegacyGenCtl.DataPackage;
using XylemCommonUiLegacyGenCtl.Enums;
@@ -15,6 +15,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Logic.SoftwareAccessHelper;
using XylemCommonUiLegacyGenCtl.DataPackage;
using XylemCommonUiLegacyGenCtl.Enums;