diff --git a/BPASmart.Model/PublishModel.cs b/BPASmart.Model/PublishModel.cs index 264ed0d8..71bc9fe4 100644 --- a/BPASmart.Model/PublishModel.cs +++ b/BPASmart.Model/PublishModel.cs @@ -8,12 +8,35 @@ namespace BPASmart.Model { public class PublishModel { - public string DeviceName { get; set; } - public string RealAddress { get; set; } - public string VarName { get; set; } - public string Value { get; set; } + /// + /// 设备名称 + /// + public string DeviceName { get; set; } = string.Empty; + + /// + /// 变量实际地址 + /// + public string RealAddress { get; set; } = string.Empty; + + /// + /// 变量名称 + /// + public string VarName { get; set; } = string.Empty; + + /// + /// 变量长度 + /// + public int Length { get; set; } = 1; + + /// + /// 变量当前值 + /// + public string Value { get; set; } = string.Empty; + + /// + /// 变量数据类型 + /// public EDataType DataType { get; set; } - public int Sleep { get; set; } } } diff --git a/BPASmart.Server/BPASmart.Server.csproj b/BPASmart.Server/BPASmart.Server.csproj index b650e318..e4bed9c3 100644 --- a/BPASmart.Server/BPASmart.Server.csproj +++ b/BPASmart.Server/BPASmart.Server.csproj @@ -4,11 +4,12 @@ net6.0 enable enable + True - - + + diff --git a/BPASmart.Server/CommunicationServer.cs b/BPASmart.Server/CommunicationServer.cs index 3958c16c..cbe53ec2 100644 --- a/BPASmart.Server/CommunicationServer.cs +++ b/BPASmart.Server/CommunicationServer.cs @@ -14,7 +14,6 @@ namespace BPASmart.Server public void Init() { - var tt = sizeof(bool); BPASmartClient.Message.MessageLog.GetInstance.ShowDebugLog("通讯模块初始化"); RedisHelper.GetInstance.ConnectAsync(); MqttInit(); @@ -37,45 +36,80 @@ namespace BPASmart.Server { GetReadDataModels(item).ToList()?.ForEach(temp => { - switch (temp.Key) + //switch (temp.Key) + //{ + // case EDataType.Bool: + // temp.Value?.ForEach(value => + // { + // //var res = modbusTcpMaster.ReadBool(value.StartAddress.ToString(), value.Length); + // var res = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length); + // SetValue(res.Content, item.DeviceName, value, 1); + // }); + // break; + // case EDataType.Byte: + // break; + // case EDataType.Int: + // break; + // case EDataType.Word: + // temp.Value?.ForEach(value => + // { + // //var res = modbusTcpMaster.ReadUshort(value.StartAddress.ToString(), value.Length); + // var res = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length); + // SetValue(res.Content, item.DeviceName, value, 1); + // }); + // break; + // case EDataType.Dint: + // break; + // case EDataType.Dword: + // temp.Value?.ForEach(value => + // { + // //var res = modbusTcpMaster.ReadUint(value.StartAddress.ToString(), value.Length); + // var res = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length); + // SetValue(res.Content, item.DeviceName, value, 2); + // }); + // break; + // case EDataType.Float: + // temp.Value?.ForEach(value => + // { + // //var res = modbusTcpMaster.ReadFloat(value.StartAddress.ToString(), value.Length); + // var res = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length); + // SetValue(res.Content, item.DeviceName, value, 2); + // }); + // break; + // default: + // break; + //} + + Array ResultArray = null; + temp.Value?.ForEach(value => { - case EDataType.Bool: - temp.Value?.ForEach(value => - { - var res = modbusTcpMaster.ReadBool(value.StartAddress.ToString(), value.Length); - SetValue(res.Content, item.DeviceName, value, 1); - }); - break; - case EDataType.Byte: - break; - case EDataType.Int: - break; - case EDataType.Word: - temp.Value?.ForEach(value => - { - var res = modbusTcpMaster.ReadUshort(value.StartAddress.ToString(), value.Length); - SetValue(res.Content, item.DeviceName, value, 1); - }); - break; - case EDataType.Dint: - break; - case EDataType.Dword: - temp.Value?.ForEach(value => - { - var res = modbusTcpMaster.ReadUint(value.StartAddress.ToString(), value.Length); - SetValue(res.Content, item.DeviceName, value, 2); - }); - break; - case EDataType.Float: - temp.Value?.ForEach(value => - { - var res = modbusTcpMaster.ReadFloat(value.StartAddress.ToString(), value.Length); - SetValue(res.Content, item.DeviceName, value, 2); - }); - break; - default: - break; - } + switch (temp.Key) + { + case EDataType.Bool: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + case EDataType.Byte: + break; + case EDataType.Int: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + case EDataType.Word: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + case EDataType.Dint: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + case EDataType.Dword: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + case EDataType.Float: + ResultArray = modbusTcpMaster.Read(value.StartAddress.ToString(), value.Length)?.Content; + break; + default: + break; + } + SetValue(ResultArray, item.DeviceName, value, temp.Key); + }); }); Thread.Sleep(100); @@ -128,32 +162,51 @@ namespace BPASmart.Server { if (CommunicationDevices.ContainsKey(item.DeviceName)) { - switch (item.DataType) + string address = string.Empty; + if (item.RealAddress != null && item.RealAddress.Length > 0) address = item.DeviceName; + else + { + var res = Json.Data.CommunicationDevices.FirstOrDefault(p => p.DeviceName == item.DeviceName); + var res2 = res?.VarTableModels.FirstOrDefault(p => p.VarName?.Length > 0 && p.VarName == item.VarName); + address = res2?.RealAddress; + } + if (item.Value != null && item.Value.Length > 0) { - case EDataType.Bool: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToBoolean(item.Value)); - break; - case EDataType.Byte: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToByte(item.Value)); - break; - case EDataType.Int: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToInt16(item.Value)); - break; - case EDataType.Word: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToUInt16(item.Value)); - break; - case EDataType.Dint: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToInt32(item.Value)); - break; - case EDataType.Dword: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToUInt32(item.Value)); - break; - case EDataType.Float: - CommunicationDevices[item.DeviceName].Write(item.RealAddress, Convert.ToSingle(item.Value)); - break; - default: - break; + switch (item.DataType) + { + case EDataType.Bool: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToBoolean(item.Value)); + break; + case EDataType.Byte: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToByte(item.Value)); + break; + case EDataType.Int: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt16(item.Value)); + break; + case EDataType.Word: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt16(item.Value)); + break; + case EDataType.Dint: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToInt32(item.Value)); + break; + case EDataType.Dword: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToUInt32(item.Value)); + break; + case EDataType.Float: + //CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value)); + CommunicationDevices[item.DeviceName].Write(address, Convert.ToSingle(item.Value)); + break; + default: + break; + } } + } }); } @@ -195,6 +248,67 @@ namespace BPASmart.Server } } + private ushort GetBySize(EDataType eDataType) + { + switch (eDataType) + { + case EDataType.Bool: + case EDataType.Byte: + case EDataType.Int: + case EDataType.Word: + return 1; + case EDataType.Dint: + case EDataType.Dword: + case EDataType.Float: + return 2; + case EDataType.Double: + break; + case EDataType.String: + break; + default: + break; + } + return 1; + } + + private void SetValue(Array arrays, string DeviceName, ReadDataModel readDataModel, EDataType eDataType) + { + if (arrays != null) + { + ushort by = GetBySize(eDataType); + int index = Array.FindIndex(Json.Data.CommunicationDevices.ToArray(), p => p.DeviceName == DeviceName);//获取设备所在集合位置 + if (index >= 0 && index < Json.Data.CommunicationDevices.Count) + { + var tempArray = Json.Data.CommunicationDevices.ElementAt(index).VarTableModels.ToArray(); + for (int i = 0; i < arrays.Length; i++) + { + int varIndex = Array.FindIndex(tempArray, p => p.RealAddress == (readDataModel.StartAddress + (i * by)).ToString()); + if (varIndex >= 0 && varIndex < tempArray.Length) + { + Json.Data.CommunicationDevices.ElementAt(index).VarTableModels.ElementAt(varIndex).CurrentValue = arrays.GetValue(i)?.ToString(); + } + } + var Devicename = Json.Data.CommunicationDevices[index].DeviceName; + List reeisDataModels = new List(); + Json.Data.CommunicationDevices[index].VarTableModels.ToList().ForEach(tempVar => + { + if (tempVar.VarName.Length > 0) + { + reeisDataModels.Add(new ReeisDataModel() + { + VarName = tempVar.VarName, + VarVaule = tempVar.CurrentValue, + DataType = (EDataType)Enum.Parse(typeof(EDataType), tempVar.DataType) + }); + } + }); + RedisHelper.GetInstance.SetValue($"{Devicename}", reeisDataModels); + } + } + } + + + private Dictionary> GetReadDataModels(CommunicationModel communicationModel) { Dictionary> readDataModels = new Dictionary>(); diff --git a/BPASmart.VariableManager/BPASmart.VariableManager.csproj b/BPASmart.VariableManager/BPASmart.VariableManager.csproj index 3f880b50..98e24358 100644 --- a/BPASmart.VariableManager/BPASmart.VariableManager.csproj +++ b/BPASmart.VariableManager/BPASmart.VariableManager.csproj @@ -29,7 +29,7 @@ - + diff --git a/ComputerTestDemo/ComputerTestDemo.csproj b/ComputerTestDemo/ComputerTestDemo.csproj index 92cf8ade..e0ff7113 100644 --- a/ComputerTestDemo/ComputerTestDemo.csproj +++ b/ComputerTestDemo/ComputerTestDemo.csproj @@ -9,8 +9,8 @@ - - + +