mirror of
https://github.com/OpenLogics/MewtocolNet.git
synced 2025-12-06 03:01:24 +00:00
Added methods to pause/resume the auto polling
This commit is contained in:
@@ -32,7 +32,7 @@ class Program {
|
||||
Task.Factory.StartNew(async () => {
|
||||
|
||||
//attaching the logger
|
||||
Logger.LogLevel = LogLevel.Verbose;
|
||||
Logger.LogLevel = LogLevel.Critical;
|
||||
Logger.OnNewLogMessage((date, msg) => {
|
||||
Console.WriteLine($"{date.ToString("HH:mm:ss")} {msg}");
|
||||
});
|
||||
@@ -44,6 +44,13 @@ class Program {
|
||||
//attaching the register collection and an automatic poller
|
||||
interf.WithRegisterCollection(registers).WithPoller();
|
||||
|
||||
_ = Task.Factory.StartNew(async () => {
|
||||
while (true) {
|
||||
Console.Title = $"Polling Paused: {interf.PollingPaused}, Speed UP: {interf.BytesPerSecondUpstream} B/s, Speed DOWN: {interf.BytesPerSecondDownstream} B/s";
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
});
|
||||
|
||||
await interf.ConnectAsync(
|
||||
(plcinf) => {
|
||||
|
||||
@@ -79,14 +86,28 @@ class Program {
|
||||
//set the current second to the PLCs TIME register
|
||||
interf.SetRegister(nameof(registers.TestTime), TimeSpan.FromSeconds(DateTime.Now.Second));
|
||||
|
||||
//test pausing poller
|
||||
|
||||
bool pollerPaused = false;
|
||||
|
||||
while(true) {
|
||||
|
||||
Console.WriteLine($"Speed UP: {interf.BytesPerSecondUpstream} B/s");
|
||||
Console.WriteLine($"Speed DOWN: {interf.BytesPerSecondDownstream} B/s");
|
||||
await Task.Delay(5000);
|
||||
|
||||
await Task.Delay(1000);
|
||||
pollerPaused = !pollerPaused;
|
||||
|
||||
if(pollerPaused) {
|
||||
Console.WriteLine("Pausing poller");
|
||||
await interf.PausePollingAsync();
|
||||
Console.WriteLine("Paused poller");
|
||||
} else {
|
||||
interf.ResumePolling();
|
||||
Console.WriteLine("Resumed poller");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -14,15 +14,61 @@ namespace MewtocolNet {
|
||||
/// </summary>
|
||||
public partial class MewtocolInterface {
|
||||
|
||||
/// <summary>
|
||||
/// True if the auto poller is currently paused
|
||||
/// </summary>
|
||||
public bool PollingPaused => pollerIsPaused;
|
||||
|
||||
internal event Action PolledCycle;
|
||||
internal bool ContinousReaderRunning;
|
||||
|
||||
internal volatile bool pollerTaskRunning;
|
||||
internal volatile bool pollerTaskStopped;
|
||||
internal volatile bool pollerIsPaused;
|
||||
|
||||
internal bool usePoller = false;
|
||||
|
||||
#region Register Polling
|
||||
|
||||
/// <summary>
|
||||
/// Kills the poller completely
|
||||
/// </summary>
|
||||
internal void KillPoller () {
|
||||
|
||||
ContinousReaderRunning = false;
|
||||
pollerTaskRunning = false;
|
||||
pollerTaskStopped = true;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pauses the polling and waits for the last message to be sent
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task PausePollingAsync () {
|
||||
|
||||
if (!pollerTaskRunning)
|
||||
return;
|
||||
|
||||
pollerTaskRunning = false;
|
||||
|
||||
while (!pollerIsPaused) {
|
||||
|
||||
if (pollerIsPaused)
|
||||
break;
|
||||
|
||||
await Task.Delay(10);
|
||||
|
||||
}
|
||||
|
||||
pollerTaskRunning = false;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resumes the polling
|
||||
/// </summary>
|
||||
public void ResumePolling () {
|
||||
|
||||
pollerTaskRunning = true;
|
||||
|
||||
}
|
||||
|
||||
@@ -31,32 +77,37 @@ namespace MewtocolNet {
|
||||
/// </summary>
|
||||
internal void AttachPoller () {
|
||||
|
||||
if (ContinousReaderRunning)
|
||||
if (pollerTaskRunning)
|
||||
return;
|
||||
|
||||
Task.Factory.StartNew(async () => {
|
||||
|
||||
Logger.Log("Poller is attaching", LogLevel.Info, this);
|
||||
|
||||
int it = 0;
|
||||
ContinousReaderRunning = true;
|
||||
int iteration = 0;
|
||||
|
||||
while (ContinousReaderRunning) {
|
||||
pollerTaskStopped = false;
|
||||
pollerTaskRunning = true;
|
||||
pollerIsPaused = false;
|
||||
|
||||
if (it >= Registers.Count + 1) {
|
||||
it = 0;
|
||||
while (!pollerTaskStopped) {
|
||||
|
||||
while (pollerTaskRunning) {
|
||||
|
||||
if (iteration >= Registers.Count + 1) {
|
||||
iteration = 0;
|
||||
//invoke cycle polled event
|
||||
InvokePolledCycleDone();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (it >= Registers.Count) {
|
||||
if (iteration >= Registers.Count) {
|
||||
await GetPLCInfoAsync();
|
||||
it++;
|
||||
iteration++;
|
||||
continue;
|
||||
}
|
||||
|
||||
var reg = Registers[it];
|
||||
var reg = Registers[iteration];
|
||||
|
||||
if (reg is NRegister<short> shortReg) {
|
||||
var lastVal = shortReg.Value;
|
||||
@@ -115,12 +166,18 @@ namespace MewtocolNet {
|
||||
}
|
||||
}
|
||||
|
||||
it++;
|
||||
iteration++;
|
||||
|
||||
await Task.Delay(PollerDelayMs);
|
||||
|
||||
}
|
||||
|
||||
pollerIsPaused = !pollerTaskRunning;
|
||||
|
||||
}
|
||||
|
||||
pollerIsPaused = false;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<PackageId>MewtocolNet</PackageId>
|
||||
<Version>0.5.5</Version>
|
||||
<Version>0.5.6</Version>
|
||||
<Authors>Felix Weiss</Authors>
|
||||
<Company>Womed</Company>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
|
||||
Reference in New Issue
Block a user