Hello,
I wrote a non realtime C# program including a dataLayer interface. This program provides and subscribes data.
The variables master-state-machine/value and master-state-machine/state are provided and written by the non realtime C# application and read by multiple realtime applications.
The variables, that are subscribed by the non realtime C# application, are provided and written by multiple realtime applications.
During startup all connections are established and the variables are created.
Log messages:
ctrlX Data Layer system started.
ctrlX Data Layer client created.
ctrlX Data Layer provider created.
Successfully created node 'master-state-machine/value'
Successfully created node 'master-state-machine/state'
Afterwards the variables are written in irregular intervals.
Log messages:
OnWrite master-state-machine/value: 2
Execute State2
Change state from State2 to State3
OnWrite master-state-machine/value: 1
OnWrite master-state-machine/state: 3
After some time, these async write operations take longer than 10 seconds.
These long operations will be registered as timeouts by my application, since a write operations should not take 10 seconds.
Log messages:
Execute State6
Change state from State6 to State7
Write value 7 to master-state-machine/state timed out.
Wait execute State7
Execute State7
Change state from State7 to State8
Write value 1 to master-state-machine/value timed out.
Wait execute State7
Write value 7 to master-state-machine/state timed out.
Write value 7 to master-state-machine/state timed out.
Execute State7
After some time it seems, that all these operations go through at once.
Log messages:
Change state from State7 to State8
OnWrite master-state-machine/state: 7
OnWrite master-state-machine/value: 1
OnWrite master-state-machine/state: 7
OnWrite master-state-machine/state: 7
After that the application runs smoothly for some time.
Then these "timeouts" reappear and cause a bunch of failed results.
Log messages:
Execute State9
OnWrite master-state-machine/state: 9
Write value 1 to master-state-machine/value timed out.
Write value 9 to master-state-machine/state timed out.
Wait execute State9
Execute State9
Write value 1 to master-state-machine/value failed. Result: System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[Datalayer.IClientAsyncResult,Datalayer.Internal.Client+<WriteAsync>d__56].
Write value 9 to master-state-machine/state failed. Result: System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[Datalayer.IClientAsyncResult,Datalayer.Internal.Client+<WriteAsync>d__56].
Wait execute State9
Execute State9
These AsyncTaskMethodBuilder messages occur about 10 times.
Afterwards the application runs smoothly for a short time.
Then all subscriptions send a DL_TIMEOUT for every subscribed value.
Log messages:
Failed subscription change in Provider V1. Result: DL_TIMEOUT
Failed subscription change in Provider V2. Result: DL_TIMEOUT
Failed subscription change in Provider V3. Result: DL_TIMEOUT
Failed subscription change in ConditionHandler V1. Result: DL_TIMEOUT
Failed subscription change in ConditionHandler V2. Result: DL_TIMEOUT
Failed subscription change in ConditionHandler V3. Result: DL_TIMEOUT
Failed subscription change in ConditionHandler V4. Result: DL_TIMEOUT
Failed subscription change in InputVariable for CurrentState_Slave2. Result: DL_TIMEOUT
Failed subscription change in InputVariable for State_Slave1. Result: DL_TIMEOUT
After that, the application runs smoothly again for a while.
These errors occur in alternating order after that.
Code of write operation:
result = this.client.WriteAsync(path, new Variant(valueToWrite));
if (result?.Wait(10000) == false)
{
Console.WriteLine(
$"Write value {value} to {path} timed out.");
return false;
}
How could this problem be caused/fixed?
The CPU load is low.
Thank you and best regards