Skip to content

Commit 43c7f72

Browse files
committed
Added auto register reset to default typed value on disconnect
1 parent 2e35ed8 commit 43c7f72

File tree

5 files changed

+72
-3
lines changed

5 files changed

+72
-3
lines changed

Examples/Program.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static void Scenario1 () {
3434
Task.Factory.StartNew(async () => {
3535

3636
//attaching the logger
37-
Logger.LogLevel = LogLevel.Critical;
37+
Logger.LogLevel = LogLevel.Verbose;
3838
Logger.OnNewLogMessage((date, msg) => {
3939
Console.WriteLine($"{date.ToString("HH:mm:ss")} {msg}");
4040
});
@@ -50,6 +50,7 @@ static void Scenario1 () {
5050
while (true) {
5151
if (isProgressReadout) continue;
5252
Console.Title = $"Polling Paused: {interf.PollingPaused}, " +
53+
$"Poller active: {interf.PollerActive}, " +
5354
$"Speed UP: {interf.BytesPerSecondUpstream} B/s, " +
5455
$"Speed DOWN: {interf.BytesPerSecondDownstream} B/s, " +
5556
$"Poll delay: {interf.PollerDelayMs} ms, " +
@@ -58,7 +59,21 @@ static void Scenario1 () {
5859
}
5960
});
6061

61-
await interf.ConnectAsync((plcinf) => AfterConnect(interf, registers));
62+
//await interf.ConnectAsync((plcinf) => AfterConnect(interf, registers));
63+
64+
bool flip = false;
65+
while(true) {
66+
67+
if(!flip) {
68+
await interf.ConnectAsync();
69+
} else {
70+
interf.Disconnect();
71+
}
72+
73+
flip = !flip;
74+
await Task.Delay(5000);
75+
76+
}
6277

6378
});
6479

MewtocolNet/Mewtocol/DynamicInterface.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@ public partial class MewtocolInterface {
1919
/// </summary>
2020
public bool PollingPaused => pollerIsPaused;
2121

22+
/// <summary>
23+
/// True if the poller is actvice (can be paused)
24+
/// </summary>
25+
public bool PollerActive => !pollerTaskStopped;
26+
2227
internal event Action PolledCycle;
2328

2429
internal volatile bool pollerTaskRunning;
2530
internal volatile bool pollerTaskStopped;
2631
internal volatile bool pollerIsPaused;
32+
internal volatile bool pollerFirstCycle = false;
2733

2834
internal bool usePoller = false;
2935

@@ -37,6 +43,8 @@ internal void KillPoller () {
3743
pollerTaskRunning = false;
3844
pollerTaskStopped = true;
3945

46+
ClearRegisterVals();
47+
4048
}
4149

4250
/// <summary>
@@ -80,6 +88,8 @@ internal void AttachPoller () {
8088
if (pollerTaskRunning)
8189
return;
8290

91+
pollerFirstCycle = true;
92+
8393
Task.Factory.StartNew(async () => {
8494

8595
Logger.Log("Poller is attaching", LogLevel.Info, this);
@@ -167,6 +177,7 @@ internal void AttachPoller () {
167177
}
168178

169179
iteration++;
180+
pollerFirstCycle = false;
170181

171182
await Task.Delay(pollerDelayMs);
172183

MewtocolNet/Mewtocol/MewtocolInterface.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,17 @@ private void OnMajorSocketExceptionWhileConnected () {
395395

396396
}
397397

398+
private void ClearRegisterVals () {
399+
400+
for (int i = 0; i < Registers.Count; i++) {
401+
402+
var reg = Registers[i];
403+
reg.ClearValue();
404+
405+
}
406+
407+
}
408+
398409
#endregion
399410

400411
#region Register Collection

MewtocolNet/Mewtocol/Subregisters/Register.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,38 @@ internal void TriggerNotifyChange () {
9494
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));
9595
}
9696

97+
internal void ClearValue () {
98+
99+
if (enumType != null && this is NRegister<int> intEnumReg) {
100+
intEnumReg.SetValueFromPLC((int)0);
101+
}
102+
if (this is NRegister<short> shortReg) {
103+
shortReg.SetValueFromPLC((short)0);
104+
}
105+
if (this is NRegister<ushort> ushortReg) {
106+
ushortReg.SetValueFromPLC((ushort)0);
107+
}
108+
if (this is NRegister<int> intReg) {
109+
intReg.SetValueFromPLC((int)0);
110+
}
111+
if (this is NRegister<uint> uintReg) {
112+
uintReg.SetValueFromPLC((uint)0);
113+
}
114+
if (this is NRegister<float> floatReg) {
115+
floatReg.SetValueFromPLC((float)0);
116+
}
117+
if (this is NRegister<TimeSpan> tsReg) {
118+
tsReg.SetValueFromPLC(TimeSpan.Zero);
119+
}
120+
if (this is BRegister boolReg) {
121+
boolReg.SetValueFromPLC(false);
122+
}
123+
if (this is SRegister stringReg) {
124+
stringReg.SetValueFromPLC(null);
125+
}
126+
127+
}
128+
97129
/// <summary>
98130
/// Gets the starting memory are either numeric or A,B,C,D etc for special areas like inputs
99131
/// </summary>

MewtocolNet/MewtocolNet.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<TargetFramework>netstandard2.0</TargetFramework>
44
<PackageId>Mewtocol.NET</PackageId>
5-
<Version>0.6.1</Version>
5+
<Version>0.6.2</Version>
66
<Authors>Felix Weiss</Authors>
77
<Company>Womed</Company>
88
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

0 commit comments

Comments
 (0)