mirror of
				https://gitee.com/ThingsGateway/ThingsGateway.git
				synced 2025-10-31 15:43:59 +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
	 2248356998 qq.com
					2248356998 qq.com