commit for branch changing
This commit is contained in:
parent
b125cf99c8
commit
bbcbbbd449
@ -55,10 +55,6 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="configuration.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Hardware\Common.Hardware.SIRT\Common.Hardware.SIRT.csproj">
|
||||
<Project>{8de8e742-ee0a-4004-aa49-3d08d748e5ac}</Project>
|
||||
|
||||
@ -2,37 +2,54 @@
|
||||
{
|
||||
using Common.Hardware.SIRT;
|
||||
using Common.Hardware.SIRT.Tasks;
|
||||
using Common.Hardware.WaterMeter.eRegister.Telegrams;
|
||||
using Common.Hardware.WaterMeter.eRegister;
|
||||
using Common.Hardware.WaterMeter.eRegister.Features;
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
public static class Program
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
var semi = new SEMI("08F3126B77C9000000320000740C000F0300000000000009140188BA30070E10A87F76D3FA000000000000000000000000000000000000000000000000000000000403003C0003012F9CBD671D000000000000000000000100011E95FD".GetBytes(), 868, new Common.Hardware.SIRT.Parameters.P11());
|
||||
SIRTLogger.State += Console.WriteLine;
|
||||
|
||||
var sirtHub = new SIRTHub();
|
||||
|
||||
if (sirtHub.TryOpen("COM6", out var sirtId, out var frequency))
|
||||
{
|
||||
SIRTLogger.State -= Console.WriteLine;
|
||||
SIRTLogger.Message += Console.WriteLine;
|
||||
Console.WriteLine($"Listening on: COM6 - {frequency} - {sirtId}");
|
||||
|
||||
var task = new LEDTask(frequency, 319017453)
|
||||
{
|
||||
//WakeUpCmd = true,
|
||||
//WakeUpModul = true,
|
||||
//DelPamSemi = true,
|
||||
Data = new byte[] { 0x1F, 0x01, 0x08, 0x43, 0x03, 0x63, 0x93, 0x73, 0x22 },
|
||||
EncryptionKey = "E6C88800DEB868C0D6A84880CE982840".GetBytes(),
|
||||
IsEncrypted = true,
|
||||
};
|
||||
|
||||
//var broadcaster = new SIRTBroadcaster("COM6");
|
||||
//broadcaster.Open();
|
||||
sirtHub.Start(task);
|
||||
task.Wait();
|
||||
|
||||
//Console.WriteLine(broadcaster.Id);
|
||||
//Console.WriteLine();
|
||||
|
||||
//while (Console.ReadKey().Key != ConsoleKey.Enter)
|
||||
//{
|
||||
// Console.WriteLine(broadcaster.AdddressesInPamPool());
|
||||
|
||||
// Thread.Sleep(1000);
|
||||
//}
|
||||
Console.ReadKey();
|
||||
sirtHub.Close("COM6");
|
||||
}
|
||||
}
|
||||
|
||||
public class ReadPamPoolTask : ReadPamTask
|
||||
public class LEDTask : EregisterTask
|
||||
{
|
||||
public override void Push(SIRTMessage response)
|
||||
public LEDTask(int frequency, uint address) : base(frequency)
|
||||
{
|
||||
Console.WriteLine(BitConverter.ToString(response));
|
||||
this.RequestAddress = address;
|
||||
}
|
||||
|
||||
public byte P811
|
||||
{
|
||||
get => this.p811;
|
||||
set => this.p811 = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -66,6 +66,7 @@
|
||||
<Compile Include="Tasks\ActivateSIRTTask.cs" />
|
||||
<Compile Include="Tasks\DeleteFromPamPoolTask.cs" />
|
||||
<Compile Include="Tasks\IdentifySIRTTask.cs" />
|
||||
<Compile Include="Tasks\ReadPampoolTask.cs" />
|
||||
<Compile Include="Tasks\ReadPamTask.cs" />
|
||||
<Compile Include="Tasks\ReadRegisterTask.cs" />
|
||||
<Compile Include="Tasks\SIRTTask.cs" />
|
||||
|
||||
@ -4,19 +4,19 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public class SIRTBroadcaster
|
||||
{
|
||||
private readonly ConcurrentDictionary<uint, bool> pampool;
|
||||
private readonly ConcurrentDictionary<uint, SIRTTask> tasks;
|
||||
// private readonly ConcurrentDictionary<uint, SIRTChannel> channels;
|
||||
private readonly ConcurrentDictionary<byte, uint> pampool;
|
||||
private readonly SIRTStream sirtStream;
|
||||
|
||||
public string AdddressesInPamPool()
|
||||
{
|
||||
return string.Join("\t", this.pampool.Keys);
|
||||
return string.Join("\t", this.pampool.Values);
|
||||
}
|
||||
|
||||
private CancellationTokenSource cancellationTokenSource;
|
||||
@ -27,9 +27,8 @@
|
||||
public SIRTBroadcaster(string portName)
|
||||
{
|
||||
this.sirtStream = new SIRTStream(portName);
|
||||
this.pampool = new ConcurrentDictionary<uint, bool>();
|
||||
this.pampool = new ConcurrentDictionary<byte, uint>();
|
||||
this.tasks = new ConcurrentDictionary<uint, SIRTTask>();
|
||||
// this.channels = new ConcurrentDictionary<uint, SIRTChannel>();
|
||||
}
|
||||
|
||||
public event Action<SIRTBroadcaster> Connected;
|
||||
@ -44,19 +43,6 @@
|
||||
|
||||
public string PortName => this.sirtStream.PortName;
|
||||
|
||||
public void ClearChannels(uint requestAddress, uint responseAddress)
|
||||
{
|
||||
//if (this.channels.TryRemove(requestAddress, out _))
|
||||
//{
|
||||
// SIRTLogger.LogState($"Cannel for {requestAddress} removed");
|
||||
//}
|
||||
|
||||
//if (this.channels.TryRemove(responseAddress, out _))
|
||||
//{
|
||||
// SIRTLogger.LogState($"Cannel for {responseAddress} removed");
|
||||
//}
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
this.sirtStream.Close();
|
||||
@ -73,7 +59,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Try(this.channels.Clear);
|
||||
Try(this.tasks.Clear);
|
||||
Try(this.pampool.Clear);
|
||||
Try(this.cancellationTokenSource.Cancel);
|
||||
|
||||
var disconnectedEvent = this.Disconnected;
|
||||
@ -84,31 +71,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
public SIRTChannel GetOrCreateChannel(uint requestAddress, uint responseAddress)
|
||||
{
|
||||
//var requestChannel = this.channels.GetOrAdd(requestAddress, default(SIRTChannel));
|
||||
//var responseChannel = this.channels.GetOrAdd(responseAddress, default(SIRTChannel));
|
||||
//var channel = requestChannel ?? responseChannel ?? new SIRTChannel
|
||||
//{
|
||||
// RequestAddress = requestAddress,
|
||||
// ResponseAddress = responseAddress,
|
||||
// WriteHandler = this.Write
|
||||
//};
|
||||
|
||||
//this.channels.AddOrUpdate(requestAddress, channel, (_1, _2) => channel);
|
||||
//this.channels.AddOrUpdate(responseAddress, channel, (_1, _2) => channel);
|
||||
|
||||
SIRTLogger.LogState($"Cannel for {requestAddress} updated");
|
||||
SIRTLogger.LogState($"Cannel for {responseAddress} updated");
|
||||
|
||||
return new SIRTChannel
|
||||
{
|
||||
RequestAddress = requestAddress,
|
||||
ResponseAddress = responseAddress,
|
||||
WriteHandler = this.Write
|
||||
};
|
||||
}
|
||||
|
||||
public void Open()
|
||||
{
|
||||
this.sirtStream.Open();
|
||||
@ -148,21 +110,35 @@
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryStart(SIRTTask task)
|
||||
/// <summary>
|
||||
/// Checks if the given task can be sent then replaces existing SIRTTask (if any) and starts the new one.
|
||||
/// </summary>
|
||||
public bool Start(SIRTTask task)
|
||||
{
|
||||
var started = false;
|
||||
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}");
|
||||
|
||||
this.tasks.GetOrAdd(task.RequestAddress, addr =>
|
||||
if (canStart)
|
||||
{
|
||||
task.StateChanged += TaskStateChanged;
|
||||
this.sirtStream.Write(task.Run());
|
||||
var newTask = this.tasks.AddOrUpdate(
|
||||
key: address,
|
||||
addValueFactory: addr => task,
|
||||
updateValueFactory: (addr, oldTask) =>
|
||||
{
|
||||
this.DeleteFromPamPool(oldTask);
|
||||
|
||||
started = true;
|
||||
return task;
|
||||
});
|
||||
|
||||
return task;
|
||||
});
|
||||
var bytes = newTask.Start();
|
||||
this.sirtStream.Write(bytes);
|
||||
SIRTLogger.LogMessage($"{this.PortName}|RX: {BitConverter.ToString(bytes)}");
|
||||
}
|
||||
|
||||
return started;
|
||||
return canStart;
|
||||
}
|
||||
|
||||
public void Write(SIRTTask task)
|
||||
@ -171,7 +147,7 @@
|
||||
{
|
||||
task.Timestamp = DateTimeOffset.UtcNow;
|
||||
task.SirtId = this.Id;
|
||||
var bytes = task.Run();
|
||||
var bytes = task.Start();
|
||||
|
||||
this.sirtStream.Write(bytes);
|
||||
SIRTLogger.LogMessage($"{this.PortName}|TX: {BitConverter.ToString(bytes)}");
|
||||
@ -193,7 +169,7 @@
|
||||
{
|
||||
Frequency = this.Frequency,
|
||||
RequestAddress = task.RequestAddress,
|
||||
}.Run();
|
||||
}.Start();
|
||||
|
||||
this.sirtStream.Write(deleteCmd);
|
||||
waitEvent.Wait(300);
|
||||
@ -203,7 +179,7 @@
|
||||
{
|
||||
Frequency = this.Frequency,
|
||||
RequestAddress = task.ResponseAddress,
|
||||
}.Run();
|
||||
}.Start();
|
||||
|
||||
this.sirtStream.Write(deleteCmd);
|
||||
waitEvent.Wait(300);
|
||||
@ -212,38 +188,27 @@
|
||||
|
||||
private void PampoolAsync()
|
||||
{
|
||||
var task = new ReadPamTask
|
||||
var task = new ReadPampoolTask();
|
||||
var addresses = task.Addresses;
|
||||
var addressesCount = addresses.Length;
|
||||
|
||||
this.pampool.Clear();
|
||||
|
||||
for (byte i = 0; i < addressesCount; i++)
|
||||
{
|
||||
Frequency = this.Frequency,
|
||||
RequestAddress = 0xFFFFFFFF,
|
||||
Timeout = 3_000
|
||||
};
|
||||
this.pampool.AddOrUpdate(i, addresses[i], (ix, addr) => addresses[i]);
|
||||
}
|
||||
|
||||
while (this.IsOpen)
|
||||
{
|
||||
if (this.TryStart(task))
|
||||
this.Start(task);
|
||||
task.Wait();
|
||||
|
||||
addresses = task.Addresses;
|
||||
|
||||
for (byte i = 0; i < addressesCount; i++)
|
||||
{
|
||||
task.Wait();
|
||||
|
||||
var payload = task.Payload;
|
||||
var address = default(uint);
|
||||
|
||||
if (payload?.Length == 20)
|
||||
{
|
||||
this.pampool.Clear();
|
||||
|
||||
for (var i = 0; i < 20; i += 4)
|
||||
{
|
||||
address = BitConverter.ToUInt32(payload, i);
|
||||
|
||||
if (address == uint.MaxValue)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_ = this.pampool.GetOrAdd(address, true);
|
||||
}
|
||||
}
|
||||
this.pampool.AddOrUpdate(i, addresses[i], (ix, addr) => addresses[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -278,21 +243,5 @@
|
||||
|
||||
SIRTLogger.LogState("Message receiving stopped");
|
||||
}
|
||||
|
||||
private void TaskStateChanged(SIRTTask task)
|
||||
{
|
||||
if (task.State == SIRTTaskState.Cancelled || task.State == SIRTTaskState.Completed)
|
||||
{
|
||||
this.tasks.TryRemove(task.RequestAddress, out _);
|
||||
this.tasks.TryRemove(task.ResponseAddress, out _);
|
||||
|
||||
if (task.State == SIRTTaskState.Completed)
|
||||
{
|
||||
this.DeleteFromPamPool(task);
|
||||
}
|
||||
|
||||
task.StateChanged -= this.TaskStateChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -637,7 +637,7 @@
|
||||
|
||||
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
|
||||
{
|
||||
_ = broadcaster.TryStart(task);
|
||||
broadcaster.Start(task);
|
||||
task.Wait();
|
||||
|
||||
done = task.State == SIRTTaskState.Completed;
|
||||
@ -653,7 +653,7 @@
|
||||
|
||||
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
|
||||
{
|
||||
_ = broadcaster.TryStart(task);
|
||||
broadcaster.Start(task);
|
||||
task.Wait();
|
||||
|
||||
done = task.State == SIRTTaskState.Completed;
|
||||
|
||||
@ -17,27 +17,8 @@
|
||||
public event Action<SIRTBroadcaster> Disconnected;
|
||||
public event Action<object> StateLogging;
|
||||
|
||||
public void Start(SIRTTask task)
|
||||
{
|
||||
foreach (var broadcaster in broadcasters.Values)
|
||||
{
|
||||
if (broadcaster.TryStart(task))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public event Action<SIRTMessage> MessageProcessed;
|
||||
|
||||
public void ClearChannels(uint requestAddress, uint responseAddress)
|
||||
{
|
||||
foreach (var broadcaster in broadcasters.Values)
|
||||
{
|
||||
broadcaster.ClearChannels(requestAddress, responseAddress);
|
||||
}
|
||||
}
|
||||
|
||||
public void Close(string portName)
|
||||
{
|
||||
if (broadcasters.TryRemove(portName, out var sirtBroadcaster))
|
||||
@ -61,21 +42,21 @@
|
||||
}
|
||||
}
|
||||
|
||||
public SIRTChannel GetOrCreateChannel(int frequency, uint requestAddress, uint responseAddress)
|
||||
public bool Start(SIRTTask task)
|
||||
{
|
||||
var channel = default(SIRTChannel);
|
||||
var started = false;
|
||||
|
||||
foreach (var broadcaster in broadcasters.Values)
|
||||
{
|
||||
if (broadcaster.Frequency == frequency)
|
||||
if (broadcaster.Start(task))
|
||||
{
|
||||
channel = broadcaster.GetOrCreateChannel(requestAddress, responseAddress);
|
||||
started = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return channel;
|
||||
return started;
|
||||
}
|
||||
|
||||
public bool TryOpen(string portName, out string hexId, out int frequency)
|
||||
@ -116,14 +97,6 @@
|
||||
return sirtBroadcaster.IsOpen;
|
||||
}
|
||||
|
||||
public void Run(SIRTTask task)
|
||||
{
|
||||
foreach (var broadcaster in broadcasters.Values)
|
||||
{
|
||||
broadcaster.Write(task);
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
try
|
||||
|
||||
@ -99,7 +99,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Write(params byte[] bytes) => this.sirtPort.Write(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
namespace Common.Hardware.SIRT.Tasks
|
||||
{
|
||||
using System;
|
||||
|
||||
public class ReadPampoolTask : ReadPamTask
|
||||
{
|
||||
public ReadPampoolTask()
|
||||
{
|
||||
this.Frequency = this.Frequency;
|
||||
this.RequestAddress = 0xFFFFFFFF;
|
||||
this.Addresses = new uint[5];
|
||||
this.Timeout = 3_000;
|
||||
}
|
||||
|
||||
public uint[] Addresses { get; }
|
||||
|
||||
public override void Push(SIRTMessage response)
|
||||
{
|
||||
base.Push(response);
|
||||
|
||||
if (this.Payload?.Length == 20)
|
||||
{
|
||||
Array.Clear(this.Addresses, 0, 5);
|
||||
|
||||
for (var i = 0; i < 20; i++)
|
||||
{
|
||||
this.Addresses[i] = BitConverter.ToUInt32(this.Payload, i * 4);
|
||||
|
||||
if (this.Addresses[i] == 0xFFFFFFFF)
|
||||
{
|
||||
this.Addresses[i]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -82,7 +82,7 @@
|
||||
this.awaiter.Reset();
|
||||
}
|
||||
|
||||
public virtual byte[] Run()
|
||||
public virtual byte[] Start()
|
||||
{
|
||||
this.awaiter.Reset();
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
public class WritePamTask : SIRTTask
|
||||
{
|
||||
private readonly P811 p811;
|
||||
protected P811 p811;
|
||||
|
||||
public WritePamTask()
|
||||
{
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
{
|
||||
private readonly ConcurrentQueue<EregisterTask> runningTasks;
|
||||
private readonly EregisterProgrammingParameters parameters;
|
||||
private readonly SIRTChannel sirtChannel;
|
||||
private readonly SIRTHub sirtHub;
|
||||
private readonly EregisterHistory history;
|
||||
private readonly EregisterState state;
|
||||
|
||||
@ -27,10 +27,10 @@
|
||||
|
||||
public uint TempAdresse { get; set; }
|
||||
|
||||
public Eregister(EregisterProgrammingParameters parameters, SIRTChannel sirtChannel)
|
||||
public Eregister(EregisterProgrammingParameters parameters, SIRTHub sirtHub)
|
||||
{
|
||||
this.parameters = parameters;
|
||||
this.sirtChannel = sirtChannel;
|
||||
this.sirtHub = sirtHub;
|
||||
this.state = new EregisterState();
|
||||
this.history = new EregisterHistory();
|
||||
this.runningTasks = new ConcurrentQueue<EregisterTask>();
|
||||
@ -102,46 +102,27 @@
|
||||
this.history.TempAdresse = this.parameters.TempAdresse;
|
||||
|
||||
var stopProgramming = false;
|
||||
var readEvent = new ManualResetEventSlim();
|
||||
var task = default(EregisterTask);
|
||||
var firstTask = true;
|
||||
|
||||
void messageReceived(SIRTMessage message)
|
||||
{
|
||||
this.history.Push(message);
|
||||
|
||||
if (task != null)
|
||||
{
|
||||
task.Push(message);
|
||||
|
||||
if (task.State == SIRTTaskState.Completed || task.State == SIRTTaskState.Cancelled)
|
||||
{
|
||||
readEvent.Set();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.sirtChannel.MessageReceived += messageReceived;
|
||||
|
||||
while (this.runningTasks.TryPeek(out task) && task.State != SIRTTaskState.Cancelled && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
while (task.State != SIRTTaskState.Completed && task.State != SIRTTaskState.Cancelled && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
this.sirtChannel.WriteHandler(task);
|
||||
this.sirtHub.Start(task);
|
||||
this.history.Push(task);
|
||||
readEvent.Wait(task.Timeout);
|
||||
readEvent.Reset();
|
||||
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;
|
||||
//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;
|
||||
}
|
||||
// break;
|
||||
//}
|
||||
|
||||
if (task.ErrorMessage != null)
|
||||
{
|
||||
@ -156,8 +137,6 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.RemoveFromPamPoolIfNotCompleted(readEvent, task);
|
||||
}
|
||||
|
||||
firstTask = false;
|
||||
@ -193,8 +172,6 @@
|
||||
this.UpdateTasksStateInTheQueue(task);
|
||||
}
|
||||
|
||||
this.sirtChannel.MessageReceived -= messageReceived;
|
||||
|
||||
if (stopProgramming)
|
||||
{
|
||||
return;
|
||||
@ -216,23 +193,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveFromPamPoolIfNotCompleted(ManualResetEventSlim readEvent, EregisterTask task)
|
||||
{
|
||||
if (task.State != SIRTTaskState.Completed)
|
||||
{
|
||||
var deleteFromPamPoolTask = new DeleteFromPamPoolTask
|
||||
{
|
||||
Frequency = task.Frequency,
|
||||
RequestAddress = task.RequestAddress,
|
||||
ResponseAddress = task.ResponseAddress,
|
||||
};
|
||||
|
||||
this.sirtChannel.WriteHandler(deleteFromPamPoolTask);
|
||||
readEvent.Wait(500);
|
||||
readEvent.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateTasksStateInTheQueue(EregisterTask task)
|
||||
{
|
||||
var cultureInfo = CultureInfo.InvariantCulture;
|
||||
@ -277,8 +237,9 @@
|
||||
SlotNr = features.SlotNr,
|
||||
PoNr = features.PoNr,
|
||||
SerialNr = features.SerialNr,
|
||||
WakeUpCmd = true,
|
||||
DelPamTx = true,
|
||||
WakeUpCmd = true,
|
||||
WakeUpModul = true,
|
||||
RequestAddress = features.RequestAddress,
|
||||
ResponseAddress = features.ResponseAddress,
|
||||
EncryptionKey = features.EncryptionKey,
|
||||
|
||||
@ -24,8 +24,7 @@
|
||||
|
||||
foreach (var parameters in parametersList)
|
||||
{
|
||||
var channel = this.sirtHub.GetOrCreateChannel(parameters.Frequency, (uint)parameters.TempAdresse, (uint)parameters.Adresse);
|
||||
var eregister = new Eregister(parameters, channel);
|
||||
var eregister = new Eregister(parameters, this.sirtHub);
|
||||
|
||||
this.eregisters.Add(eregister);
|
||||
|
||||
@ -39,8 +38,7 @@
|
||||
|
||||
foreach (var parameters in parametersList)
|
||||
{
|
||||
var channel = this.sirtHub.GetOrCreateChannel(parameters.Frequency, (uint)parameters.TempAdresse, (uint)parameters.Adresse);
|
||||
var eregister = new Eregister(parameters, channel);
|
||||
var eregister = new Eregister(parameters, this.sirtHub);
|
||||
|
||||
this.eregisters.Add(eregister);
|
||||
|
||||
@ -77,8 +75,6 @@
|
||||
{
|
||||
foreach (var eregister in this.eregisters)
|
||||
{
|
||||
this.sirtHub.ClearChannels(eregister.TempAdresse, eregister.Adresse);
|
||||
|
||||
eregister.Clear();
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
public EregisterChangeMeterTypeTask(int frequency) : base(frequency)
|
||||
=> this.Name = "Change meter type";
|
||||
|
||||
public override byte[] Run()
|
||||
public override byte[] Start()
|
||||
{
|
||||
var numberStyles = NumberStyles.HexNumber | NumberStyles.AllowHexSpecifier;
|
||||
var cultureInfo = CultureInfo.InvariantCulture;
|
||||
@ -29,7 +29,7 @@
|
||||
.Append(new ProvidePin { AuthLevel = AuthLevel.III })
|
||||
.ToByteArray();
|
||||
|
||||
return base.Run();
|
||||
return base.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,13 +64,13 @@
|
||||
|
||||
public ErrorMessage ErrorMessage { get; protected set; }
|
||||
|
||||
public override byte[] Run()
|
||||
public override byte[] Start()
|
||||
{
|
||||
var payloadL = this.request.Payload.Length;
|
||||
this.payload = new byte[payloadL];
|
||||
|
||||
Array.Copy(this.request.Payload, 0, this.payload, 0, payloadL);
|
||||
|
||||
|
||||
if (this.FactoryState == FactoryState.Shipment)
|
||||
{
|
||||
this.payload = new EregisterAvailableParametersParser(this.payload);
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
namespace Common.UI
|
||||
{
|
||||
using Common.UI.Infrastructure;
|
||||
using Common.UI.Pages.Eregister.M.Data;
|
||||
|
||||
using SQLite;
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
@ -17,6 +17,58 @@
|
||||
public static string GetSetting(string key)
|
||||
=> Appsettings.GetSetting(key);
|
||||
|
||||
private static ILogger CreateSIRTMessageLogger()
|
||||
{
|
||||
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
|
||||
var name = "SIRTMessages";
|
||||
var nlogs = dll.Directory.CreateSubdirectory(name);
|
||||
var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt");
|
||||
|
||||
LogManager.Configuration = new LoggingConfiguration();
|
||||
LogManager.ThrowConfigExceptions = true;
|
||||
LogManager.ThrowExceptions = true;
|
||||
LogManager.AutoShutdown = true;
|
||||
|
||||
LogManager.Configuration.AddTarget(new FileTarget(name)
|
||||
{
|
||||
CreateDirs = true,
|
||||
KeepFileOpen = true,
|
||||
FileName = file
|
||||
});
|
||||
|
||||
LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name);
|
||||
LogManager.LogFactory.ReconfigExistingLoggers(true);
|
||||
LogManager.ReconfigExistingLoggers(true);
|
||||
|
||||
return LogManager.GetLogger(name);
|
||||
}
|
||||
|
||||
private static ILogger CreateSIRTStateLogger()
|
||||
{
|
||||
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
|
||||
var name = "SIRTState";
|
||||
var nlogs = dll.Directory.CreateSubdirectory(name);
|
||||
var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt");
|
||||
|
||||
LogManager.Configuration = new LoggingConfiguration();
|
||||
LogManager.ThrowConfigExceptions = true;
|
||||
LogManager.ThrowExceptions = true;
|
||||
LogManager.AutoShutdown = true;
|
||||
|
||||
LogManager.Configuration.AddTarget(new FileTarget(name)
|
||||
{
|
||||
CreateDirs = true,
|
||||
KeepFileOpen = true,
|
||||
FileName = file
|
||||
});
|
||||
|
||||
LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name);
|
||||
LogManager.LogFactory.ReconfigExistingLoggers(true);
|
||||
LogManager.ReconfigExistingLoggers(true);
|
||||
|
||||
return LogManager.GetLogger(name);
|
||||
}
|
||||
|
||||
private static ILogger CreateSIRTLogger()
|
||||
{
|
||||
var dll = new FileInfo(typeof(AppHost).Assembly.Location);
|
||||
@ -46,7 +98,7 @@
|
||||
private static SIRTHub CreateSIRTFactory()
|
||||
{
|
||||
var sirtHub = new SIRTHub();
|
||||
|
||||
|
||||
SIRTLogger.Message += NLogger.Debug;
|
||||
|
||||
return sirtHub;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
{
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
|
||||
public static class Appsettings
|
||||
{
|
||||
@ -26,5 +27,11 @@
|
||||
|
||||
return settingValue;
|
||||
}
|
||||
|
||||
public static string[] GetSIRTComPorts()
|
||||
=> GetSetting("SIRTComPorts")
|
||||
?.Split(new[] { ';', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
?.Select(x => x?.Trim())
|
||||
?.ToArray() ?? new string[0];
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,5 +11,7 @@
|
||||
public EregisterInitializeVM EregisterInitializeVM { get; } = new EregisterInitializeVM();
|
||||
|
||||
public EregisterFinalizeVM EregisterFinalizeVM { get; } = new EregisterFinalizeVM();
|
||||
|
||||
public ManualProgrammingVM ManualProgrammingVM { get; } = new ManualProgrammingVM();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,44 @@
|
||||
<Page x:Class="Common.UI.Pages.ManualProgramming"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
DataContext="{Binding ManualProgrammingVM, Source={StaticResource VMLocator}}"
|
||||
FontFamily="Consolas"
|
||||
FontSize="13">
|
||||
<Grid>
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Background="LightGray"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
Grid.Row="0"
|
||||
Orientation="Horizontal">
|
||||
<Button Background="WhiteSmoke"
|
||||
Command="{Binding ActivateSIRTS}"
|
||||
Content="Activate SIRT's"
|
||||
Cursor="Hand"
|
||||
Margin="5"
|
||||
Padding="20 5"/>
|
||||
<ItemsControl ItemsSource="{Binding Logging}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" />
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Label Content="{Binding}"
|
||||
FontWeight="Bold"
|
||||
Margin="5"
|
||||
Padding="20 5" />
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Page>
|
||||
|
||||
@ -2,11 +2,49 @@
|
||||
{
|
||||
using Common.UI.Infrastructure;
|
||||
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows.Input;
|
||||
|
||||
public class ManualProgrammingVM : VM<ManualProgrammingVM>
|
||||
{
|
||||
private readonly string[] comPorts;
|
||||
|
||||
public ManualProgrammingVM()
|
||||
{
|
||||
this.comPorts = Appsettings.GetSIRTComPorts();
|
||||
this.Logging = new ObservableCollection<string>();
|
||||
this.ActivateSIRTS = new Command(this.ActivateSIRTSCommand);
|
||||
}
|
||||
|
||||
public ICommand ActivateSIRTS { get; }
|
||||
|
||||
public ObservableCollection<string> Logging { get; }
|
||||
|
||||
private void ActivateSIRTSCommand()
|
||||
{
|
||||
this.InvokeTaskAsync(() =>
|
||||
{
|
||||
this.Logging.Clear();
|
||||
|
||||
foreach (var comPort in comPorts)
|
||||
{
|
||||
this.InvokeTaskAsync(() =>
|
||||
{
|
||||
var portName = comPort;
|
||||
var sirtId = default(string);
|
||||
var frequency = default(int);
|
||||
|
||||
AppHost.SIRTHub.Close(comPort);
|
||||
|
||||
for (var i = 0; i < 3 && !AppHost.SIRTHub.TryOpen(comPort, out sirtId, out frequency); i++)
|
||||
{
|
||||
this.Logging.Add($"{comPort} - {frequency} - {sirtId}");
|
||||
}
|
||||
|
||||
this.Logging.Add($"{comPort} - {frequency} - {sirtId}");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user