优化科学计数法带来的时间损失;修改主采集循环为单个group一个timer

This commit is contained in:
dell
2024-07-05 17:03:25 +08:00
parent 46ba36bfa6
commit cbf2e1ab27
5 changed files with 257 additions and 155 deletions

View File

@ -9,9 +9,11 @@ namespace HTCoreServiceApp.Common
public class ScanTimer : System.Timers.Timer public class ScanTimer : System.Timers.Timer
{ {
private List<ScanTagsPara> scanTagsParas; private List<ScanTagsPara> scanTagsParas;
private ScanTagsPara scanTagsPara;
private AddressArg addressArg; private AddressArg addressArg;
public List<ScanTagsPara> ScanTagsParas { get => scanTagsParas; set => scanTagsParas = value; } public List<ScanTagsPara> ScanTagsParas { get => scanTagsParas; set => scanTagsParas = value; }
public ScanTagsPara ScanTagsPara { get => scanTagsPara; set => scanTagsPara = value; }
public AddressArg AddressArg { get => addressArg; set => addressArg = value; } public AddressArg AddressArg { get => addressArg; set => addressArg = value; }

View File

@ -80,7 +80,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7
Client.SetConnectionType(0x3); Client.SetConnectionType(0x3);
Client.ConnTimeout= Timeout; Client.ConnTimeout= Timeout;
Client.RecvTimeout = 50; Client.RecvTimeout = 200;
@ -168,22 +168,25 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7
/// <param name="scanTagsParas"></param> /// <param name="scanTagsParas"></param>
public void ScanConsecutive(List<ScanTagsPara> scanTagsParas) public void ScanConsecutive(List<ScanTagsPara> scanTagsParas)
{ {
ScanTimer timerScan = new ScanTimer(); foreach (var scanTagsPara in scanTagsParas)
if (scanTagsParas[0].UpdateRate > 0)
{ {
timerScan.Interval = (double)scanTagsParas[0].UpdateRate; ScanTimer timerScan = new ScanTimer();
if (scanTagsPara.UpdateRate > 0)
{
timerScan.Interval = (double)scanTagsPara.UpdateRate;
} }
else else
{ {
timerScan.Interval = 1000; timerScan.Interval = 1000;
} }
timerScan.ScanTagsParas= scanTagsParas; timerScan.ScanTagsPara = scanTagsPara;
//timerScan.AddressArg = PLCHelper.GetAddressArg(scanTagsParas.ScanTags); //timerScan.AddressArg = PLCHelper.GetAddressArg(scanTagsParas.ScanTags);
timerScan.Elapsed += new System.Timers.ElapsedEventHandler(TimerScanConsecutive_Elapsed); timerScan.Elapsed += new System.Timers.ElapsedEventHandler(TimerScanConsecutive_Elapsed);
timerScan.Enabled = true; timerScan.Enabled = true;
} }
}
/// <summary> /// <summary>
/// 连续读取timer事件 /// 连续读取timer事件
/// </summary> /// </summary>
@ -191,13 +194,13 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7
/// <param name="e"></param> /// <param name="e"></param>
private void TimerScanConsecutive_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) private void TimerScanConsecutive_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{ {
long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
ScanTimer timerScan = (ScanTimer)sender; ScanTimer timerScan = (ScanTimer)sender;
List<ScanTagsPara> scanTagsParas = timerScan.ScanTagsParas; ScanTagsPara scanTagsPara = timerScan.ScanTagsPara;
//AddressArg addressArg = timerScan.AddressArg; //AddressArg addressArg = timerScan.AddressArg;
foreach (var scanTagsPara in scanTagsParas)
{
if (scanTagsPara.IsActive == false) if (scanTagsPara.IsActive == false)
break; return;
if (Client.Connected) if (Client.Connected)
{ {
@ -285,7 +288,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7
Console.WriteLine(string.Join(",", buffer) + "S7读取完成DB" + DBNumber.ToString() + ",字节数:" + amount.ToString()); Console.WriteLine(string.Join(",", buffer) + "S7读取完成DB" + DBNumber.ToString() + ",字节数:" + amount.ToString());
//Task<int> saveResult = DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg); //Task<int> saveResult = DataExtract.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg);
var ss = new DataExtract(); var ss = new DataExtract();
long hdatetime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
Task.Run(()=> Task.Run(()=>
ss.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg, hdatetime) ss.DataExtractCAsync(scanTagsPara.ScanTags, scanTagsPara.SystemName, scanTagsPara.GroupName, scanTagsPara.DriverName, buffer, addressArg, hdatetime)
@ -341,7 +344,7 @@ namespace HTCoreServiceApp.Communicate.DriverSiemensS7
//Connect(); //Connect();
} }
Thread.Sleep(50); Thread.Sleep(50);
}
} }
/// <summary> /// <summary>

View File

@ -36,16 +36,16 @@
<None Remove="rd.xml" /> <None Remove="rd.xml" />
</ItemGroup>--> </ItemGroup>-->
<!--<ItemGroup> <ItemGroup>
<RdXmlFile Include="rd.xml" /> <RdXmlFile Include="rd.xml" />
</ItemGroup>--> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="libplctag" Version="1.2.0" /> <PackageReference Include="libplctag" Version="1.2.0" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" /> <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.123" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.160" />
<PackageReference Include="System.IO.Ports" Version="8.0.0" /> <PackageReference Include="System.IO.Ports" Version="8.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -45,6 +45,7 @@ namespace HTCoreServiceApp
builder.Services.AddTransient<DataExtract>(); builder.Services.AddTransient<DataExtract>();
builder.Services.AddSingleton<DeviceControl>(); builder.Services.AddSingleton<DeviceControl>();
var app = builder.Build(); var app = builder.Build();
#region <EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>api #region <EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>api
@ -76,7 +77,17 @@ namespace HTCoreServiceApp
#region <EFBFBD>޽ڵ<EFBFBD>api #region <EFBFBD>޽ڵ<EFBFBD>api
#endregion #endregion
dataLiveCacheApi.MapGet("/GetLiveSystemAllData/systemName={systemName}",
async (string systemName, DataLiveCache dlc)
=> Results.Content(await dlc.GetLiveSystemAllData(systemName)));
dataLiveCacheApi.MapGet("/GetLiveDriverAllData/driverName={driverName}",
async (string driverName, DataLiveCache dlc)
=> Results.Content(await dlc.GetLiveDriverAllData(driverName)));
dataLiveCacheApi.MapGet("/GetLiveGroupAllData/groupName={groupName}",
async (string groupName, DataLiveCache dlc)
=> Results.Content(await dlc.GetLiveGroupAllData(groupName)));
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>api #region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>api
#endregion #endregion

View File

@ -13,6 +13,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Nodes;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace HTCoreServiceApp.WebApi namespace HTCoreServiceApp.WebApi
{ {
@ -34,27 +36,35 @@ namespace HTCoreServiceApp.WebApi
public async Task<string> GetLiveSystemData(string systemName) public async Task<string> GetLiveSystemData(string systemName)
{ {
var dict = new Dictionary<string, string>();
var json = new JObject();
var db = new SqlSugarClient(StaticLibrary.DBConfig); var db = new SqlSugarClient(StaticLibrary.DBConfig);
var systemId = db.Queryable<MetaSystem>().Where(x => x.SystemName == systemName).First().SystemId; var systemId = db.Queryable<MetaSystem>().Where(x => x.SystemName == systemName).First().SystemId;
var groupList = db.Queryable<MetaGroup>().Where(x => x.SystemId == systemId).ToList(); var groupList = db.Queryable<MetaGroup>().Where(x => x.SystemId == systemId).ToList();
var driverdataDict = new Dictionary<string, List<Dictionary<string, JToken>>>();
//var jlist = new List<JObject>(); //var jlist = new List<JObject>();
//var driverList = new List<string>(); //var driverList = new List<string>();
foreach (var group in groupList) foreach (var group in groupList)
{ {
var groupdataDict = new Dictionary<string, JToken>();
var groupName = group.GroupName; var groupName = group.GroupName;
var driverName = db.Queryable<MetaDriver>().Where(x => x.DriverId == group.DriverId).First().DriverName; var driverName = db.Queryable<MetaDriver>().Where(x => x.DriverId == group.DriverId).First().DriverName;
var data = StaticLibrary.MemoryCacheHelper.GetString(groupName); var data = JsonConvert.DeserializeObject(StaticLibrary.MemoryCacheHelper.GetString(groupName)); ;
json.Add(driverName, new JObject(groupName, data));
groupdataDict.Add( groupName, (JToken?)data );
if(driverdataDict.Keys.Contains(driverName))
{
driverdataDict[driverName].Add(groupdataDict);
}
else
{
driverdataDict.Add(driverName,new List<Dictionary<string, JToken>>() { groupdataDict });
}
//driverList.Add(driverName); //driverList.Add(driverName);
//if (json.ContainsKey(driverName)) //if (json.ContainsKey(driverName))
//{ //{
@ -63,7 +73,15 @@ namespace HTCoreServiceApp.WebApi
//jlist.Add(new JObject(groupName, data)); //jlist.Add(new JObject(groupName, data));
} }
return json.ToString(); var rejson = JsonConvert.SerializeObject(driverdataDict, Newtonsoft.Json.Formatting.Indented);
return rejson;
//var groupJson = new JObject
// {
// { groupName, (JToken?)data }
// };
//json.Add(driverName, groupJson);
} }
public async Task<string> GetLiveDriverData(string driverName) public async Task<string> GetLiveDriverData(string driverName)
{ {
@ -131,5 +149,73 @@ namespace HTCoreServiceApp.WebApi
//var cache = StaticLibrary.MemoryCacheHelper.Get<List<LiveGroupDictionary>>(driverName).Where(x => x.GroupName == groupName).First(); //var cache = StaticLibrary.MemoryCacheHelper.Get<List<LiveGroupDictionary>>(driverName).Where(x => x.GroupName == groupName).First();
//return LiveJsonIntegrate.MetaTagValue2Json(cache, tagName); //return LiveJsonIntegrate.MetaTagValue2Json(cache, tagName);
//} //}
public async Task<string> GetLiveSystemAllData(string systemName)
{
var json = new JObject();
var db = new SqlSugarClient(StaticLibrary.DBConfig);
var systemId = db.Queryable<MetaSystem>().Where(x => x.SystemName == systemName).First().SystemId;
var groupList = db.Queryable<MetaGroup>().Where(x => x.SystemId == systemId).ToList();
foreach (var group in groupList)
{
var data = JsonConvert.DeserializeObject(StaticLibrary.MemoryCacheHelper.GetString(group.GroupName));
json.Merge((JToken?)data);
}
return json.ToString();
//var groupJson = new JObject
// {
// { groupName, (JToken?)data }
// };
//json.Add(driverName, groupJson);
}
public async Task<string> GetLiveDriverAllData(string driverName)
{
var dict = new Dictionary<string, string>();
var json = new JObject();
var db = new SqlSugarClient(StaticLibrary.DBConfig);
var driverId = db.Queryable<MetaDriver>().Where(x => x.DriverName == driverName).First().DriverId;
var groupList = db.Queryable<MetaGroup>().Where(x => x.DriverId == driverId).ToList();
foreach (var group in groupList)
{
var groupName = group.GroupName;
var data = JsonConvert.DeserializeObject(StaticLibrary.MemoryCacheHelper.GetString(groupName));
json.Merge((JToken?)data);
}
return json.ToString();
}
//[HttpGet]
public async Task<string> GetLiveGroupAllData(string groupName)
{
//var cache = StaticLibrary.MemoryCacheHelper.Get<List<LiveGroupDictionary>>(driverName).Where(x=>x.GroupName == groupName).First();
//var val = new List<LiveGroupDictionary>();
//StaticLibrary.MemoryCacheHelper.TryGetValue(driverName,out val);
//return LiveJsonIntegrate.MetaValues2Json(val.FirstOrDefault());
//public static string StringToJson(string JsonString)
//{ // string 转换成Json JsonDocument jsonDocument = JsonDocument.Parse(JsonString);//这里序列化成json return JsonSerializer.Serialize(jsonDocument.RootElement); }//在main中调用
try
{
//var result = StaticLibrary.MemoryCacheHelper.GetString(groupName);
//Console.WriteLine(result);
//return result;
//return valueJson.ToString();
return StaticLibrary.MemoryCacheHelper.GetString(groupName);
}
catch (Exception ex)
{
return ex.Message;
}
}
} }
} }