添加变量初始化标记

This commit is contained in:
2248356998 qq.com
2025-07-31 00:30:53 +08:00
parent a921cb8400
commit 3e1a077b96
7 changed files with 52 additions and 10 deletions

View File

@@ -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>

View File

@@ -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);
}
}
}
}

View File

@@ -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; }
}

View File

@@ -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;

View File

@@ -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>

View File

@@ -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
{

View File

@@ -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
{