using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Plc.Factory;
using SlnMesnac.Plc;
using System;
using System.Collections.Generic;
using System.Text;
using SlnMesnac.Config;
using Serilog;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本:4.0.30319.42000
* 机器名称:LAPTOP-E0N2L34V
* 命名空间:SlnMesnac.Extensions
* 唯一标识:f75da6dc-edf6-4328-848b-1f45a9b9f38b
*
* 创建者:WenJY
* 电子邮箱:wenjy@mesnac.com
* 创建时间:2024-04-15 09:52:10
* 版本: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 (!HslCommunication.Authorization.SetAuthorizationCode("1839541f-8fb4-42c4-a13f-733b027fe5af"))
{
Log.Information("HslCommunication激活失败,可用时长24小时");
}
Log.Information("HslCommunication 11.8.1.0激活成功");
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")}");
}
else
{
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);
}
}
}
}
catch (Exception e)
{
Log.Error($"PLC初始化连接异常:{e.Message}");
}
return absractFactories;
});
}
public 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;
}
}
}