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.Linq; 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 // { // do // { // if (!HslCommunication.Authorization.SetAuthorizationCode("1839541f-8fb4-42c4-a13f-733b027fe5af")) // { // Log.Information("HslCommunication激活失败,可用时长为24小时"); // break; // } // else // { // Log.Information("HslCommunication激活成功"); // } // 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")}"); // } // } // } // } // }while(false); // } // catch (Exception e) // { // Log.Error($"PLC初始化连接异常:{e.Message}"); // } // return absractFactories; //}); services.AddSingleton(x => { AppConfig appConfig = x.GetService(); //List absractFactories = new List(); try { do { if (!HslCommunication.Authorization.SetAuthorizationCode("1839541f-8fb4-42c4-a13f-733b027fe5af")) { Log.Information("HslCommunication激活失败,可用时长为24小时"); break; } else { Log.Information("HslCommunication激活成功"); } if (appConfig.plcConfig != null) { PlcConfig item = appConfig.plcConfig.Where(x => x.plcKey == "iot").FirstOrDefault(); 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; return _plc; } else { Log.Information($"PLC:{item.plcIp}:{item.plcPort};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); } } } } while (false); } catch (Exception e) { Log.Error($"PLC初始化连接异常:{e.Message}"); } return null; }); } 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; } } }