Add reconnect task cancellation

- fix missing build methods for array registers
- add reconnect injection task
- add slim semaphore for async message single thread handling
This commit is contained in:
Felix Weiß
2023-08-15 19:31:45 +02:00
parent 354c4d6428
commit 0668ad2f86
17 changed files with 216 additions and 352 deletions

View File

@@ -70,8 +70,8 @@ public partial class ConnectView : UserControl {
setting.TryReconnectDelayMs = 2000;
setting.SendReceiveTimeoutMs = 1000;
setting.HeartbeatIntervalMs = 3000;
setting.MaxDataBlocksPerWrite = 20;
setting.MaxOptimizationDistance = 10;
setting.MaxDataBlocksPerWrite = 128;
setting.MaxOptimizationDistance = 20;
})
.WithCustomPollLevels(lvl => {

View File

@@ -25,6 +25,8 @@
Click="ClickedConnect"/>
<MenuItem Header="Set Random DT1000" IsEnabled="{Binding Plc.IsConnected}"
Click="ClickedSetRandom"/>
<MenuItem Header="Queue test" IsEnabled="{Binding Plc.IsConnected}"
Click="ClickedAddQueueTest"/>
<MenuItem Header="Toggle OP mode" IsEnabled="{Binding Plc.IsConnected}"
Click="ClickedToggleRunMode"/>
</MenuItem>

View File

@@ -54,6 +54,24 @@ public partial class PlcDataView : UserControl {
}
private async void ClickedAddQueueTest(object sender, RoutedEventArgs e) {
var tasks = new List<Task<short>>();
for (int i = 0; i < 100; i++) {
var t = viewModel.Plc.Register.Struct<short>("DT1000").ReadAsync();
tasks.Add(t);
}
var list = await Task.WhenAll(tasks);
Console.WriteLine();
}
private async void ClickedToggleRunMode(object sender, RoutedEventArgs e) {
await viewModel.Plc.ToggleOperationModeAsync();