From 2c450ea383bd0616c394af23feb4d1eaecb69884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=84=8F=20=E5=BD=AD?= <2417589739@qq.com> Date: Fri, 16 Sep 2022 18:23:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=BD=93=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BPASmart.Server/BPASmart.Server.csproj | 5 +- BPASmart.Server/CommunicationServer.cs | 239 +++++++++++++----- .../BPASmart.VariableManager.csproj | 2 +- ComputerTestDemo/ComputerTestDemo.csproj | 4 +- 4 files changed, 183 insertions(+), 67 deletions(-) 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..6cbb3917 100644 --- a/BPASmart.Server/CommunicationServer.cs +++ b/BPASmart.Server/CommunicationServer.cs @@ -37,45 +37,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 +163,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 +249,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 @@ - - + +