SiemensS7Net

master
杨威 7 months ago
parent 41fbc809b7
commit c518303ae1

@ -1,5 +1,6 @@
using NewLife.Extensions.Hosting.AgentService;
using NewLife.Log;
using SqlSugar;
using SynPlc;
// 授权示例 Authorization example
@ -15,6 +16,35 @@ IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
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 =>
{

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