using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Config;
using SlnMesnac.Plc;
using SlnMesnac.Plc.Factory;
using System;
using System.Collections.Generic;
using System.Text;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本:4.0.30319.42000
* 机器名称:LAPTOP-E0N2L34V
* 命名空间:SlnMesnac.Extensions
* 唯一标识:9bf604b4-3937-476a-adb0-27adc6fbea28
*
* 创建者:WenJY
* 电子邮箱:wenjy@mesnac.com
* 创建时间:2024-04-12 15:25:47
* 版本:V1.0.0
* 描述:
*
*--------------------------------------------------------------------
* 修改人:
* 时间:
* 修改说明:
*
* 版本:V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Extensions
{
///
/// PLC工厂
///
public static class PlcFactorySetup
{
public static void AddPlcFactorySetup(this IServiceCollection services)
{
services.AddSingleton>(x =>
{
AppConfig appConfig = x.GetService();
List absractFactories = new List();
try
{
if (appConfig.plcConfig != null)
{
foreach (var item in appConfig.plcConfig)
{
if (item.isFlage)
{
PlcAbsractFactory _plc = InitPlc(x, item.plcType);
var connectResult = _plc.Connect(item.plcIp, item.plcPort);
if (connectResult)
{
Log.Information($"PLC:{item.plcIp}:{item.plcPort};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
_plc.ConfigKey = item.plcKey;
if(absractFactories.Contains(_plc))
{
absractFactories.Remove(_plc);
}
absractFactories.Add(_plc);
}
else
{
Log.Information($"PLC:{item.plcIp}:{item.plcPort};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
}
}
}
}
catch (Exception e)
{
Log.Error($"PLC初始化连接异常:{e.Message}");
}
return absractFactories;
});
}
private static PlcAbsractFactory InitPlc(IServiceProvider serviceProvider,string plcType)
{
PlcAbsractFactory _plc = null;
var _inovance = serviceProvider.GetRequiredService();
var _melsecBinary = serviceProvider.GetRequiredService();
var _omronNj = serviceProvider.GetRequiredService();
var _siemens = serviceProvider.GetRequiredService();
switch (plcType)
{
case "InovancePlc":
_plc = _inovance;
break;
case "MelsecBinaryPlc":
_plc = _melsecBinary;
break;
case "OmronNJPlc":
_plc = _omronNj;
break;
case "SiemensPlc":
_plc = _siemens;
break;
default:
break;
}
return _plc;
}
}
}