fix: 变量自动刷新运行态

This commit is contained in:
Diego
2025-06-20 16:58:45 +08:00
parent 5a4b0a0e93
commit b40ca920d3
4 changed files with 49 additions and 10 deletions

View File

@@ -1,8 +1,8 @@
<Project>
<PropertyGroup>
<PluginVersion>10.8.13</PluginVersion>
<ProPluginVersion>10.8.13</ProPluginVersion>
<PluginVersion>10.8.14</PluginVersion>
<ProPluginVersion>10.8.14</ProPluginVersion>
<AuthenticationVersion>2.8.0</AuthenticationVersion>
<SourceGeneratorVersion>10.8.2</SourceGeneratorVersion>
<NET8Version>8.0.17</NET8Version>

View File

@@ -29,4 +29,13 @@ public class TaskSchedulerLoop
}
}
public void Add(IScheduledTask task)
{
Tasks.Add(task);
}
public void Remove(IScheduledTask task)
{
Tasks.Remove(task);
}
}

View File

@@ -127,6 +127,24 @@ public abstract class CollectBase : DriverBase, IRpcDriver
LogMessage?.LogWarning(ex, string.Format(AppResource.GetMethodError, ex.Message));
}
if (VariableTasks.Count > 0)
{
foreach (var item in VariableTasks)
{
item.Stop();
TaskSchedulerLoop.Remove(item);
}
VariableTasks = AddVariableTask(cancellationToken);
foreach (var item in VariableTasks)
{
TaskSchedulerLoop.Add(item);
item.Start();
}
}
// 根据标签获取方法信息的局部函数
List<VariableMethod> GetMethod(IEnumerable<VariableRuntime> tag)
{
@@ -165,16 +183,28 @@ public abstract class CollectBase : DriverBase, IRpcDriver
return string.Empty;
}
protected virtual bool VariableSourceReadsEnable => true;
protected List<IScheduledTask> VariableTasks = new List<IScheduledTask>();
protected override List<IScheduledTask> ProtectedGetTasks(CancellationToken cancellationToken)
{
var tasks = new List<IScheduledTask>();
var setDeviceStatusTask = new ScheduledSyncTask(3000, SetDeviceStatus, null, LogMessage, cancellationToken);
var setDeviceStatusTask = new ScheduledSyncTask(10000, SetDeviceStatus, null, LogMessage, cancellationToken);
tasks.Add(setDeviceStatusTask);
var testOnline = new ScheduledAsyncTask(30000, TestOnline, null, LogMessage, cancellationToken);
tasks.Add(testOnline);
VariableTasks = AddVariableTask(cancellationToken);
tasks.AddRange(VariableTasks);
return tasks;
}
protected List<IScheduledTask> AddVariableTask(CancellationToken cancellationToken)
{
List<IScheduledTask> variableTasks = new();
if (VariableSourceReadsEnable)
{
for (int i = 0; i < CurrentDevice.VariableSourceReads.Count; i++)
@@ -182,7 +212,7 @@ public abstract class CollectBase : DriverBase, IRpcDriver
var variableSourceRead = CurrentDevice.VariableSourceReads[i];
var executeTask = ScheduledTaskHelper.GetTask(variableSourceRead.IntervalTime, ReadVariableSource, variableSourceRead, LogMessage, cancellationToken);
tasks.Add(executeTask);
variableTasks.Add(executeTask);
}
}
@@ -192,7 +222,7 @@ public abstract class CollectBase : DriverBase, IRpcDriver
var variableMethod = CurrentDevice.ReadVariableMethods[i];
var executeTask = ScheduledTaskHelper.GetTask(variableMethod.IntervalTime, ReadVariableMed, variableMethod, LogMessage, cancellationToken);
tasks.Add(executeTask);
variableTasks.Add(executeTask);
}
@@ -201,12 +231,11 @@ public abstract class CollectBase : DriverBase, IRpcDriver
var variableScriptRead = CurrentDevice.VariableScriptReads[i];
var executeTask = ScheduledTaskHelper.GetTask(variableScriptRead.IntervalTime, ScriptVariableRun, variableScriptRead, LogMessage, cancellationToken);
tasks.Add(executeTask);
variableTasks.Add(executeTask);
}
return tasks;
return variableTasks;
}
private void SetDeviceStatus(object? state, CancellationToken cancellationToken)
@@ -220,7 +249,8 @@ public abstract class CollectBase : DriverBase, IRpcDriver
}
else
{
CurrentDevice.SetDeviceStatus(TimerX.Now);
if (IdVariableRuntimes.All(a => !a.Value.IsOnline))
CurrentDevice.SetDeviceStatus(TimerX.Now, true);
}
}
else if (IsStarted)

View File

@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>10.8.13</Version>
<Version>10.8.14</Version>
</PropertyGroup>
<ItemGroup>