解决各种转换造成的时间损耗
This commit is contained in:
@ -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<byte[]> bytes= new List<byte[]>();
|
||||
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<byte>();
|
||||
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<byte[]> bytes= new List<byte[]>();
|
||||
// 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<byte>();
|
||||
// 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<int> 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<int> 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;
|
||||
|
||||
|
@ -16,15 +16,16 @@ namespace HTCoreServiceApp.DataHandle
|
||||
{
|
||||
public class DataExtract
|
||||
{
|
||||
public static async void DataExtractCAsync(List<MetaTag> metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg)
|
||||
public async void DataExtractCAsync(List<MetaTag> 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 <string> DataExtractConsecutive(List<MetaTag> metaTags, string systenName, string groupName, string driverName, byte[] bytes, AddressArg addressArg)
|
||||
public Task <string> DataExtractConsecutive(List<MetaTag> 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<MetaTagValue> listMetaTagValue = new List<MetaTagValue>();
|
||||
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:
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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<DataLiveCache>();//<2F><><EFBFBD><EFBFBD>api<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
||||
|
||||
builder.Services.AddTransient<DataExtract>();
|
||||
builder.Services.AddSingleton<DeviceControl>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
Reference in New Issue
Block a user