mirror of
https://gitee.com/ThingsGateway/ThingsGateway.git
synced 2025-10-20 10:50:48 +08:00
fix: 变量自动刷新运行态
This commit is contained in:
@@ -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>
|
||||
|
@@ -29,4 +29,13 @@ public class TaskSchedulerLoop
|
||||
}
|
||||
}
|
||||
|
||||
public void Add(IScheduledTask task)
|
||||
{
|
||||
Tasks.Add(task);
|
||||
}
|
||||
public void Remove(IScheduledTask task)
|
||||
{
|
||||
Tasks.Remove(task);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>10.8.13</Version>
|
||||
<Version>10.8.14</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
Reference in New Issue
Block a user