SiemensS7Net

master
杨威 7 months ago
parent 41fbc809b7
commit c518303ae1

@ -1,5 +1,6 @@
using NewLife.Extensions.Hosting.AgentService; using NewLife.Extensions.Hosting.AgentService;
using NewLife.Log; using NewLife.Log;
using SqlSugar;
using SynPlc; using SynPlc;
// 授权示例 Authorization example // 授权示例 Authorization example
@ -15,6 +16,35 @@ IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services => .ConfigureServices(services =>
{ {
services.AddHostedService<Worker>(); services.AddHostedService<Worker>();
services.AddScoped<ISqlSugarClient>(s =>
{
//Scoped用SqlSugarClient
SqlSugarClient sqlSugar = new SqlSugarClient (new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = "server=175.27.215.92;uid=sa;pwd=Hawei@123;database=Hsdb;",
IsAutoCloseConnection = true,
},
db =>
{
//每次上下文都会执行
//获取IOC对象不要求在一个上下文
//var log=s.GetService<Log>()
//获取IOC对象要求在一个上下文
//var appServive = s.GetService<IHttpContextAccessor>();
//var log= appServive?.HttpContext?.RequestServices.GetService<Log>();
db.Aop.OnLogExecuting = (sql, pars) =>
{
XTrace.WriteLine(UtilMethods.GetNativeSql(sql, pars));
};
});
return sqlSugar;
});
}) })
.UseAgentService(options => .UseAgentService(options =>
{ {

@ -8,16 +8,12 @@ namespace SynPlc;
public class Worker : BackgroundService public class Worker : BackgroundService
{ {
private readonly ILogger<Worker> _logger;
SiemensS7Net S7 = PlcConnect.Instance;
SqlSugarScope DB; private IServiceScopeFactory scopeFactory;
SiemensS7Net S7; public Worker(IServiceScopeFactory _scopeFactory)
public Worker(ILogger<Worker> logger)
{ {
_logger = logger; this.scopeFactory=_scopeFactory;
DB = SqlSugarHelper.Db;
S7 = PlcConnect.Instance;
} }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
@ -42,7 +38,11 @@ public class Worker : BackgroundService
private async Task SynPlcFromDb(CancellationToken stoppingToken) private async Task SynPlcFromDb(CancellationToken stoppingToken)
{ {
var list = await DB.Queryable<EEquipmentStateEntity>().ToListAsync(stoppingToken);
using var scope = scopeFactory.CreateScope();
var services = scope.ServiceProvider;
var dbClient = services.GetService<ISqlSugarClient>();
var list = await dbClient.Queryable<EEquipmentStateEntity>().ToListAsync(stoppingToken);
foreach(var e in list) foreach(var e in list)
{ {
var a = await S7.ReadBoolAsync(e.Point); var a = await S7.ReadBoolAsync(e.Point);
@ -50,7 +50,7 @@ public class Worker : BackgroundService
{ {
e.UpdateTime = DateTime.Now; e.UpdateTime = DateTime.Now;
e.PValue = a.Content; e.PValue = a.Content;
await DB.Updateable(e).UpdateColumns(x => new { x.UpdateTime, x.PValue }).ExecuteCommandAsync(stoppingToken); await dbClient.Updateable(e).UpdateColumns(x => new { x.UpdateTime, x.PValue }).ExecuteCommandAsync(stoppingToken);
} }
else else
{ {
@ -58,23 +58,31 @@ public class Worker : BackgroundService
} }
} }
var listp = await DB.Queryable<EPointsInfoEntity>().ToListAsync(stoppingToken); var listp = await dbClient.Queryable<EPointsInfoEntity>().ToListAsync(stoppingToken);
EPointDataEntity listd = new EPointDataEntity();
List<EPointDataEntity> ls = new List<EPointDataEntity>();
foreach (var e in listp) foreach (var e in listp)
{ {
var a = await S7.ReadDoubleAsync(e.Point); var a = await S7.ReadDoubleAsync(e.Point);
if (a.IsSuccess) if (a.IsSuccess)
{ {
EPointDataEntity listd = new EPointDataEntity();
listd.ID = Guid.NewGuid().ToString(); listd.ID = Guid.NewGuid().ToString();
listd.PID = e.ID; listd.PID = e.ID;
listd.CreateTime = DateTime.Now; listd.CreateTime = DateTime.Now;
listd.Data = a.Content.ToDecimal(); listd.Data = a.Content.ToDecimal();
await DB.Insertable(listd).ExecuteCommandAsync(stoppingToken); ls.Add(listd);
} }
else else
{ {
XTrace.WriteLine("{0} 读取异常",e.Point ); XTrace.WriteLine("{0} 读取异常",e.Point );
} }
} }
if (ls.Any())
{
await dbClient.Insertable(ls).ExecuteCommandAsync(stoppingToken);
}
} }
} }
Loading…
Cancel
Save