From d5b6e033e4161d12e75b1a38683ee256afcf1ac3 Mon Sep 17 00:00:00 2001 From: Stoyan Zlatev Date: Tue, 29 Apr 2025 11:24:33 +0200 Subject: [PATCH] e-register reset on AKN --- .../Common.Hardware.SIRT/Parameters/P12.cs | 39 ++++++--------- .../Common.Hardware.SIRT/SIRTBroadcaster.cs | 50 +++++++------------ .../Common.Hardware.SIRT/SIRTConstants.cs | 2 +- .../Tasks/DeleteFromPamPoolTask.cs | 2 +- .../Tasks/IdentifySIRTTask.cs | 4 +- .../Common.Hardware.SIRT/Tasks/ReadPamTask.cs | 4 +- .../Tasks/ReadRegisterTask.cs | 4 +- .../Common.Hardware.SIRT/Tasks/SIRTTask.cs | 16 ++++-- .../Tasks/WritePamTask.cs | 2 +- .../Tasks/WriteRegisterTask.cs | 4 +- .../Eregister.cs | 36 ++++++------- .../EregisterTask.cs | 18 ++++--- .../TaskStateToBackgroundBrushConverter.cs | 2 +- .../TaskStateToForegroundBrushConverter.cs | 2 +- 14 files changed, 88 insertions(+), 97 deletions(-) diff --git a/Common/Hardware/Common.Hardware.SIRT/Parameters/P12.cs b/Common/Hardware/Common.Hardware.SIRT/Parameters/P12.cs index a321d7e3..b92a0094 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Parameters/P12.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Parameters/P12.cs @@ -166,47 +166,40 @@ public override string ToString() { - var x = new StringBuilder(); - if (this.BufFull) { - x.AppendLine(nameof(this.BufFull)); + return nameof(this.BufFull); } - if (this.OsBusy) + else if (this.OsBusy) { - x.AppendLine(nameof(this.OsBusy)); + return nameof(this.OsBusy); } - if (this.WrongCRC) + else if (this.WrongCRC) { - x.AppendLine(nameof(this.WrongCRC)); + return nameof(this.WrongCRC); } - if (this.CmdNotExecuted) + else if (this.CmdNotExecuted) { - x.AppendLine(nameof(this.CmdNotExecuted)); + return nameof(this.CmdNotExecuted); } - if (this.CmdUnknown) + else if (this.CmdUnknown) { - x.AppendLine(nameof(this.CmdUnknown)); + return nameof(this.CmdUnknown); } - if (this.NoEntry) + else if (this.NoEntry) { - x.AppendLine(nameof(this.NoEntry)); + return nameof(this.NoEntry); } - if (this.ByteUnknown) + else if (this.ByteUnknown) { - x.AppendLine(nameof(this.ByteUnknown)); + return nameof(this.ByteUnknown); } - if (this.WildCardAddr) + else if (this.WildCardAddr) { - x.AppendLine(nameof(this.WildCardAddr)); + return nameof(this.WildCardAddr); } - if (x.Length > 0) - { - return x.ToString().Trim(); - } - - return default(string); + return "AKN"; } public static implicit operator byte(P12 p11) diff --git a/Common/Hardware/Common.Hardware.SIRT/SIRTBroadcaster.cs b/Common/Hardware/Common.Hardware.SIRT/SIRTBroadcaster.cs index ad98a7ff..efd50b46 100644 --- a/Common/Hardware/Common.Hardware.SIRT/SIRTBroadcaster.cs +++ b/Common/Hardware/Common.Hardware.SIRT/SIRTBroadcaster.cs @@ -114,44 +114,28 @@ /// Checks if the given task can be sent then replaces existing SIRTTask (if any) and starts the new one. /// public bool Start(SIRTTask task) - { - var address = task.RequestAddress; - var addresses = this.pampool.Values.AsEnumerable(); - var canStart = this.pampool.Count < 5 || addresses.Any(x => x == 0 || x == address); - SIRTLogger.LogMessage($"{this.PortName}|{this.pampool.Count} addresses in pam pool: {string.Join(", ", address)}"); - SIRTLogger.LogMessage($"{this.PortName}|Can start task: {canStart}"); - - if (canStart) - { - var newTask = this.tasks.AddOrUpdate( - key: address, - addValueFactory: addr => task, - updateValueFactory: (addr, oldTask) => - { - this.DeleteFromPamPool(oldTask); - - return task; - }); - - var bytes = newTask.Start(); - this.sirtStream.Write(bytes); - SIRTLogger.LogMessage($"{this.PortName}|RX: {BitConverter.ToString(bytes)}"); - } - - return canStart; - } - - public void Write(SIRTTask task) { if (task.Frequency == this.Frequency) { - task.Timestamp = DateTimeOffset.UtcNow; - task.SirtId = this.Id; - var bytes = task.Start(); + var address = task.RequestAddress; + var addresses = this.pampool.Values.AsEnumerable(); - this.sirtStream.Write(bytes); - SIRTLogger.LogMessage($"{this.PortName}|TX: {BitConverter.ToString(bytes)}"); + if (this.pampool.Count < 5 || addresses.Any(x => x == 0 || x == address)) + { + var newTask = this.tasks.AddOrUpdate( + key: address, + addValueFactory: addr => task, + updateValueFactory: (addr, oldTask) => task); + + var bytes = newTask.Start(); + this.sirtStream.Write(bytes); + SIRTLogger.LogMessage($"{this.PortName}|TX: {BitConverter.ToString(bytes)}"); + + return true; + } } + + return false; } private void LogContinuationError(Task task) diff --git a/Common/Hardware/Common.Hardware.SIRT/SIRTConstants.cs b/Common/Hardware/Common.Hardware.SIRT/SIRTConstants.cs index f561c5e9..ac050e10 100644 --- a/Common/Hardware/Common.Hardware.SIRT/SIRTConstants.cs +++ b/Common/Hardware/Common.Hardware.SIRT/SIRTConstants.cs @@ -20,7 +20,7 @@ public const byte LEN_IX = 8; public const byte DATA_IX = 9; - public static byte ACKN_ANSW = 0x12; + public static byte AKN_ANS = 0x12; public static byte FROM_AIR = 0x11; public static byte LAT = 0x01; diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/DeleteFromPamPoolTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/DeleteFromPamPoolTask.cs index 12ccee38..544461d6 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/DeleteFromPamPoolTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/DeleteFromPamPoolTask.cs @@ -11,6 +11,6 @@ } public override void Push(SIRTMessage _) - => this.Complete(); + => this.SetCompleted(); } } diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/IdentifySIRTTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/IdentifySIRTTask.cs index f3f199ec..58cbe945 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/IdentifySIRTTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/IdentifySIRTTask.cs @@ -13,7 +13,7 @@ public override void Push(SIRTMessage response) { - if (response.Command == SIRTConstants.ACKN_ANSW) + if (response.Command == SIRTConstants.AKN_ANS) { this.Payload = response.Payload; @@ -22,7 +22,7 @@ this.SirtId = BitConverter.ToString(this.Payload); this.Frequency = this.SirtId[10] == '0' ? 868 : 433; - this.Complete(); + this.SetCompleted(); } } } diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadPamTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadPamTask.cs index 76149984..eff9e401 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadPamTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadPamTask.cs @@ -12,11 +12,11 @@ public override void Push(SIRTMessage response) { - if (response.Command == SIRTConstants.ACKN_ANSW && response.P1 == 0) + if (response.Command == SIRTConstants.AKN_ANS && response.P1 == 0) { this.Payload = response.Payload; - this.Complete(); + this.SetCompleted(); } } } diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadRegisterTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadRegisterTask.cs index f8b82990..afd6ef89 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadRegisterTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/ReadRegisterTask.cs @@ -15,11 +15,11 @@ public override void Push(SIRTMessage response) { - if (response.Command == SIRTConstants.ACKN_ANSW) + if (response.Command == SIRTConstants.AKN_ANS) { this.Payload = response.Payload; - this.Complete(); + this.SetCompleted(); } } } diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/SIRTTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/SIRTTask.cs index 9a05255b..291c362a 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/SIRTTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/SIRTTask.cs @@ -60,23 +60,31 @@ public int Timeout { get; set; } = 10_000; - public void Cancel() + public abstract void Push(SIRTMessage response); + + public void SetCancelled() { this.awaiter.Set(); this.State = SIRTTaskState.Cancelled; } - public void Complete() + public void SetCompleted() { this.awaiter.Set(); this.State = SIRTTaskState.Completed; } - public abstract void Push(SIRTMessage response); + public void SetPending() + { + this.awaiter.Set(); + this.awaiter.Reset(); - public void Running() + this.State = SIRTTaskState.Pending; + } + + public void SetRunning() { this.State = SIRTTaskState.Running; this.awaiter.Reset(); diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/WritePamTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/WritePamTask.cs index 61c202c3..63b6104a 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/WritePamTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/WritePamTask.cs @@ -73,7 +73,7 @@ { if (response.Length > 0 && response.Payload[0] == SIRTConstants.SEMI) { - this.Complete(); + this.SetCompleted(); } } } diff --git a/Common/Hardware/Common.Hardware.SIRT/Tasks/WriteRegisterTask.cs b/Common/Hardware/Common.Hardware.SIRT/Tasks/WriteRegisterTask.cs index 3311ebd1..de00f46e 100644 --- a/Common/Hardware/Common.Hardware.SIRT/Tasks/WriteRegisterTask.cs +++ b/Common/Hardware/Common.Hardware.SIRT/Tasks/WriteRegisterTask.cs @@ -17,9 +17,9 @@ public override void Push(SIRTMessage response) { - if (response.Command == SIRTConstants.ACKN_ANSW) + if (response.Command == SIRTConstants.AKN_ANS) { - this.Complete(); + this.SetCompleted(); } } } diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs index 4d2ae7dc..b3057d1b 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs @@ -113,16 +113,16 @@ this.history.Push(task); task.Wait(); - //if (firstTask && !task.AnyTelegramReceived) - //{ - // _ = MessageBox.Show($"Das Rechenwerk an Ep: {task.SlotNr} mit Funkadresse: {task.RequestAddress}|{task.ResponseAddress} sendet nicht. " - // + $"Überprüfen Sie, ob alle SIRT's sind und oder die Funkfrequenz von dem Rechenwerk ist nicht verwechselt." - // , "Achtung" - // , MessageBoxButtons.OK); - // stopProgramming = true; - - // break; - //} + // if (firstTask && !task.AnyTelegramReceived) + // { + // _ = MessageBox.Show($"Das Rechenwerk an Ep: {task.SlotNr} mit Funkadresse: {task.RequestAddress}|{task.ResponseAddress} sendet nicht. " + // + $"Überprüfen Sie, ob alle SIRT's sind und oder die Funkfrequenz von dem Rechenwerk ist nicht verwechselt." + // , "Achtung" + // , MessageBoxButtons.OK); + // stopProgramming = true; + + // break; + // } if (task.ErrorMessage != null) { @@ -131,7 +131,7 @@ if (result == DialogResult.No) { - task.Cancel(); + task.SetCancelled(); stopProgramming = true; break; @@ -146,12 +146,12 @@ break; } - //if (task.FactoryState == FactoryState.Shipment && !this.runningTasks.IsEmpty) - //{ - // lastTask.Label = "GESCHLOSSEN"; - // lastTask.NotifyChanged(); - // break; - //} + // if (task.FactoryState == FactoryState.Shipment && !this.runningTasks.IsEmpty) + // { + // lastTask.Label = "GESCHLOSSEN"; + // lastTask.NotifyChanged(); + // break; + // } if (task.State == SIRTTaskState.Completed) { @@ -206,7 +206,7 @@ } else if (task.State == SIRTTaskState.Cancelled) { - eregisterTask.Cancel(); + eregisterTask.SetCancelled(); } eregisterTask.RequestAddress = task.RequestAddress; diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs index 9071f1c9..b13ea6f2 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs @@ -16,7 +16,7 @@ public EregisterTask(int frequency) { - this.Timeout = 5_000; + this.Timeout = 15_000; this.Frequency = frequency; this.RSSI = new RSSI(0, frequency); this.Label = nameof(SIRTTaskState.Pending); @@ -87,7 +87,7 @@ this.DEBUGMessage = default(DEBUG); this.SEMIMessage = default(SEMI); - this.Running(); + this.SetRunning(); return new SIRTMessage { @@ -199,7 +199,7 @@ } else { - this.Complete(); + this.SetCompleted(); } } else @@ -208,7 +208,7 @@ { this.countFailures = 0; - this.Cancel(); + this.SetCancelled(); } } } @@ -218,10 +218,16 @@ } } } - else if (response.Command == SIRTConstants.ACKN_ANSW) + else if (response.Command == SIRTConstants.AKN_ANS) { this.P12 = new P12(response.P1); - this.Label = this.P12.ToString() ?? "ACKN"; + this.Label = "AKN"; + + if (this.Label != "AKN") + { + this.awaiter.Set(); + this.awaiter.Reset(); + } } else { diff --git a/Common/Ui/Common.UI/Infrastructure/TaskStateToBackgroundBrushConverter.cs b/Common/Ui/Common.UI/Infrastructure/TaskStateToBackgroundBrushConverter.cs index 82cd1439..a1eb0571 100644 --- a/Common/Ui/Common.UI/Infrastructure/TaskStateToBackgroundBrushConverter.cs +++ b/Common/Ui/Common.UI/Infrastructure/TaskStateToBackgroundBrushConverter.cs @@ -29,7 +29,7 @@ case nameof(SIRTConstants.LAT): brush = warning; break; case nameof(SIRTConstants.DEBUG): brush = info; break; case nameof(PAMStatus.OK): brush = success; break; - case "ACKN": brush = warning; break; + case "AKN": brush = warning; break; default: brush = error; break; } } diff --git a/Common/Ui/Common.UI/Infrastructure/TaskStateToForegroundBrushConverter.cs b/Common/Ui/Common.UI/Infrastructure/TaskStateToForegroundBrushConverter.cs index 0f30995d..82679ad4 100644 --- a/Common/Ui/Common.UI/Infrastructure/TaskStateToForegroundBrushConverter.cs +++ b/Common/Ui/Common.UI/Infrastructure/TaskStateToForegroundBrushConverter.cs @@ -24,7 +24,7 @@ case nameof(SIRTConstants.LAT): brush = Brushes.DarkOrange; break; case nameof(SIRTConstants.DEBUG): brush = Brushes.DarkBlue; break; case nameof(PAMStatus.OK): brush = Brushes.DarkGreen; break; - case "ACKN": brush = Brushes.DarkOrange; break; + case "AKN": brush = Brushes.DarkOrange; break; default: brush = Brushes.DarkRed; break; } }