From 46ba36bfa6ae5538dc342a25c12ecfdc74de785a Mon Sep 17 00:00:00 2001 From: dell Date: Thu, 4 Jul 2024 16:10:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=90=84=E7=A7=8D=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E9=80=A0=E6=88=90=E7=9A=84=E6=97=B6=E9=97=B4=E6=8D=9F?= =?UTF-8?q?=E8=80=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DriverSiemensS7/S7ClientExample.cs | 92 ++++++++------ HTCoreServiceApp/DataHandle/DataExtract.cs | 19 +-- HTCoreServiceApp/DataHandle/DataStorage.cs | 114 +++++++++--------- HTCoreServiceApp/Program.cs | 3 +- 4 files changed, 120 insertions(+), 108 deletions(-) diff --git a/HTCoreServiceApp/Communicate/DriverSiemensS7/S7ClientExample.cs b/HTCoreServiceApp/Communicate/DriverSiemensS7/S7ClientExample.cs index d676d5c..1e12738 100644 --- a/HTCoreServiceApp/Communicate/DriverSiemensS7/S7ClientExample.cs +++ b/HTCoreServiceApp/Communicate/DriverSiemensS7/S7ClientExample.cs @@ -19,6 +19,7 @@ using Pipelines.Sockets.Unofficial.Arenas; using System.Numerics; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; +using Dm; namespace HTCoreServiceApp.Communicate.DriverSiemensS7 { @@ -79,7 +80,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 Client.SetConnectionType(0x3); Client.ConnTimeout= Timeout; - Client.RecvTimeout = 30; + Client.RecvTimeout = 50; @@ -204,7 +205,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 //object _lock = new(); - Task task = Task.Factory.StartNew(() => + Task task = Task.Run(() => { lock (_lock) { @@ -230,40 +231,48 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 byte[] buffer = new byte[amount]; int pdu = PLCHelper.GetSiemensPDU(PLCType) * 2 - 18; int Result = 0; - if (amount <= pdu) - { - Result = ReadArea(Area, DBNumber, startAdress, amount, WordLen, ref buffer); - } - else - { - //int additional = amount- pdu; - int forCount = (int)Math.Ceiling(float.Parse(((float)amount / (float)pdu).ToString())); - List bytes= new List(); - for (int i = 0; i < forCount; i++) - { - if ((amount - (i * pdu)) > pdu) - { - int start = startAdress + i * pdu; - byte[] bytes1 = new byte[pdu]; - Result = ReadArea(Area, DBNumber, start, pdu, WordLen, ref bytes1); - bytes.Add(bytes1); - } - else - { - int start = startAdress + i * pdu; - byte[] bytes1 = new byte[amount - (i * pdu)]; - Result = ReadArea(Area, DBNumber, start, amount - (i * pdu), WordLen, ref bytes1); - bytes.Add(bytes1); - } - Thread.Sleep(3); - } - var byetstemp = Array.Empty(); - foreach (var buff in bytes) - { - byetstemp = byetstemp.Concat(buff).ToArray(); - } - buffer = byetstemp; - } + + + //byte[] bufferr = new byte[amount]; + Result = ReadArea(Area, DBNumber, startAdress, amount, WordLen, ref buffer); + + + //if (amount <= pdu) + //{ + // Result = ReadArea(Area, DBNumber, startAdress, amount, WordLen, ref buffer); + //} + //else + //{ + // //int additional = amount- pdu; + // int forCount = (int)Math.Ceiling(float.Parse(((float)amount / (float)pdu).ToString())); + // List bytes= new List(); + // for (int i = 0; i < forCount; i++) + // { + // if ((amount - (i * pdu)) > pdu) + // { + // int start = startAdress + i * pdu; + // byte[] bytes1 = new byte[pdu]; + // Result = ReadArea(Area, DBNumber, start, pdu, WordLen, ref bytes1); + // bytes.Add(bytes1); + // } + // else + // { + // int start = startAdress + i * pdu; + // byte[] bytes1 = new byte[amount - (i * pdu)]; + // Result = ReadArea(Area, DBNumber, start, amount - (i * pdu), WordLen, ref bytes1); + // bytes.Add(bytes1); + // } + // Thread.Sleep(3); + // } + // var byetstemp = Array.Empty(); + // foreach (var buff in bytes) + // { + // byetstemp = byetstemp.Concat(buff).ToArray(); + // } + // buffer = byetstemp; + //} + + var tcollend = DateTime.Now; var timecolldiff = tcollend - tcollstart; Console.WriteLine($"S7读取耗时:{timecolldiff},设备:{DriverName}变量组:{scanTagsPara.GroupName}"); @@ -275,8 +284,11 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 var t1 = DateTime.Now; Console.WriteLine(string.Join(",", buffer) + "S7读取完成:DB" + DBNumber.ToString() + ",字节数:" + amount.ToString()); //Task saveResult = DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg); + var ss = new DataExtract(); + long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); Task.Run(()=> - DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg) + + ss.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg, hdatetime) ); var t2 = DateTime.Now; var timediff = t2- t1; @@ -424,7 +436,9 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 var t1 = DateTime.Now; Console.WriteLine(string.Join(",", buffer) + "S7<工艺设定参数>读取完成:DB" + DBNumber.ToString() + ",字节数:" + amount.ToString()); //Task saveResult = DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg); - DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg); + var ss = new DataExtract(); + long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); + ss.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg, hdatetime); var t2 = DateTime.Now; var timediff = t2 - t1; Console.WriteLine($"S7<工艺设定参数>缓存和储存耗时:{timediff}"); @@ -474,7 +488,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7 //Connect(); return -1; } - Thread.Sleep(50); + Thread.Sleep(10); } return recode; diff --git a/HTCoreServiceApp/DataHandle/DataExtract.cs b/HTCoreServiceApp/DataHandle/DataExtract.cs index 88ea36c..43f48e1 100644 --- a/HTCoreServiceApp/DataHandle/DataExtract.cs +++ b/HTCoreServiceApp/DataHandle/DataExtract.cs @@ -16,15 +16,16 @@ namespace HTCoreServiceApp.DataHandle { public class DataExtract { - public static async void DataExtractCAsync(List metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg) + public async void DataExtractCAsync(List metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg, long hdatetime) { - string res = await DataExtractConsecutive(metaTags, systenName, groupName, driverName, bytes, addressArg); + string res = await DataExtractConsecutive(metaTags, systenName, groupName, driverName, bytes, addressArg, hdatetime); } - public static Task DataExtractConsecutive(List metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg) + public Task DataExtractConsecutive(List metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg, long hdatetime) { return Task.Run(() => { - long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); + Console.WriteLine($"{systenName}_{driverName}_{groupName}开始执行储存和缓存 时间 {hdatetime}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); + //long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); List listMetaTagValue = new List(); try { @@ -66,17 +67,19 @@ namespace HTCoreServiceApp.DataHandle //异步缓存 - Task.Run(() => + var task1 = Task.Run(() => DataLiving.DataLive2CaChe(listMetaTagValue, driverName, groupName) ); //异步储存 - Task.Run(()=> + var task2 = Task.Run(()=> DataStorage.DataSave2DB(listMetaTagValue, systenName, driverName, groupName, hdatetime) ); - + + //Task.WaitAll(new Task[] {task1,task2}); + return "0"; } catch (Exception ex) @@ -171,7 +174,7 @@ namespace HTCoreServiceApp.DataHandle switch (dataType) { case (short)DataType.FLOAT: - return S7.GetRealAt(bytes, address_int).ToString(); + return S7.GetRealAt(bytes, address_int).ToString("0.########"); case (short)DataType.BOOL: return S7.GetBitAt(bytes, address_int,address_dem).ToString(); case (short)DataType.INT: diff --git a/HTCoreServiceApp/DataHandle/DataStorage.cs b/HTCoreServiceApp/DataHandle/DataStorage.cs index 66734f9..7e22ddf 100644 --- a/HTCoreServiceApp/DataHandle/DataStorage.cs +++ b/HTCoreServiceApp/DataHandle/DataStorage.cs @@ -27,10 +27,11 @@ namespace HTCoreServiceApp.DataHandle //string tableName = $"{GroupName}_etldata"; string tableName = $"ED_{systenName}_{driverName}_{GroupName}"; sql += $"INSERT INTO dbo.{tableName} "; - string field = "HDATETIME"; + string field = "HDATETIME,HTIME"; string value = ""; + var htime = hdatetime / 1000; //long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); - value += hdatetime; + value += $"{hdatetime},{htime}"; foreach (MetaTagValue metaTagValue in metaTagvalues) { field += $",{metaTagValue.TagName}"; @@ -63,11 +64,12 @@ namespace HTCoreServiceApp.DataHandle } } sql += $"({field}) VALUES ({value});"; - + var t9 = DateTime.Now; //string ConnectionStrings = AESKeyEncrypt.DecryptDES(ConfigHelper.ReadAppSettings("ConnectionStrings", "SqlServer")); var db =new SqlSugarClient(StaticLibrary.DBConfig); try { + int sqlExecuteResult = db.Ado.ExecuteCommand(sql); //db.Database.ExecuteSqlRaw(sql); if (sqlExecuteResult == 1) @@ -81,7 +83,7 @@ namespace HTCoreServiceApp.DataHandle db.Dispose(); var t6 = DateTime.Now; - var timediff3 = t6 - t5; + var timediff3 = t6 - t9; Console.WriteLine($"{driverName}_{GroupName}数据储存耗时:{timediff3}"); return 0; @@ -99,15 +101,17 @@ namespace HTCoreServiceApp.DataHandle var sqlcol = ""; foreach (var sysType in sysTypeList) { + sqlcol = ""; var metaTagofSys = metaTagvalues.Where(x => x.SysType == sysType).ToList(); string sql = ""; //string tableName = $"{GroupName}_etldata"; string tableName = $"ED_{systenName}_{driverName}_{GroupName}_{sysType}"; sql += $"INSERT INTO dbo.{tableName} "; - string field = "HDATETIME"; + string field = "HDATETIME,HTIME"; string value = ""; + var htime = hdatetime / 1000; //long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); - value += hdatetime; + value += $"{hdatetime},{htime}"; foreach (MetaTagValue metaTagValue in metaTagofSys) { field += $",{metaTagValue.TagName}"; @@ -127,10 +131,19 @@ namespace HTCoreServiceApp.DataHandle { try { - d_value = decimal.Parse(metaTagValue.TagValue); + //var t11 = DateTime.Now; + + //d_value = decimal.Parse(metaTagValue.TagValue); + //var t12 = DateTime.Now; + //var timediff12 = t12 - t11; + //Console.WriteLine($"{driverName}_{GroupName}string转decimal耗时:{timediff12}"); - string s_d_value = string.Format("{0:#,0.########}", d_value).Replace(",", ""); - value += $",{s_d_value}"; + //string s_d_value = string.Format("{0:#,0.########}", d_value).Replace(",", ""); + //var t13 = DateTime.Now; + //var timediff13 = t13 - t11; + //Console.WriteLine($"{driverName}_{GroupName}处理科学计数法耗时:{timediff13}"); + + value += $",{metaTagValue.TagValue}"; } catch { @@ -141,60 +154,41 @@ namespace HTCoreServiceApp.DataHandle } sql += $"({field}) VALUES ({value});"; sqlcol += sql; - sqlcol += ";"; - //string ConnectionStrings = ConfigHelper.ReadAppSettings("ConnectionStrings", "SqlServer"); - //var db = new ScadaContext(ConnectionStrings); + + var t7 = DateTime.Now; + var timediff7 = t7 - t5; + Console.WriteLine($"{driverName}_{GroupName}SQL数据整理耗时:{timediff7}"); + + //string ConnectionStrings = AESKeyEncrypt.DecryptDES(ConfigHelper.ReadAppSettings("ConnectionStrings", "SqlServer")); + var db = new SqlSugarClient(StaticLibrary.DBConfig); + var t9 = DateTime.Now; + try + { + int sqlExecuteResult = db.Ado.ExecuteCommand(sqlcol); //db.Database.ExecuteSqlRaw(sqlcol); + if (sqlExecuteResult == 1) + { + Console.WriteLine($"{driverName}_{GroupName}写入成功:{sqlExecuteResult}行"); + } + else + { + Console.WriteLine($"{driverName}_{GroupName}写入失败:{sqlExecuteResult}"); + } + db.Dispose(); + //return 0; + } + catch (Exception ex) + { + Console.WriteLine($"{driverName}_{GroupName}写入出错:{ex}"); + db.Dispose(); + //return -1; + } + var t6 = DateTime.Now; + var timediff3 = t6 - t9; + Console.WriteLine($"{driverName}_{GroupName}数据储存耗时:{timediff3}"); - //try - //{ - // int sqlExecuteResult = db.Database.ExecuteSqlRaw(sql); - // if (sqlExecuteResult == 1) - // { - // Console.WriteLine($"{tableName}写入成功:{sqlExecuteResult}行"); - // } - // else - // { - // Console.WriteLine($"{tableName}写入失败:{sqlExecuteResult}"); - // } - // db.Dispose(); - // //return 0; - //} - //catch (Exception ex) - //{ - // Console.WriteLine($"{tableName}写入出错:{ex}"); - // db.Dispose(); - // continue; - // //return -1; - //} } - - - //string ConnectionStrings = AESKeyEncrypt.DecryptDES(ConfigHelper.ReadAppSettings("ConnectionStrings", "SqlServer")); - var db = new SqlSugarClient(StaticLibrary.DBConfig); - try - { - int sqlExecuteResult = db.Ado.ExecuteCommand(sqlcol); //db.Database.ExecuteSqlRaw(sqlcol); - if (sqlExecuteResult == sysTypeList.Count) - { - Console.WriteLine($"{driverName}_{GroupName}写入成功:{sqlExecuteResult}行"); - } - else - { - Console.WriteLine($"{driverName}_{GroupName}写入失败:{sqlExecuteResult}"); - } - db.Dispose(); - //return 0; - } - catch (Exception ex) - { - Console.WriteLine($"{driverName}_{GroupName}写入出错:{ex}"); - db.Dispose(); - //return -1; - } - var t6 = DateTime.Now; - var timediff3 = t6 - t5; - Console.WriteLine($"{driverName}_{GroupName}数据储存耗时:{timediff3}"); + return 0; diff --git a/HTCoreServiceApp/Program.cs b/HTCoreServiceApp/Program.cs index 19dcf76..a182e24 100644 --- a/HTCoreServiceApp/Program.cs +++ b/HTCoreServiceApp/Program.cs @@ -1,4 +1,5 @@ using HTCoreServiceApp.Common; +using HTCoreServiceApp.DataHandle; using HTCoreServiceApp.WebApi; using Microsoft.AspNetCore.Http.Headers; using Microsoft.AspNetCore.Http.HttpResults; @@ -41,7 +42,7 @@ namespace HTCoreServiceApp //builder.Services.AddEndpointsApiExplorer(); builder.Services.AddScoped();//apiٶ - + builder.Services.AddTransient(); builder.Services.AddSingleton(); var app = builder.Build();