sirt related, data logger + fdr mask
This commit is contained in:
parent
2ab293042c
commit
23c77a2ccf
@ -171,7 +171,7 @@
|
||||
</site>
|
||||
<site name="MeterProcessState(2)" id="4">
|
||||
<application path="/" applicationPool="Clr4IntegratedAppPool">
|
||||
<virtualDirectory path="/" physicalPath="D:\Projekte\SENSUS_GitLab\LAA_PRODUCTION\Common\Service\MeterProcessState" />
|
||||
<virtualDirectory path="/" physicalPath="C:\Users\SZLATEV\source\repos\laa_production\Common\Service\MeterProcessState" />
|
||||
</application>
|
||||
<bindings>
|
||||
<binding protocol="http" bindingInformation="*:50075:localhost" />
|
||||
|
||||
@ -72,5 +72,8 @@
|
||||
<Name>Common.Hardware.WaterMeter.eRegister</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="LoggingContent.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@ -1,15 +1,117 @@
|
||||
namespace CommonConsole
|
||||
{
|
||||
using System;
|
||||
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams;
|
||||
|
||||
public static class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
var alarmMask = 0 << AlarmMask.ALARM_REBOOT
|
||||
| 1 << AlarmMask.ALARM_LOW_BATTERY
|
||||
| 0 << AlarmMask.ALARM_VERY_LOW_BATTERY
|
||||
| 0 << AlarmMask.ALARM_CONFIG_ERROR
|
||||
| 1 << AlarmMask.ALARM_EMPTY_PIPE
|
||||
| 0 << AlarmMask.ALARM_MAGNETIC_TAMPER
|
||||
| 0 << AlarmMask.ALARM_REVERSE_FLOW
|
||||
| 1 << AlarmMask.ALARM_SUSPECT_LEAK
|
||||
| 1 << AlarmMask.ALARM_BROKEN_PIPE
|
||||
| 1 << AlarmMask.ALARM_LOW_PRESSURE
|
||||
| 1 << AlarmMask.ALARM_HIGH_PRESSURE
|
||||
| 1 << AlarmMask.ALARM_LOW_TEMPERATURE
|
||||
| 1 << AlarmMask.ALARM_HIGH_TEMPERATURE
|
||||
| 0 << AlarmMask.ALARM_RADIO_ERROR
|
||||
| 0 << AlarmMask.ALARM_METROLOGY_PARAMS
|
||||
| 0 << AlarmMask.ALARM_METROLOGY_MEASURE
|
||||
| 0 << AlarmMask.ALARM_MAX;
|
||||
var alarmBytes = BitConverter.GetBytes(alarmMask);
|
||||
Array.Reverse(alarmBytes);
|
||||
Console.WriteLine($"{"ALARMS:",11} {alarmMask,11} - {BitConverter.ToString(alarmBytes).Replace("-", "")}");
|
||||
|
||||
uint content = (uint)1 << LogContentBits.AlarmStatus // ALWAYS ON
|
||||
| (uint)1 << LogContentBits.BillingCounter // ALWAYS ON
|
||||
| (uint)0 << LogContentBits.ReverseCounter //
|
||||
| (uint)0 << LogContentBits.MaxFlow //
|
||||
//
|
||||
| (uint)0 << LogContentBits.MaxFlowTime //
|
||||
| (uint)0 << LogContentBits.PeakFlow //
|
||||
| (uint)0 << LogContentBits.PeakFlowTime //
|
||||
| (uint)0 << LogContentBits.AvgFlow //
|
||||
//
|
||||
| (uint)0 << LogContentBits.BrokenPipe //
|
||||
| (uint)0 << LogContentBits.BrokenPipeTime //
|
||||
| (uint)1 << LogContentBits.MinFlow //
|
||||
| (uint)0 << LogContentBits.MinFlowTime //
|
||||
//
|
||||
| (uint)0 << LogContentBits.ForwardCounter //
|
||||
| (uint)1 << LogContentBits._UTC32 // ALWAYS ON
|
||||
| (uint)0 << LogContentBits._MaskSelector_1_1 //
|
||||
| (uint)0 << LogContentBits._MaskSelector_1_2 //
|
||||
//
|
||||
| (uint)1 << LogContentBits.MinPress //
|
||||
| (uint)0 << LogContentBits.MinPressTime //
|
||||
| (uint)1 << LogContentBits.MaxPress //
|
||||
| (uint)0 << LogContentBits.MaxPressTime //
|
||||
//
|
||||
| (uint)1 << LogContentBits.MinTemp //
|
||||
| (uint)0 << LogContentBits.MinTempTime //
|
||||
| (uint)0 << LogContentBits.MaxTemp //
|
||||
| (uint)0 << LogContentBits.MaxTempTime //
|
||||
//
|
||||
| (uint)0 << LogContentBits.CurrentPress //
|
||||
| (uint)0 << LogContentBits.CurrentTemp //
|
||||
| (uint)1 << LogContentBits.ExtendedAlarm // ALWAYS ON
|
||||
| (uint)1 << LogContentBits._RecordCheckSum; // ALWAYS ON
|
||||
|
||||
var contentBytes = BitConverter.GetBytes(content);
|
||||
Array.Reverse(contentBytes);
|
||||
Console.WriteLine($"{"DATALOGGER:",11} {content,11} - {BitConverter.ToString(contentBytes).Replace("-", "")}");
|
||||
|
||||
uint fdr = (uint)1 << LogContentBits.AlarmStatus // ALWAYS ON
|
||||
| (uint)1 << LogContentBits.BillingCounter // ALWAYS ON
|
||||
| (uint)0 << LogContentBits.ReverseCounter //
|
||||
| (uint)0 << LogContentBits.MaxFlow //
|
||||
//
|
||||
| (uint)0 << LogContentBits.MaxFlowTime //
|
||||
| (uint)0 << LogContentBits.PeakFlow //
|
||||
| (uint)0 << LogContentBits.PeakFlowTime //
|
||||
| (uint)0 << LogContentBits.AvgFlow //
|
||||
//
|
||||
| (uint)0 << LogContentBits.BrokenPipe //
|
||||
| (uint)0 << LogContentBits.BrokenPipeTime //
|
||||
| (uint)0 << LogContentBits.MinFlow //
|
||||
| (uint)0 << LogContentBits.MinFlowTime //
|
||||
//
|
||||
| (uint)0 << LogContentBits.ForwardCounter //
|
||||
| (uint)1 << LogContentBits._UTC32 // ALWAYS ON
|
||||
| (uint)0 << LogContentBits._MaskSelector_1_1 //
|
||||
| (uint)0 << LogContentBits._MaskSelector_1_2 //
|
||||
//
|
||||
| (uint)0 << LogContentBits.MinPress //
|
||||
| (uint)0 << LogContentBits.MinPressTime //
|
||||
| (uint)0 << LogContentBits.MaxPress //
|
||||
| (uint)0 << LogContentBits.MaxPressTime //
|
||||
//
|
||||
| (uint)0 << LogContentBits.MinTemp //
|
||||
| (uint)0 << LogContentBits.MinTempTime //
|
||||
| (uint)0 << LogContentBits.MaxTemp //
|
||||
| (uint)0 << LogContentBits.MaxTempTime //
|
||||
//
|
||||
| (uint)0 << LogContentBits.CurrentPress //
|
||||
| (uint)0 << LogContentBits.CurrentTemp //
|
||||
| (uint)1 << LogContentBits.ExtendedAlarm // ALWAYS ON
|
||||
| (uint)1 << LogContentBits._RecordCheckSum; // ALWAYS ON
|
||||
|
||||
var fdrBytes = BitConverter.GetBytes(fdr);
|
||||
Array.Reverse(fdrBytes);
|
||||
Console.WriteLine($"{"FDR:",11} {fdr,11} - {BitConverter.ToString(fdrBytes).Replace("-", "")}");
|
||||
|
||||
} // CONTENT: 67110031 - 04-00-04-8F => 0400048F <-> 8F040004 04000C03
|
||||
|
||||
static void Main123()
|
||||
{
|
||||
// Console.WriteLine(BitConverter.ToInt32(new byte[] { 0xEC, 0xFF, 0xFF, 0xFF }, 0));
|
||||
|
||||
SIRTServer.StartServer(Console.WriteLine, Console.WriteLine, 6, 8);
|
||||
// SIRTServer.StartServer(Console.WriteLine, Console.WriteLine, 6, 8);
|
||||
// SIRTServer.StartProgramming(433, 412013443, "0E9FACC6A0E1EF1C3B27A49BAC216535");
|
||||
// SIRTServer.StartProgramming(433, 412013444, "0E9FACC6A0E1EF1C3B27A49BAC216535");
|
||||
// SIRTServer.StartProgramming(433, 412013356, "80D46C00E1BED73FE0DA85D95CA4BEE3");
|
||||
@ -53,12 +155,15 @@
|
||||
public const byte LOG_MAX_FLOW_TIME = 4; // 0x00000010, //!< Date/Time of MaxFlow
|
||||
public const byte LOG_PEAK_FLOW_VAL = 5; // 0x00000020, //!< Value of PeakFlow
|
||||
public const byte LOG_PEAK_FLOW_TIME = 6; // 0x00000040, //!< Date/Time of PeakFlow
|
||||
public const byte LOG_CUR_FLOW_VAL = 7; // 0x00000080, //!< Current Flow Value (Average of Period)
|
||||
public const byte LOG_AVG_FLOW_VAL = 7; // 0x00000080, //!< Current Flow Value (Average of Period)
|
||||
public const byte LOG_BROKEN_PIPE_FLOW_VAL = 8; // 0x00000100, //!< Value of BrokenPipe
|
||||
public const byte LOG_BROKEN_PIPE_FLOW_TIME = 9; // 0x00000200, //!< Date/Time of BrokenPipe
|
||||
public const byte LOG_MIN_FLOW_VAL = 10; // 0x00000400, //!< Value of FlowMin
|
||||
public const byte LOG_MIN_FLOW_TIME = 11; // 0x00000800, //!< Date/Time of FlowMin
|
||||
public const byte LOG_FORWARD_COUNTER = 12; // 0x00001000, //!< ForwardCounter
|
||||
// public const byte LOG_FORWARD_COUNTER = 12; // 0x00002000, //!< ForwardCounter
|
||||
// public const byte LOG_FORWARD_COUNTER = 12; // 0x00004000, //!< ForwardCounter
|
||||
// public const byte LOG_FORWARD_COUNTER = 12; // 0x00008000, //!< ForwardCounter
|
||||
public const byte LOG_MIN_PRESS_VAL = 13; // 0x00010000, //!< Pressure Minimum
|
||||
public const byte LOG_MIN_PRESS_TIME = 14; // 0x00020000, //!< Pressure Minimum Time
|
||||
public const byte LOG_MAX_PRESS_VAL = 15; // 0x00040000, //!< Pressure Maximum
|
||||
@ -72,6 +177,115 @@
|
||||
public const byte LOG_EXT_ALARM_STATE = 23; // 0x04000000, //<! Extended Alarm Status
|
||||
};
|
||||
|
||||
class LogContentBits
|
||||
{
|
||||
public const byte AlarmStatus = 0; // 0x00000001 ;The active alarm information at UTC32
|
||||
public const byte BillingCounter = 1; // 0x00000002 ;The billing counter at UTC32
|
||||
public const byte ReverseCounter = 2; // 0x00000004 ;The reverse counter at UTC32
|
||||
public const byte MaxFlow = 3; // 0x00000008 ;The maximum flow of the current FDR period UTC32n -… UTC32n-1
|
||||
public const byte MaxFlowTime = 4; // 0x00000010 ;The Date/Time information when Qmax happened in the FDR period
|
||||
public const byte PeakFlow = 5; // 0x00000020 ;The peak flow of the current FDR period
|
||||
public const byte PeakFlowTime = 6; // 0x00000040 ;The Date/Time information when Qpeak happened in the FDR period
|
||||
public const byte AvgFlow = 7; // 0x00000080 ;The average flow rate in the current FDR period
|
||||
public const byte BrokenPipe = 8; // 0x00000100 ;The weak flow in the current FDR period
|
||||
public const byte BrokenPipeTime = 9; // 0x00000200 ;The Date/Time information when Qweak happened in the FDR period
|
||||
public const byte MinFlow = 10; // 0x00000400 ;The minimum flow in the current FDR period
|
||||
public const byte MinFlowTime = 11; // 0x00000800 ;The Date/Time information when Qmin happened in the FDR period
|
||||
public const byte ForwardCounter = 12; // 0x00001000 ;The forward counter at UTC32
|
||||
public const byte _UTC32 = 13; // 0x00002000 ;Date/Time information when the record was stored.
|
||||
public const byte _MaskSelector_1_1 = 14; // 0x00004000 ;Two selector bits to switch the bitmask of the RF-communication between the internal pages
|
||||
public const byte _MaskSelector_1_2 = 15; // 0x00008000 ;Two selector bits to switch the bitmask of the RF-communication between the internal pages
|
||||
public const byte MinPress = 16; // 0x00010000 ;The minimum pressure in the current LOG period
|
||||
public const byte MinPressTime = 17; // 0x00020000 ;The number of 1-second intervals when Pmin happened in the LOG period
|
||||
public const byte MaxPress = 18; // 0x00040000 ;The maximum pressure in the current LOG period
|
||||
public const byte MaxPressTime = 19; // 0x00080000 ;The number of 1-second intervals when Pmax happened in the LOG period
|
||||
public const byte MinTemp = 20; // 0x00100000 ;The minimum temperature in the current LOG period
|
||||
public const byte MinTempTime = 21; // 0x00200000 ;The number of 1-second intervals when Tmin happened in the LOG period
|
||||
public const byte MaxTemp = 22; // 0x00400000 ;The maximum temperature in the current LOG period
|
||||
public const byte MaxTempTime = 23; // 0x00800000 ;The number of 1-second intervals when Tmax happened in the LOG period
|
||||
public const byte CurrentPress = 24; // 0x01000000 ;The last measured instantaneous pressure at RTC32
|
||||
public const byte CurrentTemp = 25; // 0x02000000 ;The last measured instantaneous temperature at RTC32
|
||||
public const byte ExtendedAlarm = 26; // 0x04000000 ;Similar to the AlarmStatus; P and T related Alarms.
|
||||
public const byte _RecordCheckSum = 27; // 0x08000000 ;A Checksum across the entire record
|
||||
public const byte _Reserved_1 = 28; // 0x10000000 ;A reserved mask for a further item
|
||||
public const byte _Reserved_2 = 29; // 0x20000000 ;A reserved mask for a further item
|
||||
public const byte _MaskSelector_2_1 = 30; // 0x40000000 ;The mirror of the MaskSelector_1
|
||||
public const byte _MaskSelector_2_2 = 31; // 0x80000000 ;The mirror of the MaskSelector_2
|
||||
|
||||
// --> MIN 1100 0000 0000 0100 0000 0000 0011
|
||||
// [0..26] 1100 0000 0011 0100 0000 0000 0011
|
||||
// [0..26] 1100 0001 0000 0100 0000 0000 1111
|
||||
// [0..26] 1100 0001 1111 0100 0000 0000 0011
|
||||
// [0..26] 1101 1111 1111 1100 0000 0000 0011
|
||||
// [0..26] 1100 0000 0000 0100 0000 0000 0011
|
||||
// [0..26] 1100 0000 0000 0100 1100 0000 0011
|
||||
// [0..26] 1100 0000 0011 0100 0000 1000 0011
|
||||
// [0..26] 1110 0110 0000 0100 0000 0000 0011
|
||||
// [0..26] 1100 0001 0010 0100 0000 0000 0011
|
||||
// [0..26] 1100 0001 0010 0100 0000 0001 0011
|
||||
// [0..26] 1111 0001 0010 0100 0000 0000 0011
|
||||
// [0..26] 1111 1111 1111 0100 0000 1000 0011
|
||||
// [0..26] 1111 1111 1111 1100 0000 1000 0011
|
||||
// [0..26] 1111 1111 1111 1100 0000 1111 0111
|
||||
// [0..26] 1100 0000 0010 0100 0000 1111 0111
|
||||
// [0..26] 1101 0000 0010 0100 0000 0000 0011
|
||||
// [0..26] 1101 0000 0010 0100 0000 1010 0011
|
||||
// [0..26] 1111 1000 0000 0100 0000 0000 0011
|
||||
// [0..26] 1110 0001 0010 0100 0000 0000 0011
|
||||
// [0..26] 1110 0001 0000 1100 0000 0000 0011
|
||||
// [0..26] 1110 0001 0000 1100 0000 1010 0011
|
||||
// [0..26] 1111 1001 0011 1100 0000 0000 0011
|
||||
// [0..26] 1100 0000 0000 0100 0000 0000 1011
|
||||
// [0..26] 1100 0000 0010 0100 0000 0000 0001
|
||||
// [0..26] 1100 0000 0010 0100 0000 0000 0011
|
||||
// [0..26] 1110 0000 0000 0100 0000 0000 0011
|
||||
// [0..26] 1101 0000 0010 0100 1010 1010 0011
|
||||
// [0..26] 1100 0001 0000 0100 0000 0000 0011
|
||||
// [0..26] 1100 0011 0000 0100 0100 0000 0011
|
||||
// [0..26] 1111 1111 0011 0100 0000 0000 0011
|
||||
// [0..26] 1111 1111 0011 0100 0000 0000 0111
|
||||
// [0..26] 1111 1111 1111 1100 0000 0000 0011
|
||||
// [0..26] 1111 1111 1111 1100 1111 1111 1111
|
||||
// --> MAX 1111 1111 1111 1100 1111 1111 1111
|
||||
}
|
||||
|
||||
[Flags]
|
||||
enum LogContentHex : uint
|
||||
{
|
||||
AlarmStatus = 0x00000001, // ;The active alarm information at UTC32
|
||||
BillingCounter = 0x00000002, // ;The billing counter at UTC32
|
||||
ReverseCounter = 0x00000004, // ;The reverse counter at UTC32
|
||||
MaxFlow = 0x00000008, // ;The maximum flow of the current FDR period UTC32n -… UTC32n-1
|
||||
MaxFlowTime = 0x00000010, // ;The Date/Time information when Qmax happened in the FDR period
|
||||
PeakFlow = 0x00000020, // ;The peak flow of the current FDR period
|
||||
PeakFlowTime = 0x00000040, // ;The Date/Time information when Qpeak happened in the FDR period
|
||||
AvgFlow = 0x00000080, // ;The average flow rate in the current FDR period
|
||||
BrokenPipe = 0x00000100, // ;The weak flow in the current FDR period
|
||||
BrokenPipeTime = 0x00000200, // ;The Date/Time information when Qweak happened in the FDR period
|
||||
MinFlow = 0x00000400, // ;The minimum flow in the current FDR period
|
||||
MinFlowTime = 0x00000800, // ;The Date/Time information when Qmin happened in the FDR period
|
||||
ForwardCounter = 0x00001000, // ;The forward counter at UTC32
|
||||
_UTC32 = 0x00002000, // ;Date/Time information when the record was stored.
|
||||
_MaskSelector_1_1 = 0x00004000, // ;Two selector bits to switch the bitmask of the RF-communication between the internal pages
|
||||
_MaskSelector_1_2 = 0x00008000, // ;
|
||||
MinPress = 0x00010000, // ;The minimum pressure in the current LOG period
|
||||
MinPressTime = 0x00020000, // ;The number of 1-second intervals when Pmin happened in the LOG period
|
||||
MaxPress = 0x00040000, // ;The maximum pressure in the current LOG period
|
||||
MaxPressTime = 0x00080000, // ;The number of 1-second intervals when Pmax happened in the LOG period
|
||||
MinTemp = 0x00100000, // ;The minimum temperature in the current LOG period
|
||||
MinTempTime = 0x00200000, // ;The number of 1-second intervals when Tmin happened in the LOG period
|
||||
MaxTemp = 0x00400000, // ;The maximum temperature in the current LOG period
|
||||
MaxTempTime = 0x00800000, // ;The number of 1-second intervals when Tmax happened in the LOG period
|
||||
CurrentPress = 0x01000000, // ;The last measured instantaneous pressure at RTC32
|
||||
CurrentTemp = 0x02000000, // ;The last measured instantaneous temperature at RTC32
|
||||
ExtendedAlarm = 0x04000000, // ;"Similar to the AlarmStatus; P and T related Alarms. "
|
||||
_RecordCheckSum = 0x08000000, // ;A Checksum across the entire FDR record
|
||||
_Reserved_1 = 0x10000000, // ;A reserved mask for a further item
|
||||
_Reserved_2 = 0x20000000, // ;A reserved mask for a further item
|
||||
_MaskSelector_2_1 = 0x40000000, // ;The mirror of the MaskSelector_1
|
||||
_MaskSelector_2_2 = 0x80000000, // ;The mirror of the MaskSelector_2
|
||||
}
|
||||
|
||||
class AlarmMask
|
||||
{
|
||||
public const byte ALARM_REBOOT = 0; // immer An
|
||||
@ -281,7 +495,7 @@
|
||||
| 1 <<FDRMask.LOG_REVERSE_COUNTER
|
||||
| 1 <<FDRMask.LOG_MIN_FLOW_TIME
|
||||
| 1 <<FDRMask.LOG_MIN_FLOW_VAL
|
||||
| 1 <<FDRMask.LOG_CUR_FLOW_VAL
|
||||
| 1 <<FDRMask.LOG_AVG_FLOW_VAL
|
||||
| 1 <<FDRMask.LOG_PEAK_FLOW_TIME
|
||||
| 1 <<FDRMask.LOG_PEAK_FLOW_VAL
|
||||
| 1 <<FDRMask.LOG_MAX_FLOW_TIME
|
||||
|
||||
@ -76,10 +76,7 @@
|
||||
{
|
||||
base.OnSEMIReceived(semi);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.SetError();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,24 +73,25 @@
|
||||
public void SetCompleted()
|
||||
{
|
||||
this.State = SIRTTaskState.Completed;
|
||||
|
||||
|
||||
this.awaiter.Set();
|
||||
}
|
||||
|
||||
public void SetPending()
|
||||
{
|
||||
this.State = SIRTTaskState.Pending;
|
||||
|
||||
// this.awaiter.Set();
|
||||
}
|
||||
|
||||
public void SetRunning()
|
||||
{
|
||||
this.State = SIRTTaskState.Running;
|
||||
|
||||
this.awaiter.Reset();
|
||||
}
|
||||
|
||||
public virtual byte[] Start()
|
||||
{
|
||||
this.awaiter.Set();
|
||||
this.awaiter.Reset();
|
||||
|
||||
this.State = SIRTTaskState.Running;
|
||||
@ -101,11 +102,7 @@
|
||||
|
||||
public void Wait()
|
||||
{
|
||||
if (this.awaiter.IsSet)
|
||||
{
|
||||
this.awaiter.Reset();
|
||||
}
|
||||
|
||||
this.awaiter.Reset();
|
||||
this.awaiter.Wait(this.Timeout);
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public class Eregister
|
||||
{
|
||||
@ -46,48 +45,36 @@
|
||||
|
||||
internal IEnumerable<EregisterTask> LoadInspectionInitializationTasks()
|
||||
{
|
||||
//this.executionType = nameof(LoadInspectionInitializationTasks);
|
||||
//var features = this.parameters.LoadInspectionInitializationFeatures();
|
||||
this.executionType = nameof(LoadInspectionInitializationTasks);
|
||||
|
||||
//if (features.RequestAddress > 0 && features.ResponseAddress > 0)
|
||||
//{
|
||||
// this.LoadProgrammingParameters(features);
|
||||
if (this.parameters.Completed)
|
||||
{
|
||||
return new EregisterTask[] { };
|
||||
}
|
||||
|
||||
// if (this.runningTasks.Any())
|
||||
// {
|
||||
// this.runningTasks.Enqueue(new EregisterChangeMeterTypeTask(features.Frequency)
|
||||
// {
|
||||
// SlotNr = features.SlotNr,
|
||||
// PoNr = features.PoNr,
|
||||
// SerialNr = features.SerialNr,
|
||||
// DelPamSemi = true,
|
||||
// RequestAddress = features.RequestAddress,
|
||||
// ResponseAddress = features.ResponseAddress,
|
||||
// EncryptionKey = features.EncryptionKey,
|
||||
// Name = "Change Meter Type"
|
||||
// });
|
||||
// }
|
||||
//}
|
||||
var features = this.parameters.LoadInspectionInitializationFeatures();
|
||||
|
||||
//return this.runningTasks.AsEnumerable();
|
||||
if (features.RequestAddress > 0 && features.ResponseAddress > 0)
|
||||
{
|
||||
this.LoadProgrammingParameters(features);
|
||||
|
||||
return this.LoadInspectionFinalizationTasks();
|
||||
if (this.runningTasks.Any())
|
||||
{
|
||||
this.runningTasks.Enqueue(new EregisterChangeMeterTypeTask(features.Frequency)
|
||||
{
|
||||
SlotNr = features.SlotNr,
|
||||
PoNr = features.PoNr,
|
||||
SerialNr = features.SerialNr,
|
||||
DelPamSemi = true,
|
||||
RequestAddress = features.RequestAddress,
|
||||
ResponseAddress = features.ResponseAddress,
|
||||
EncryptionKey = features.EncryptionKey,
|
||||
Name = "Change Meter Type"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//this.runningTasks.Enqueue(new EregisterTask(features.Frequency)
|
||||
//{
|
||||
// //WakeUpCmd = true,
|
||||
// //WakeUpModul = true,
|
||||
// SlotNr = features.SlotNr,
|
||||
// PoNr = features.PoNr,
|
||||
// SerialNr = features.SerialNr,
|
||||
// RequestAddress = features.RequestAddress,
|
||||
// ResponseAddress = features.ResponseAddress,
|
||||
// EncryptionKey = features.EncryptionKey,
|
||||
// IsEncrypted = this.parameters.IsEncrypted,
|
||||
// Data = new ChangeWakeUp(WakeUpMode.StayAwake).Append(new ProvidePin(AuthLevel.II))
|
||||
//});
|
||||
|
||||
//return this.runningTasks.AsEnumerable();
|
||||
return this.runningTasks.ToArray();
|
||||
}
|
||||
|
||||
internal IEnumerable<EregisterTask> LoadInspectionFinalizationTasks()
|
||||
@ -95,31 +82,17 @@
|
||||
this.executionType = nameof(LoadInspectionFinalizationTasks);
|
||||
var features = this.parameters.LoadInspectionFinalizationFeatures();
|
||||
|
||||
if (this.parameters.Completed)
|
||||
{
|
||||
return new EregisterTask[] { };
|
||||
}
|
||||
|
||||
if (features.RequestAddress > 0 && features.ResponseAddress > 0)
|
||||
{
|
||||
this.LoadProgrammingParameters(features);
|
||||
|
||||
if (this.parameters.StatusFertigung == 30)
|
||||
{
|
||||
// Setting all transmision intervals at the end
|
||||
//this.runningTasks.Enqueue(new EregisterTask(features.Frequency)
|
||||
//{
|
||||
// SlotNr = features.SlotNr,
|
||||
// PoNr = features.PoNr,
|
||||
// SerialNr = features.SerialNr,
|
||||
// RequestAddress = features.RequestAddress,
|
||||
// ResponseAddress = features.ResponseAddress,
|
||||
// EncryptionKey = features.EncryptionKey,
|
||||
// IsEncrypted = this.parameters.IsEncrypted,
|
||||
// Data = new ChangeWakeUp((WakeUpMode)this.parameters.Wake_Up_Interval)
|
||||
// .Append(new ChangeNumberOfLatWindows(this.parameters.LAT_Interval))
|
||||
// .Append(new ChangeTransmissionInterval(this.parameters.Transmission_Intervall))
|
||||
// .Append(new OpenMeteringTransmitionIntervalWMBus(this.parameters.OMS_Interval))
|
||||
// .Append(new ProvidePin(AuthLevel.II)),
|
||||
// Name = "0, 2, 16, 17",
|
||||
//});
|
||||
|
||||
// The last checked DEBUG telegram
|
||||
this.runningTasks.Enqueue(new EregisterCheckFinalizationTask(this.parameters, features.Frequency)
|
||||
{
|
||||
WakeUpModul = true,
|
||||
@ -131,9 +104,25 @@
|
||||
EncryptionKey = features.EncryptionKey,
|
||||
IsEncrypted = this.parameters.IsEncrypted,
|
||||
});
|
||||
|
||||
this.runningTasks.Enqueue(new EregisterTask(this.parameters.Frequency)
|
||||
{
|
||||
Name = "0, 2, 16",
|
||||
SlotNr = features.SlotNr,
|
||||
PoNr = features.PoNr,
|
||||
SerialNr = features.SerialNr,
|
||||
RequestAddress = features.RequestAddress,
|
||||
ResponseAddress = features.ResponseAddress,
|
||||
EncryptionKey = features.EncryptionKey,
|
||||
IsEncrypted = this.parameters.IsEncrypted,
|
||||
Data = new ChangeWakeUp((WakeUpMode)this.parameters.Wake_Up_Interval)
|
||||
.Append(new ChangeNumberOfLatWindows(this.parameters.LAT_Interval))
|
||||
.Append(new ChangeTransmissionInterval(this.parameters.Transmission_Intervall))
|
||||
.Append(new ProvidePin(AuthLevel.II)),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return this.runningTasks.AsEnumerable();
|
||||
}
|
||||
|
||||
@ -143,6 +132,11 @@
|
||||
|
||||
internal void StartProgrammingAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
if (this.parameters.Completed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
this.history.SerienNr = this.parameters.SerienNr;
|
||||
this.history.Adresse = this.parameters.Adresse;
|
||||
this.history.TempAdresse = this.parameters.TempAdresse;
|
||||
@ -153,7 +147,6 @@
|
||||
var lat = default(LAT);
|
||||
var debug = default(DEBUG);
|
||||
var semi = default(SEMI);
|
||||
var awaiter = new ManualResetEventSlim(false);
|
||||
|
||||
while (this.runningTasks.TryPeek(out task) && task.State != SIRTTaskState.Cancelled && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
@ -173,30 +166,15 @@
|
||||
|
||||
if (task.ErrorMessage != null)
|
||||
{
|
||||
var error = task.ErrorMessage;
|
||||
var message = $"{error.Text}{Environment.NewLine}{Environment.NewLine}Möchten Sie fortfahren?";
|
||||
var result = MessageBox.Show(message, error.Title, MessageBoxButtons.YesNo);
|
||||
|
||||
if (result == DialogResult.No)
|
||||
{
|
||||
task.SetCancelled();
|
||||
|
||||
stopProgramming = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.state.Bemerkung += task.ErrorMessage.Title + Environment.NewLine;
|
||||
this.state.Bemerkung += task.ErrorMessage.Text + Environment.NewLine;
|
||||
}
|
||||
}
|
||||
|
||||
task.MessageReceived -= this.history.Push;
|
||||
|
||||
if (stopProgramming)
|
||||
{
|
||||
if (task.FactoryState == FactoryState.Shipment)
|
||||
{
|
||||
task.Label = "GESCHLOSSEN";
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -210,9 +188,20 @@
|
||||
debug = task.DEBUGMessage;
|
||||
semi = task.SEMIMessage;
|
||||
factoryState = task.FactoryState;
|
||||
this.state.SemiDebugDatum = DateTime.Now;
|
||||
}
|
||||
|
||||
this.runningTasks.TryDequeue(out task);
|
||||
if (task.RequestAddress == this.parameters.Adresse)
|
||||
{
|
||||
this.state.FunkadresseDatum = DateTime.Now;
|
||||
}
|
||||
|
||||
if (!this.runningTasks.TryDequeue(out task))
|
||||
{
|
||||
stopProgramming = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (task.State == SIRTTaskState.Cancelled)
|
||||
{
|
||||
@ -227,13 +216,12 @@
|
||||
return;
|
||||
}
|
||||
|
||||
this.state.ShouldUpdate = true; // task.FactoryState == FactoryState.Shipment;
|
||||
this.state.Bemerkung = this.executionType;
|
||||
this.state.ShouldUpdate = true;
|
||||
this.state.Bemerkung += this.executionType;
|
||||
this.state.Fabrikationsnummer = debug?.PCBID;
|
||||
this.state.BUP = lat?.ToString()?.Replace('-', '\t');
|
||||
this.state.DEBUG = debug?.ToString()?.Replace('-', '\t');
|
||||
this.state.SEMI = semi?.ToString()?.Replace('-', '\t');
|
||||
this.state.SemiDebugDatum = DateTime.Now;
|
||||
this.state.Seriennummer = this.parameters.SerienNr;
|
||||
this.state.TempAdresse = this.parameters.TempAdresse;
|
||||
|
||||
@ -241,7 +229,6 @@
|
||||
&& factoryState == FactoryState.Shipment
|
||||
&& this.parameters.StatusFertigung == 30)
|
||||
{
|
||||
this.state.FunkadresseDatum = DateTime.Now;
|
||||
this.state.GeschlossenDatum = DateTime.Now;
|
||||
}
|
||||
}
|
||||
@ -286,6 +273,22 @@
|
||||
|
||||
var frequency = this.parameters.Frequency;
|
||||
|
||||
this.runningTasks.Enqueue(new EregisterTask(frequency)
|
||||
{
|
||||
Name = "WUP",
|
||||
SlotNr = features.SlotNr,
|
||||
PoNr = features.PoNr,
|
||||
SerialNr = features.SerialNr,
|
||||
RequestAddress = features.RequestAddress,
|
||||
ResponseAddress = features.ResponseAddress,
|
||||
EncryptionKey = features.EncryptionKey,
|
||||
IsEncrypted = this.parameters.IsEncrypted,
|
||||
Data = new ChangeWakeUp(WakeUpMode.StayAwake)
|
||||
.Append(new ChangeNumberOfLatWindows(this.parameters.LatWindowsInitialization))
|
||||
.Append(new ChangeTransmissionInterval(this.parameters.TransmissionIntervalInitialization))
|
||||
.Append(new ProvidePin(AuthLevel.II)),
|
||||
});
|
||||
|
||||
this.runningTasks.Enqueue(new EregisterCheckInitializationTask(this.parameters, frequency)
|
||||
{
|
||||
SlotNr = features.SlotNr,
|
||||
|
||||
@ -17,12 +17,11 @@
|
||||
|
||||
public EregisterTask(int frequency)
|
||||
{
|
||||
this.Timeout = 5000;
|
||||
this.DelPamSemi = true;
|
||||
this.Frequency = frequency;
|
||||
this.RSSI = new RSSI(0, frequency);
|
||||
this.Label = nameof(SIRTTaskState.Pending);
|
||||
// this.AnyTelegramReceived = true;
|
||||
this.AnyTelegramReceived = true;
|
||||
}
|
||||
|
||||
public event Action<EregisterTask> Changed;
|
||||
@ -44,12 +43,7 @@
|
||||
{
|
||||
this.label = value; // $"({this.runsCount}) {value}";
|
||||
|
||||
var changeEvent = this.Changed;
|
||||
|
||||
if (changeEvent != null)
|
||||
{
|
||||
changeEvent(this);
|
||||
}
|
||||
this.Changed?.Invoke(this);
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,7 +146,6 @@
|
||||
|
||||
if (type == SIRTConstants.BUP) // always: 13 - enc: CRC != 0
|
||||
{
|
||||
this.Label = nameof(SIRTConstants.BUP);
|
||||
var bupMessage = new BUP(data, this.P11);
|
||||
this.IsEncrypted = bupMessage.Crc != 0;
|
||||
|
||||
@ -163,10 +156,10 @@
|
||||
}
|
||||
|
||||
this.BUPMessage = bupMessage;
|
||||
this.Label = nameof(SIRTConstants.BUP);
|
||||
}
|
||||
else if (type == SIRTConstants.LAT) // always: 13 - enc: CRC != 0
|
||||
{
|
||||
this.Label = nameof(SIRTConstants.LAT);
|
||||
var latMessage = new LAT(data, this.P11);
|
||||
this.IsEncrypted = latMessage.Crc != 0;
|
||||
|
||||
@ -177,6 +170,7 @@
|
||||
}
|
||||
|
||||
this.LATMessage = latMessage;
|
||||
this.Label = nameof(SIRTConstants.LAT);
|
||||
}
|
||||
else if (type == SIRTConstants.DEBUG) // plain: 52 - enc: 54
|
||||
{
|
||||
@ -186,14 +180,19 @@
|
||||
{
|
||||
data = data.DecryptResponse(this.EncryptionKey);
|
||||
}
|
||||
|
||||
this.Label = nameof(SIRTConstants.DEBUG);
|
||||
|
||||
this.DEBUGMessage = new DEBUG(data, this.P11);
|
||||
this.FactoryState = this.DEBUGMessage.FactoryState;
|
||||
|
||||
if (this.LATMessage != null && this.SEMIMessage != null && this.SEMIMessage.PAMStatus == PAMStatus.OK)
|
||||
if (this.LATMessage is null)
|
||||
{
|
||||
this.SetCompleted();
|
||||
this.Label = "!LAT";
|
||||
|
||||
this.SetPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Label = nameof(SIRTConstants.DEBUG);
|
||||
}
|
||||
}
|
||||
else if (type == SIRTConstants.SEMI) // plain: 91 - enc: 93
|
||||
@ -214,10 +213,14 @@
|
||||
if (this.LATMessage is null)
|
||||
{
|
||||
this.Label = "!LAT";
|
||||
|
||||
this.SetPending();
|
||||
}
|
||||
else if (this.request.Length > 0 && this.request.Payload[0] == Pam.GetDebug && this.DEBUGMessage == null)
|
||||
{
|
||||
this.Label = "!DEBUG";
|
||||
|
||||
this.SetPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -246,11 +249,14 @@
|
||||
{
|
||||
this.P12 = new P12(response.P1);
|
||||
this.Label = "AKN";
|
||||
|
||||
this.SetPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Label = "NA";
|
||||
|
||||
this.SetPending();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -219,7 +219,7 @@
|
||||
|
||||
public byte ActivationByThreshold { get; set; }
|
||||
|
||||
// [CompareProperty]
|
||||
[CompareProperty]
|
||||
public ushort OMS_Interval { get; set; }
|
||||
|
||||
public uint DisplayVolume { get; set; }
|
||||
@ -263,11 +263,17 @@
|
||||
ResponseAddress = (uint)(this.IsEncrypted ? this.TempAdresse : this.Adresse),
|
||||
Frequency = this.Frequency,
|
||||
EncryptionKey = this.EncryptionKey.GetEncryptionKey(),
|
||||
/////////////////////////////////////////////////////
|
||||
ChangeMeterReading = this.DisplayVolume,
|
||||
Debug = new EregisterDebugFeatures()
|
||||
};
|
||||
|
||||
if (this.Completed)
|
||||
{
|
||||
return features;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
features.Debug = new EregisterDebugFeatures();
|
||||
features.ChangeMeterReading = this.DisplayVolume;
|
||||
|
||||
if (!this.IsEbeling && !this.IsFuhzoe)
|
||||
{
|
||||
features.Debug.DisableOTAFirmwareUpdate = this.DisableOTA;
|
||||
@ -276,7 +282,6 @@
|
||||
|
||||
if (this.StatusFertigung != 30)
|
||||
{
|
||||
features.ChangeWakeUp = WakeUpMode.StayAwake;
|
||||
features.ChangeMeterReading = 333_333_333;
|
||||
features.Debug = new EregisterDebugFeatures
|
||||
{
|
||||
@ -298,9 +303,9 @@
|
||||
features.Debug.ChangeState = FactoryState.Shipment;
|
||||
}
|
||||
|
||||
features.ChangeWakeUp = (WakeUpMode)this.Wake_Up_Interval;
|
||||
features.ChangeNumberOfLatWindows = this.LAT_Interval;
|
||||
features.ChangeTransmissionInterval = this.Transmission_Intervall;
|
||||
// features.ChangeWakeUp = (WakeUpMode)this.Wake_Up_Interval;
|
||||
// features.ChangeNumberOfLatWindows = this.LAT_Interval;
|
||||
// features.ChangeTransmissionInterval = this.Transmission_Intervall;
|
||||
features.OpenMeteringTransmitionIntervalWMBus = this.OMS_Interval;
|
||||
features.ChangeRadioId = (uint)this.Adresse;
|
||||
features.ChangeMeterId = this.MeterId;
|
||||
@ -338,7 +343,6 @@
|
||||
Counter = this.Data_Logging_Counter,
|
||||
AlarmState = this.Data_Logging_Alarm_State,
|
||||
};
|
||||
features.ChangeWakeUp = WakeUpMode.SleepAutoOn;
|
||||
features.ChangeFixedDateReadingSettings = new ChangeFixedDateReadingSettings
|
||||
{
|
||||
DayOfMonth = this.FDR_Day_Of_Data_Reading,
|
||||
@ -378,9 +382,9 @@
|
||||
Frequency = this.Frequency,
|
||||
EncryptionKey = this.EncryptionKey.GetEncryptionKey(),
|
||||
/////////////////////////////////////////////////////
|
||||
ChangeWakeUp = WakeUpMode.StayAwake,
|
||||
ChangeTransmissionInterval = this.TransmissionIntervalInitialization,
|
||||
ChangeNumberOfLatWindows = this.LatWindowsInitialization,
|
||||
// ChangeWakeUp = WakeUpMode.StayAwake,
|
||||
// ChangeTransmissionInterval = this.TransmissionIntervalInitialization,
|
||||
// ChangeNumberOfLatWindows = this.LatWindowsInitialization,
|
||||
ChangeMeterReading = 111_111_111,
|
||||
WirelessMBusMode = this.MBusStatus,
|
||||
SetMetrologyParameters = new SetMetrologyParameters
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
{
|
||||
public long? Fabrikationsnummer { get; set; }
|
||||
|
||||
public string Bemerkung { get; set; }
|
||||
public string Bemerkung { get; set; } = string.Empty;
|
||||
|
||||
public string BUP { get; set; }
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<!--<add key="ConnectionString" value="Server=SLASQL01.emea.sensus.net; Database=Testreplikation; User ID=sa; Password=sqlserver;" />-->
|
||||
<add key="ConnectionString" value="Server=SLASQL01.emea.sensus.net; Database=Auftrag; User ID=sa; Password=sqlserver;" />
|
||||
<add key="EncryptionKeisUrl" value="http://sla12iis01.emea.sensus.net/LaaProductionWeb/api/eregister/radiokey/byserialno/{0}" />
|
||||
<add key="SIRTComPorts" value="COM6" />
|
||||
<add key="SIRTComPorts" value="COM6,COM8" />
|
||||
<add key="PSNR" value="1001" />
|
||||
<add key="SIRT_433" value=""/>
|
||||
<add key="SIRT_868" value=""/>
|
||||
|
||||
@ -33,7 +33,8 @@
|
||||
{
|
||||
CreateDirs = true,
|
||||
KeepFileOpen = true,
|
||||
FileName = file
|
||||
FileName = file,
|
||||
Layout = "${message}"
|
||||
});
|
||||
|
||||
LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user