diff --git a/SlnMesnac.Business/Class1.cs b/SlnMesnac.Business/Class1.cs deleted file mode 100644 index 8124245..0000000 --- a/SlnMesnac.Business/Class1.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace SlnMesnac.Business -{ - public class Class1 - { - //业务逻辑类 - } -} diff --git a/SlnMesnac.Business/SlnMesnac.Business.csproj b/SlnMesnac.Business/SlnMesnac.Business.csproj index 8ef8970..4e2cf5e 100644 --- a/SlnMesnac.Business/SlnMesnac.Business.csproj +++ b/SlnMesnac.Business/SlnMesnac.Business.csproj @@ -5,4 +5,9 @@ enable + + + + + diff --git a/SlnMesnac.Business/base/BaseBusiness.cs b/SlnMesnac.Business/base/BaseBusiness.cs new file mode 100644 index 0000000..644ff4d --- /dev/null +++ b/SlnMesnac.Business/base/BaseBusiness.cs @@ -0,0 +1,106 @@ +using SlnMesnac.Plc; +using SlnMesnac.Rfid; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +#region << 版 本 注 释 >> +/*-------------------------------------------------------------------- +* 版权所有 (c) 2024 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:LAPTOP-E0N2L34V +* 命名空间:SlnMesnac.Business.base +* 唯一标识:b00d95c1-a164-43a3-9f34-2a5d2efb3f34 +* +* 创建者:WenJY +* 电子邮箱:wenjy@mesnac.com +* 创建时间:2024-04-12 17:36:19 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ +#endregion << 版 本 注 释 >> +namespace SlnMesnac.Business.@base +{ + internal class BaseBusiness + { + private readonly List _plcFactories; + + private readonly List _rfidFactories; + + public BaseBusiness(List plcFactories, List rfidFactories) + { + _plcFactories = plcFactories; + _rfidFactories = rfidFactories; + } + + /// + /// 根据Key获取PLC连接信息 + /// + /// + /// + /// + /// + public PlcAbsractFactory GetPlcByKey(string key) + { + if(_plcFactories == null) + { + throw new ArgumentNullException($"根据Key获取PLC连接信息异常:PLC 连接信息为空"); + } + + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("根据Key获取PLC连接信息异常:设备Key参数为空"); + } + + try + { + var info = _plcFactories.Where(x => x.ConfigKey == key).FirstOrDefault(); + + return info; + }catch(Exception ex) + { + throw new InvalidOperationException($"根据Key获取PLC连接信息异常:{ex.Message}"); + } + } + + + /// + /// 根据Key获取Rfid连接信息 + /// + /// + /// + /// + /// + public RfidAbsractFactory GetRfidByKey(string key) + { + if (_rfidFactories == null) + { + throw new ArgumentNullException($"根据Key获取RFID连接信息异常:PLC 连接信息为空"); + } + + if (string.IsNullOrEmpty(key)) + { + throw new ArgumentNullException("根据Key获取RFID连接信息异常:设备Key参数为空"); + } + + try + { + var info = _rfidFactories.Where(x => x.ConfigKey == key).FirstOrDefault(); + + return info; + } + catch (Exception ex) + { + throw new InvalidOperationException($"根据Key获取RFID连接信息异常:{ex.Message}"); + } + } + } +} diff --git a/SlnMesnac.Config/AppConfig.cs b/SlnMesnac.Config/AppConfig.cs index 64f58ea..1cfc66e 100644 --- a/SlnMesnac.Config/AppConfig.cs +++ b/SlnMesnac.Config/AppConfig.cs @@ -51,7 +51,13 @@ namespace SlnMesnac.Config /// RFID连接配置 /// public List rfidConfig { get; set; } - + + + /// + /// Redis配置 + /// + public string redisConfig { get; set; } + public AppConfig Value => this; } } diff --git a/SlnMesnac.Extensions/PlcFactorySetup.cs b/SlnMesnac.Extensions/PlcFactorySetup.cs new file mode 100644 index 0000000..383e7e1 --- /dev/null +++ b/SlnMesnac.Extensions/PlcFactorySetup.cs @@ -0,0 +1,118 @@ +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; + } + } +} diff --git a/SlnMesnac.Extensions/RfidFactorySetup.cs b/SlnMesnac.Extensions/RfidFactorySetup.cs new file mode 100644 index 0000000..ac5e29f --- /dev/null +++ b/SlnMesnac.Extensions/RfidFactorySetup.cs @@ -0,0 +1,87 @@ +using Microsoft.Extensions.DependencyInjection; +using Serilog; +using SlnMesnac.Config; +using SlnMesnac.Plc; +using SlnMesnac.Rfid; +using SlnMesnac.Rfid.Factory; +using System; +using System.Collections.Generic; +using System.Text; + +#region << 版 本 注 释 >> +/*-------------------------------------------------------------------- +* 版权所有 (c) 2024 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:LAPTOP-E0N2L34V +* 命名空间:SlnMesnac.Extensions +* 唯一标识:007aaf92-2adf-42a1-8b64-4e02925e3d5b +* +* 创建者:WenJY +* 电子邮箱:wenjy@mesnac.com +* 创建时间:2024-04-12 17:08:27 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ +#endregion << 版 本 注 释 >> +namespace SlnMesnac.Extensions +{ + public static class RfidFactorySetup + { + public static void AddRfidFactorySetup(this IServiceCollection services) + { + services.AddSingleton>(x => + { + AppConfig appConfig = x.GetService(); + List absractFactories = new List(); + + try + { + if (appConfig.rfidConfig != null) + { + foreach (var item in appConfig.rfidConfig) + { + if (item.isFlage) + { + RfidAbsractFactory _rfid = x.GetService(); + bool connectResult = _rfid.Connect(item.equipIp, item.equipPort); + if (connectResult) + { + Log.Information($"RFID:{item.equipIp}:{item.equipPort};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); + _rfid.ConfigKey = item.equipKey; + + if (absractFactories.Contains(_rfid)) + { + absractFactories.Remove(_rfid); + } + + absractFactories.Add(_rfid); + } + else + { + Log.Information($"RFID:{item.equipIp}:{item.equipPort};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); + } + } + } + } + else + { + Log.Error("RFID配置信息为空"); + } + } + catch (Exception e) + { + Log.Error($"RFID初始化连接异常:{e.Message}"); + } + + return absractFactories; + }); + } + } +} diff --git a/SlnMesnac.Extensions/SlnMesnac.Extensions.csproj b/SlnMesnac.Extensions/SlnMesnac.Extensions.csproj new file mode 100644 index 0000000..cd6c9bd --- /dev/null +++ b/SlnMesnac.Extensions/SlnMesnac.Extensions.csproj @@ -0,0 +1,15 @@ + + + + netstandard2.1 + enable + + + + + + + + + + diff --git a/SlnMesnac.Repository/SqlsugarSetup.cs b/SlnMesnac.Extensions/SqlsugarSetup.cs similarity index 89% rename from SlnMesnac.Repository/SqlsugarSetup.cs rename to SlnMesnac.Extensions/SqlsugarSetup.cs index 3f3557b..8761bea 100644 --- a/SlnMesnac.Repository/SqlsugarSetup.cs +++ b/SlnMesnac.Extensions/SqlsugarSetup.cs @@ -1,7 +1,5 @@ using Microsoft.Extensions.DependencyInjection; using SlnMesnac.Config; -using SlnMesnac.Repository.service; -using SlnMesnac.Repository.service.Impl; using SqlSugar; using System; using System.Collections.Generic; @@ -12,12 +10,12 @@ using System.Text; * 版权所有 (c) 2024 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:LAPTOP-E0N2L34V -* 命名空间:SlnMesnac.Repository -* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 +* 命名空间:SlnMesnac.Extensions +* 唯一标识:bbb46406-e99d-4205-8046-ad954cf88315 * * 创建者:WenJY * 电子邮箱:wenjy@mesnac.com -* 创建时间:2024-03-27 21:58:35 +* 创建时间:2024-04-12 17:31:43 * 版本:V1.0.0 * 描述: * @@ -29,7 +27,7 @@ using System.Text; * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> -namespace SlnMesnac.Repository +namespace SlnMesnac.Extensions { public static class SqlsugarSetup { diff --git a/SlnMesnac.Ioc/DependencyConfigurator.cs b/SlnMesnac.Ioc/DependencyConfigurator.cs index 77f1be8..6234bb9 100644 --- a/SlnMesnac.Ioc/DependencyConfigurator.cs +++ b/SlnMesnac.Ioc/DependencyConfigurator.cs @@ -43,10 +43,10 @@ namespace SlnMesnac.Ioc RegisterImplementations(builder, Assembly.LoadFrom("SlnMesnac.Repository.dll")); //注入Plc - RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Plc.dll")); + RegisterTypeTransient(builder, Assembly.LoadFrom("SlnMesnac.Plc.dll")); //注入Rfid - RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Rfid.dll")); + RegisterTypeTransient(builder, Assembly.LoadFrom("SlnMesnac.Rfid.dll")); //注入通用类 RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Common.dll")); @@ -90,7 +90,7 @@ namespace SlnMesnac.Ioc } /// - /// 自动注入自定义类、抽象类 + /// 自动注入自定义类、抽象类,设置为单例 /// /// /// @@ -119,5 +119,28 @@ namespace SlnMesnac.Ioc } } } + + /// + /// 自动注入自定义类,设置生命周期为每次解析返回新实例 + /// + /// + /// + private static void RegisterTypeTransient(ContainerBuilder builder, Assembly assembly) + { + var types = assembly.GetTypes() + .Where(t => t.IsClass && !t.IsAbstract && !t.IsGenericType) + .ToList(); + + foreach (var type in types) + { + var interfaces = type.GetInterfaces(); + var baseType = type.BaseType; + + if (!typeof(Delegate).IsAssignableFrom(type)) + { + builder.RegisterType(type).AsSelf().InstancePerDependency(); + } + } + } } } diff --git a/SlnMesnac.Plc/PlcAbsractFactory.cs b/SlnMesnac.Plc/PlcAbsractFactory.cs index d309ec6..049cf0a 100644 --- a/SlnMesnac.Plc/PlcAbsractFactory.cs +++ b/SlnMesnac.Plc/PlcAbsractFactory.cs @@ -24,6 +24,9 @@ namespace SlnMesnac.Plc { public abstract class PlcAbsractFactory { + + public string ConfigKey { get;set; } + /// /// 是否连接 /// diff --git a/SlnMesnac.Plc/PlcPool.cs b/SlnMesnac.Plc/PlcPool.cs deleted file mode 100644 index cf332c7..0000000 --- a/SlnMesnac.Plc/PlcPool.cs +++ /dev/null @@ -1,187 +0,0 @@ -using Microsoft.Extensions.Logging; -using SlnMesnac.Config; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using SlnMesnac.Plc.Factory; - -#region << 版 本 注 释 >> -/*-------------------------------------------------------------------- -* 版权所有 (c) 2024 WenJY 保留所有权利。 -* CLR版本:4.0.30319.42000 -* 机器名称:LAPTOP-E0N2L34V -* 命名空间:SlnMesnac.Plc -* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 -* -* 创建者:WenJY -* 电子邮箱:wenjy@mesnac.com -* 创建时间:2024-03-27 21:58:35 -* 版本:V1.0.0 -* 描述: -* -*-------------------------------------------------------------------- -* 修改人: -* 时间: -* 修改说明: -* -* 版本:V1.0.0 -*--------------------------------------------------------------------*/ -#endregion << 版 本 注 释 >> -namespace SlnMesnac.Plc -{ - /// - /// PLC连接池 - /// - public class PlcPool - { - private ILogger _logger; - private readonly AppConfig _appConfig; - - private Dictionary keyValuePairs ; - - private readonly InovanceFactory _inovance; - private readonly MelsecBinaryFactory _melsecBinary; - private readonly OmronNJFactory _omronNj; - private readonly SiemensFactory _siemens; - - public PlcPool(ILogger logger, InovanceFactory inovance,MelsecBinaryFactory melsecBinary,OmronNJFactory omronNj,SiemensFactory siemens, AppConfig appConfig) - { - _logger = logger; - _inovance = inovance; - _melsecBinary = melsecBinary; - _omronNj = omronNj; - _siemens = siemens; - _appConfig = appConfig; - - keyValuePairs = new Dictionary(); - } - public void Init() - { - if (!HslCommunication.Authorization.SetAuthorizationCode("1839541f-8fb4-42c4-a13f-733b027fe5af")) - { - _logger.LogInformation("HslCommunication激活失败,可用时长24小时"); - } - _logger.LogInformation("HslCommunication 11.8.1.0激活成功"); - - if (_appConfig.plcConfig != null) - { - foreach (var item in _appConfig.plcConfig) - { - if (item.isFlage) - { - AddPlc(item.plcType, item.plcIp, item.plcPort, item.plcKey); - } - } - } - else - { - _logger.LogInformation("PLC配置信息为空"); - } - } - - /// - /// 添加PLC连接 - /// - /// - /// - /// - /// - public void AddPlc(string plcType, string ip, int port, string key) - { - try - { - PlcAbsractFactory _plc = null; - switch (plcType) - { - case "InovancePlc": - _plc = _inovance; - break; - case "MelsecBinaryPlc": - _plc = _melsecBinary; - break; - case "OmronNJPlc": - _plc = _omronNj; - break; - case "SiemensPlc": - _plc = _siemens; - break; - default: - break; - } - var connectResult = _plc.Connect(ip, port); - if (connectResult) - { - _logger.LogInformation($"PLC:{ip}:{port};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); - if (!keyValuePairs.ContainsKey(key)) - { - keyValuePairs.Add(key, _plc); - } - else - { - keyValuePairs[key] = _plc; - } - } - else - { - _logger.LogInformation($"PLC:{ip}:{port};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); - } - } - catch (Exception e) - { - _logger.LogError($"PLC初始化连接异常:{e.Message}"); - } - } - - /// - /// 获取PLC - /// - /// - /// - public PlcAbsractFactory GetPlcByKey(string key) - { - try - { - return keyValuePairs[key]; - } - catch (Exception e) - { - throw new ArgumentException($"根据PLC Key获取连接信息异常:{e.Message}"); ; - } - } - - /// - /// 获取所有PLC信息 - /// - /// - public Dictionary GetAll() - { - return keyValuePairs; - } - - /// - /// 关闭所有连接 - /// - /// - public bool disConnectAll() - { - bool result = false; - try - { - foreach (var kv in keyValuePairs) - { - if (kv.Value != null) - { - kv.Value.DisConnect(); - } - } - result = true; - } - catch (Exception ex) - { - _logger.LogError("关闭PLC连接异常", ex); - } - - return result; - } - } -} diff --git a/SlnMesnac.Plc/PlcSetup.cs b/SlnMesnac.Plc/PlcSetup.cs deleted file mode 100644 index 95256f5..0000000 --- a/SlnMesnac.Plc/PlcSetup.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Linq; -using System.Reflection; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; -using SlnMesnac.Plc.Factory; - -#region << 版 本 注 释 >> -/*-------------------------------------------------------------------- -* 版权所有 (c) 2024 WenJY 保留所有权利。 -* CLR版本:4.0.30319.42000 -* 机器名称:LAPTOP-E0N2L34V -* 命名空间:SlnMesnac.Plc -* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 -* -* 创建者:WenJY -* 电子邮箱:wenjy@mesnac.com -* 创建时间:2024-03-27 21:58:35 -* 版本:V1.0.0 -* 描述: -* -*-------------------------------------------------------------------- -* 修改人: -* 时间: -* 修改说明: -* -* 版本:V1.0.0 -*--------------------------------------------------------------------*/ -#endregion << 版 本 注 释 >> -namespace SlnMesnac.Plc -{ - public static class PlcSetup - { - public static IApplicationBuilder UsePlcExtensions(this IApplicationBuilder app) - { - PlcPool? plcPool = app.ApplicationServices.GetService(); - if(plcPool != null) - { - plcPool.Init(); - } - return app; - } - - } -} diff --git a/SlnMesnac.Redis/RedisHandler.cs b/SlnMesnac.Redis/RedisHandler.cs new file mode 100644 index 0000000..4b0331c --- /dev/null +++ b/SlnMesnac.Redis/RedisHandler.cs @@ -0,0 +1,92 @@ +using Microsoft.Extensions.Logging; +using SlnMesnac.Config; +using StackExchange.Redis; +using System; +using System.Collections.Generic; +using System.Text; + +#region << 版 本 注 释 >> +/*-------------------------------------------------------------------- +* 版权所有 (c) 2024 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:LAPTOP-E0N2L34V +* 命名空间:SlnMesnac.Redis +* 唯一标识:00418016-53c9-4f87-a13f-daa19d656bba +* +* 创建者:WenJY +* 电子邮箱:wenjy@mesnac.com +* 创建时间:2024-04-12 15:15:25 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ +#endregion << 版 本 注 释 >> +namespace SlnMesnac.Redis +{ + public class RedisHandler + { + private ILogger _logger; + + private readonly AppConfig _appConfig; + + private readonly ISubscriber _subscriber; + + private readonly ConnectionMultiplexer redis; + + public RedisHandler(AppConfig appConfig, ILogger logger) + { + _appConfig = appConfig; + + redis = ConnectionMultiplexer.Connect(_appConfig.redisConfig); + _subscriber = redis.GetSubscriber(); + _logger = logger; + } + + + + /// + /// 推送消息 + /// + /// + /// + public void PublishMessage(string channel, string message) + { + long res = _subscriber.Publish(channel, message); + + _logger.LogInformation($"向主题:{channel};推送消息:{message};结果:{res}"); + } + + /// + /// 订阅消息 + /// + /// + /// + public void SubscribeToChannel(string channel, Action onMessageReceived) + { + _subscriber.Subscribe(channel, (ch, message) => + { + onMessageReceived(ch, message); + _logger.LogInformation($"订阅主题:{channel};收到主题:{ch};推送的消息:{message}"); + }); + } + + public void CleanExpiredMessages(string channel) + { + var redis = _subscriber.Multiplexer.GetDatabase(); + redis.KeyDelete(channel); + } + + public void SetValue(string key, string message) + { + IDatabase db = redis.GetDatabase(0); + TimeSpan expiry = TimeSpan.FromSeconds(10); + db.StringSet(key, message, expiry); + } + } +} diff --git a/SlnMesnac.Redis/SlnMesnac.Redis.csproj b/SlnMesnac.Redis/SlnMesnac.Redis.csproj new file mode 100644 index 0000000..96001b0 --- /dev/null +++ b/SlnMesnac.Redis/SlnMesnac.Redis.csproj @@ -0,0 +1,16 @@ + + + + netstandard2.1 + enable + + + + + + + + + + + diff --git a/SlnMesnac.Rfid/RfidAbsractFactory.cs b/SlnMesnac.Rfid/RfidAbsractFactory.cs index bc4e1e9..2a2c1b7 100644 --- a/SlnMesnac.Rfid/RfidAbsractFactory.cs +++ b/SlnMesnac.Rfid/RfidAbsractFactory.cs @@ -31,6 +31,9 @@ namespace SlnMesnac.Rfid /// public abstract class RfidAbsractFactory { + + public string ConfigKey { get; set; } + /// /// 建立连接 /// diff --git a/SlnMesnac.Rfid/RfidPool.cs b/SlnMesnac.Rfid/RfidPool.cs deleted file mode 100644 index b2cdabd..0000000 --- a/SlnMesnac.Rfid/RfidPool.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.Logging; -using SlnMesnac.Config; -using SlnMesnac.Rfid.Factory; - -#region << 版 本 注 释 >> -/*-------------------------------------------------------------------- -* 版权所有 (c) 2024 WenJY 保留所有权利。 -* CLR版本:4.0.30319.42000 -* 机器名称:LAPTOP-E0N2L34V -* 命名空间:SlnMesnac.Rfid -* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 -* -* 创建者:WenJY -* 电子邮箱:wenjy@mesnac.com -* 创建时间:2024-03-27 21:58:35 -* 版本:V1.0.0 -* 描述: -* -*-------------------------------------------------------------------- -* 修改人: -* 时间: -* 修改说明: -* -* 版本:V1.0.0 -*--------------------------------------------------------------------*/ -#endregion << 版 本 注 释 >> -namespace SlnMesnac.Rfid -{ - public class RfidPool - { - private readonly ILogger _logger; - private readonly RflyFactory _rflyFactory; - private readonly AppConfig _appConfig; - - private Dictionary keyValuePairs = new Dictionary(); - - public RfidPool(RflyFactory rflyFactory,ILogger logger,AppConfig appConfig) - { - _rflyFactory = rflyFactory; - _logger = logger; - _appConfig = appConfig; - } - - /// - /// 初始化 - /// - public void Init() - { - - if (_appConfig.rfidConfig != null) - { - foreach (var item in _appConfig.rfidConfig) - { - if (item.isFlage) - { - try - { - RfidAbsractFactory absractFactory = _rflyFactory; - absractFactory.Connect(item.equipIp, item.equipPort); - _logger.LogInformation($"RFID:{item.equipIp}:{item.equipPort};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); - var key = item.equipKey; - if (!keyValuePairs.ContainsKey(key)) - { - keyValuePairs.Add(key, absractFactory); - } - else - { - keyValuePairs[key] = absractFactory; - } - } - catch (Exception e) - { - _logger.LogError($"RFID设备:{item.equipKey}初始化异常:{e.Message}"); - } - } - } - } - else - { - _logger.LogInformation("PLC配置信息为空"); - } - } - - /// - /// 获取RFID设备 - /// - /// - /// - public RfidAbsractFactory GetRfidByKey(string key) - { - try - { - return keyValuePairs[key]; - } - catch (Exception e) - { - throw new ArgumentException($"根据RFID Key获取连接信息异常:{e.Message}"); ; - } - } - - /// - /// 获取所有PLC信息 - /// - /// - public Dictionary GetAll() - { - return keyValuePairs; - } - } -} \ No newline at end of file diff --git a/SlnMesnac.Rfid/RfidSetup.cs b/SlnMesnac.Rfid/RfidSetup.cs deleted file mode 100644 index 5fe4e99..0000000 --- a/SlnMesnac.Rfid/RfidSetup.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; -using SlnMesnac.Rfid.Factory; - -#region << 版 本 注 释 >> -/*-------------------------------------------------------------------- -* 版权所有 (c) 2024 WenJY 保留所有权利。 -* CLR版本:4.0.30319.42000 -* 机器名称:LAPTOP-E0N2L34V -* 命名空间:SlnMesnac.Rfid -* 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 -* -* 创建者:WenJY -* 电子邮箱:wenjy@mesnac.com -* 创建时间:2024-03-27 21:58:35 -* 版本:V1.0.0 -* 描述: -* -*-------------------------------------------------------------------- -* 修改人: -* 时间: -* 修改说明: -* -* 版本:V1.0.0 -*--------------------------------------------------------------------*/ -#endregion << 版 本 注 释 >> -namespace SlnMesnac.Rfid -{ - public static class RfidSetup - { - public static IApplicationBuilder UseRfidExtensions(this IApplicationBuilder app) - { - var pool = app.ApplicationServices.GetService(); - pool.Init(); - return app; - } - } -} \ No newline at end of file diff --git a/SlnMesnac.WPF/App.xaml.cs b/SlnMesnac.WPF/App.xaml.cs index 0c0ad04..ea819ab 100644 --- a/SlnMesnac.WPF/App.xaml.cs +++ b/SlnMesnac.WPF/App.xaml.cs @@ -7,6 +7,9 @@ using SlnMesnac.Config; using System; using System.Windows; using Autofac.Extensions.DependencyInjection; +using SlnMesnac.Plc; +using System.Collections.Generic; +using SlnMesnac.Rfid; namespace SlnMesnac.WPF { @@ -37,11 +40,12 @@ namespace SlnMesnac.WPF ServiceProvider = host.Services; + await host.StartAsync(); + var appConfig = host.Services.GetService(); var logPath = $"{appConfig.logPath}/Logs/{DateTime.UtcNow:yyyy-MM-dd}/"; Log.Information($"系统初始化完成,日志存放路径:{appConfig.logPath}"); - await host.StartAsync(); } /// diff --git a/SlnMesnac.WPF/SlnMesnac.WPF.csproj b/SlnMesnac.WPF/SlnMesnac.WPF.csproj index 731da9b..13b1f23 100644 --- a/SlnMesnac.WPF/SlnMesnac.WPF.csproj +++ b/SlnMesnac.WPF/SlnMesnac.WPF.csproj @@ -22,6 +22,7 @@ + diff --git a/SlnMesnac.WPF/Startup.cs b/SlnMesnac.WPF/Startup.cs index 047ebe8..f65ebe7 100644 --- a/SlnMesnac.WPF/Startup.cs +++ b/SlnMesnac.WPF/Startup.cs @@ -4,13 +4,14 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SlnMesnac.Config; using SlnMesnac.Repository; -using SlnMesnac.Plc; using SlnMesnac.Serilog; using System; using Autofac; using Microsoft.Extensions.Configuration; using SlnMesnac.Rfid; using SlnMesnac.Ioc; +using SlnMesnac.Plc; +using SlnMesnac.Extensions; namespace SlnMesnac.WPF { @@ -38,6 +39,12 @@ namespace SlnMesnac.WPF //注册ORM services.AddSqlSugarSetup(); + + //注册PLC工厂 + services.AddPlcFactorySetup(); + + //注册RFID工厂 + services.AddRfidFactorySetup(); } /// @@ -64,12 +71,6 @@ namespace SlnMesnac.WPF //启用Serilog中间件 app.UseSerilogExtensions(); - //初始化PLC中间件 - app.UsePlcExtensions(); - - //初始化RFID中间件 - app.UseRfidExtensions(); - app.UseRouting(); app.UseAuthorization(); diff --git a/SlnMesnac.WPF/appsettings.json b/SlnMesnac.WPF/appsettings.json index f9fd88f..9346894 100644 --- a/SlnMesnac.WPF/appsettings.json +++ b/SlnMesnac.WPF/appsettings.json @@ -25,35 +25,36 @@ { "configId": 1, "plcType": "MelsecBinaryPlc", - "plcIp": "127.0.0.1", + "plcIp": "127.0.0.1", "plcPort": 6000, "plcKey": "mcs", - "isFlage": false + "isFlage": true }, { "configId": 2, "plcType": "MelsecBinaryPlc", "plcIp": "127.0.0.1", - "plcPort": 6000, + "plcPort": 6001, "plcKey": "cwss", - "isFlage": false + "isFlage": true } ], "RfidConfig": [ { "configId": 1, "equipIp": "127.0.0.1", - "equipPort": 6000, + "equipPort": 6003, "equipKey": "test1", - "isFlage": false + "isFlage": true }, { "configId": 2, "equipIp": "127.0.0.1", - "equipPort": 6009, + "equipPort": 6004, "equipKey": "test2", - "isFlage": false + "isFlage": true } - ] + ], + "redisConfig": "175.27.215.92:6379,password=redis@2023" } } diff --git a/SlnMesnac.sln b/SlnMesnac.sln index e80dbbe..b713cfb 100644 --- a/SlnMesnac.sln +++ b/SlnMesnac.sln @@ -31,7 +31,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Rfid", "SlnMesnac EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Ioc", "SlnMesnac.Ioc\SlnMesnac.Ioc.csproj", "{30A3F86B-774E-4153-9A00-FD3173C710EB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SlnMesnac.Generate", "SlnMesnac.Generate\SlnMesnac.Generate.csproj", "{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Generate", "SlnMesnac.Generate\SlnMesnac.Generate.csproj", "{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SlnMesnac.Extensions", "SlnMesnac.Extensions\SlnMesnac.Extensions.csproj", "{6D929802-24AA-42A7-92C5-303C3D59A990}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SlnMesnac.Redis", "SlnMesnac.Redis\SlnMesnac.Redis.csproj", "{0E041719-E755-43CD-8A0E-DF62E0B2E463}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -99,6 +103,14 @@ Global {00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Release|Any CPU.Build.0 = Release|Any CPU + {6D929802-24AA-42A7-92C5-303C3D59A990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D929802-24AA-42A7-92C5-303C3D59A990}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D929802-24AA-42A7-92C5-303C3D59A990}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D929802-24AA-42A7-92C5-303C3D59A990}.Release|Any CPU.Build.0 = Release|Any CPU + {0E041719-E755-43CD-8A0E-DF62E0B2E463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E041719-E755-43CD-8A0E-DF62E0B2E463}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E041719-E755-43CD-8A0E-DF62E0B2E463}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E041719-E755-43CD-8A0E-DF62E0B2E463}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SlnMesnac/SlnMesnac.csproj b/SlnMesnac/SlnMesnac.csproj index f623be7..191e4dc 100644 --- a/SlnMesnac/SlnMesnac.csproj +++ b/SlnMesnac/SlnMesnac.csproj @@ -13,6 +13,7 @@ + diff --git a/SlnMesnac/Startup.cs b/SlnMesnac/Startup.cs index 971cb8d..14525f4 100644 --- a/SlnMesnac/Startup.cs +++ b/SlnMesnac/Startup.cs @@ -1,10 +1,8 @@ using Microsoft.OpenApi.Models; -using SlnMesnac.Common; using SlnMesnac.Config; -using SlnMesnac.Plc; using SlnMesnac.Quartz; -using SlnMesnac.Repository; using SlnMesnac.Serilog; +using SlnMesnac.Extensions; using System.Runtime.Serialization; namespace SlnMesnac