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; } } }