mirror of
https://gitee.com/ThingsGateway/ThingsGateway.git
synced 2025-10-20 10:50:48 +08:00
添加变量初始化标记
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<PluginVersion>10.9.91</PluginVersion>
|
||||
<ProPluginVersion>10.9.91</ProPluginVersion>
|
||||
<DefaultVersion>10.9.93</DefaultVersion>
|
||||
<DefaultVersion>10.9.94</DefaultVersion>
|
||||
<AuthenticationVersion>2.9.29</AuthenticationVersion>
|
||||
<SourceGeneratorVersion>10.9.29</SourceGeneratorVersion>
|
||||
<NET8Version>8.0.18</NET8Version>
|
||||
|
@@ -94,7 +94,7 @@ public abstract class BusinessBaseWithCacheInterval : BusinessBaseWithCache
|
||||
IdVariableRuntimes.ForEach(a =>
|
||||
{
|
||||
if (((!_businessPropertyWithCacheInterval.OnlineFilter) || a.Value.IsOnline) && _businessPropertyWithCacheInterval.BusinessUpdateEnum != BusinessUpdateEnum.Interval)
|
||||
VariableValueChange(a.Value, a.Value.AdaptVariableBasicData());
|
||||
VariableValueInit(a.Value);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -269,7 +269,7 @@ public abstract class BusinessBaseWithCacheInterval : BusinessBaseWithCache
|
||||
IdVariableRuntimes.ForEach(a =>
|
||||
{
|
||||
if (((!_businessPropertyWithCacheInterval.OnlineFilter) || a.Value.IsOnline) && _businessPropertyWithCacheInterval.BusinessUpdateEnum != BusinessUpdateEnum.Interval)
|
||||
VariableValueChange(a.Value, a.Value.AdaptVariableBasicData());
|
||||
VariableValueInit(a.Value);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -316,4 +316,29 @@ public abstract class BusinessBaseWithCacheInterval : BusinessBaseWithCache
|
||||
VariableChange(variableRuntime, variable);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当初始化时触发此事件处理方法。该方法内部会检查是否需要进行变量上传,如果需要,则调用 <see cref="VariableChange(VariableRuntime, VariableBasicData)"/> 方法。
|
||||
/// </summary>
|
||||
/// <param name="variableRuntime">变量运行时信息</param>
|
||||
protected void VariableValueInit(VariableRuntime variableRuntime)
|
||||
{
|
||||
if (CurrentDevice?.Pause != false)
|
||||
return;
|
||||
if (!VarModelEnable) return;
|
||||
if (TaskSchedulerLoop?.Stoped == true) return;
|
||||
|
||||
// 如果业务属性的缓存为间隔上传,则不执行后续操作
|
||||
//if (_businessPropertyWithCacheInterval?.IsInterval != true)
|
||||
{
|
||||
// 检查当前设备的变量是否包含此变量,如果包含,则触发变量的变化处理方法
|
||||
if (IdVariableRuntimes.ContainsKey(variableRuntime.Id))
|
||||
{
|
||||
var data = variableRuntime.AdaptVariableBasicData();
|
||||
data.ValueInited = false;
|
||||
VariableChange(variableRuntime, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -188,4 +188,7 @@ public class VariableBasicData
|
||||
[System.Text.Json.Serialization.JsonIgnore(Condition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault)]
|
||||
public long CreateOrgId { get; set; }
|
||||
|
||||
/// <inheritdoc cref="VariableRuntime.ValueInited"/>
|
||||
public bool ValueInited { get; set; }
|
||||
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ public partial class VariableRuntime : Variable, IVariable, IDisposable
|
||||
|
||||
private bool _isOnline;
|
||||
private bool _isOnlineChanged;
|
||||
private bool _valueInited;
|
||||
|
||||
private string alarmLimit;
|
||||
private string alarmText;
|
||||
@@ -165,6 +166,8 @@ public partial class VariableRuntime : Variable, IVariable, IDisposable
|
||||
|
||||
LastSetValue = _value;
|
||||
|
||||
|
||||
|
||||
if (_isOnline == true)
|
||||
{
|
||||
_value = data;
|
||||
|
@@ -20,6 +20,8 @@ namespace ThingsGateway.Gateway.Application;
|
||||
public partial class VariableRuntime : Variable, IVariable, IDisposable
|
||||
{
|
||||
|
||||
[AutoGenerateColumn(Visible = false)]
|
||||
public bool ValueInited { get; set; }
|
||||
|
||||
#region 属性
|
||||
/// <summary>
|
||||
|
@@ -8,6 +8,8 @@
|
||||
// QQ群:605534569
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using ThingsGateway.Foundation.Extension.Generic;
|
||||
|
||||
namespace ThingsGateway.Foundation.Modbus;
|
||||
|
||||
/// <summary>
|
||||
@@ -65,12 +67,15 @@ public class ModbusRtuSend : ISendMessage
|
||||
}
|
||||
else if (wf == 15 || wf == 16)
|
||||
{
|
||||
var data = ModbusAddress.Data.ArrayExpandToLengthEven().Span;
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)(data.Length + 7), EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.Station);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.WriteFunctionCode);
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)ModbusAddress.StartAddress, EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)Math.Ceiling(wf == 15 ? ModbusAddress.Data.Length * 8 : ModbusAddress.Data.Length / 2.0), EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.Data.Length);
|
||||
byteBlock.Write(ModbusAddress.Data.Span);
|
||||
var len = (ushort)Math.Ceiling(wf == 15 ? ModbusAddress.Data.Length * 8 : ModbusAddress.Data.Length / 2.0);
|
||||
WriterExtension.WriteValue(ref byteBlock, len, EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)(len * 2));
|
||||
byteBlock.Write(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -8,6 +8,8 @@
|
||||
// QQ群:605534569
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using ThingsGateway.Foundation.Extension.Generic;
|
||||
|
||||
namespace ThingsGateway.Foundation.Modbus;
|
||||
|
||||
/// <summary>
|
||||
@@ -84,13 +86,15 @@ public class ModbusTcpSend : ISendMessage
|
||||
}
|
||||
else if (wf == 15 || wf == 16)
|
||||
{
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)(ModbusAddress.Data.Length + 7), EndianType.Big);
|
||||
var data = ModbusAddress.Data.ArrayExpandToLengthEven().Span;
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)(data.Length + 7), EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.Station);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.WriteFunctionCode);
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)ModbusAddress.StartAddress, EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (ushort)Math.Ceiling(wf == 15 ? ModbusAddress.Data.Length * 8 : ModbusAddress.Data.Length / 2.0), EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)ModbusAddress.Data.Length);
|
||||
byteBlock.Write(ModbusAddress.Data.Span);
|
||||
var len = (ushort)Math.Ceiling(wf == 15 ? ModbusAddress.Data.Length * 8 : ModbusAddress.Data.Length / 2.0);
|
||||
WriterExtension.WriteValue(ref byteBlock, len, EndianType.Big);
|
||||
WriterExtension.WriteValue(ref byteBlock, (byte)(len * 2));
|
||||
byteBlock.Write(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user