You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.3 KiB
C#

4 days ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using Sln.Wcs.ElevatorSdk.Dto;
using Sln.Wcs.Plc;
using Serilog;
using Sln.Wcs.Plc.Factory;
namespace Sln.Wcs.ElevatorSdk
{
public static class ElevatorSetup
{
public static void AddElevatorSetup(this IServiceCollection services)
{
services.AddSingleton<List<PlcAbsractFactory>>(x =>
{
var info = x.GetService<List<ElevatorInfo>>();
List<PlcAbsractFactory> ElevatorFactories = new List<PlcAbsractFactory>();
try
{
do
{
if (info != null)
{
foreach (var item in info)
{
if (item.IsEnabled)
{
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 (ElevatorFactories.Contains(_plc))
{
ElevatorFactories.Remove(_plc);
}
ElevatorFactories.Add(_plc);
}
}
}
} while (false);
}
catch (Exception e)
{
Log.Error($"PLC初始化连接异常{e.Message}");
}
return ElevatorFactories;
});
}
private static PlcAbsractFactory InitPlc(IServiceProvider serviceProvider, string plcType)
{
PlcAbsractFactory _plc = null;
var _inovance = serviceProvider.GetRequiredService<InovanceFactory>();
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;
}
}
}