From 4a07ba4c8705c6abcede1f125dee396b8a353e89 Mon Sep 17 00:00:00 2001 From: wenjy Date: Thu, 25 Jan 2024 22:54:58 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E5=8F=82=E6=95=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=80=81Sql=E3=80=81Plc=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Config/AppConfig.cs | 25 +++++++---- SlnMesnac.Config/PlcConfig.cs | 33 +++++++++++++++ SlnMesnac.Config/SqlConfig.cs | 23 +++++++++++ SlnMesnac.Plc/Impl/InovancePlc.cs | 11 ++++- SlnMesnac.Plc/Impl/MelsecBinaryPlc.cs | 11 ++++- SlnMesnac.Plc/Impl/OmronNJPlc.cs | 11 ++++- SlnMesnac.Plc/Impl/SiemensPlc.cs | 11 ++++- SlnMesnac.Plc/PlcPool.cs | 46 +++++++++++++++++++-- SlnMesnac.Plc/PlcSetup.cs | 10 ++++- SlnMesnac.Plc/SlnMesnac.Plc.csproj | 2 + SlnMesnac.Repository/SqlsugarSetup.cs | 32 +++++++------- SlnMesnac.WPF/Startup.cs | 5 ++- SlnMesnac.WPF/appsettings.json | 32 ++++++++++++-- SlnMesnac/Controllers/BaseUserController.cs | 6 +-- 14 files changed, 212 insertions(+), 46 deletions(-) create mode 100644 SlnMesnac.Config/PlcConfig.cs create mode 100644 SlnMesnac.Config/SqlConfig.cs diff --git a/SlnMesnac.Config/AppConfig.cs b/SlnMesnac.Config/AppConfig.cs index 19030b3..47e949a 100644 --- a/SlnMesnac.Config/AppConfig.cs +++ b/SlnMesnac.Config/AppConfig.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using System; +using System.Collections.Generic; namespace SlnMesnac.Config { @@ -12,17 +13,27 @@ namespace SlnMesnac.Config /// 日志文件路径 /// public string logPath { get; set; } - + /// - /// MES 数据库连接字符串 + /// MCS 开仓地址 /// - public string mesConnStr { get; set; } - + public string mcsOpenAddr { get; set; } + /// - /// MCS 数据库连接字符串 + /// CWSS 开仓地址 /// - public string mcsConnStr { get; set; } - + public string cwssOpenAddr { get; set; } + + /// + /// Sql连接配置 + /// + public List sqlConfig { get; set; } + + /// + /// PLC连接配置 + /// + public List plcConfig { get; set; } + public AppConfig Value => this; } } diff --git a/SlnMesnac.Config/PlcConfig.cs b/SlnMesnac.Config/PlcConfig.cs new file mode 100644 index 0000000..9bb8d31 --- /dev/null +++ b/SlnMesnac.Config/PlcConfig.cs @@ -0,0 +1,33 @@ +namespace SlnMesnac.Config +{ + /// + /// PLC配置,通过AppConfig进行获取 + /// + public class PlcConfig + { + /// + /// PLC配置ID + /// + public int configId { get; set; } + + /// + /// PIC类型 + /// + public string plcType { get; set; } + + /// + /// PLC IP + /// + public string plcIp { get; set; } + + /// + /// PLC Port + /// + public int plcPort { get; set; } + + /// + /// PLC Key + /// + public string plcKey { get; set; } + } +} \ No newline at end of file diff --git a/SlnMesnac.Config/SqlConfig.cs b/SlnMesnac.Config/SqlConfig.cs new file mode 100644 index 0000000..7adeab7 --- /dev/null +++ b/SlnMesnac.Config/SqlConfig.cs @@ -0,0 +1,23 @@ +namespace SlnMesnac.Config +{ + /// + /// Sql连接配置 + /// + public class SqlConfig + { + /// + /// Sql 配置ID,实体通过该ID关联数据源 + /// + public string configId { get; set; } + + /// + /// 数据库类型,MySql-0;SqlServer-1;Sqlite-2;Oracle-3 + /// + public int dbType { get; set; } + + /// + /// 连接字符串 + /// + public string connStr { get; set; } + } +} \ No newline at end of file diff --git a/SlnMesnac.Plc/Impl/InovancePlc.cs b/SlnMesnac.Plc/Impl/InovancePlc.cs index 9510fbf..dcd5c69 100644 --- a/SlnMesnac.Plc/Impl/InovancePlc.cs +++ b/SlnMesnac.Plc/Impl/InovancePlc.cs @@ -56,7 +56,7 @@ namespace SlnMesnac.Plc.Impl else { this.IsConnected = false; - PrintLogInfo("汇川PLC建立连接失败!!!"); + PrintLogInfo($"汇川PLC建立连接失败:{connect.Message}"); return false; } } @@ -485,7 +485,14 @@ namespace SlnMesnac.Plc.Impl private void PrintLogInfo(string message, Exception ex = null) { - + if (ex != null) + { + _logger.LogError($"{message}:{ex.Message}"); + } + else + { + _logger.LogInformation(message); + } } } diff --git a/SlnMesnac.Plc/Impl/MelsecBinaryPlc.cs b/SlnMesnac.Plc/Impl/MelsecBinaryPlc.cs index 5533efa..ef427c2 100644 --- a/SlnMesnac.Plc/Impl/MelsecBinaryPlc.cs +++ b/SlnMesnac.Plc/Impl/MelsecBinaryPlc.cs @@ -47,7 +47,7 @@ namespace SlnMesnac.Plc.Impl if (connect.IsSuccess) { this.IsConnected = true; - PrintLogInfo("三菱Q系列PLC建立连接成功!!!"); + PrintLogInfo($"三菱Q系列PLC建立连接失败:{connect.Message}"); return true; } else @@ -437,7 +437,14 @@ namespace SlnMesnac.Plc.Impl private void PrintLogInfo(string message, Exception ex = null) { - + if (ex != null) + { + _logger.LogError($"{message}:{ex.Message}"); + } + else + { + _logger.LogInformation(message); + } } } } diff --git a/SlnMesnac.Plc/Impl/OmronNJPlc.cs b/SlnMesnac.Plc/Impl/OmronNJPlc.cs index ee47ece..be21228 100644 --- a/SlnMesnac.Plc/Impl/OmronNJPlc.cs +++ b/SlnMesnac.Plc/Impl/OmronNJPlc.cs @@ -58,7 +58,7 @@ namespace SlnMesnac.Plc.Impl else { this.IsConnected = false; - PrintLogInfo("欧姆龙NJ系列PLC建立连接失败!!!"); + PrintLogInfo($"欧姆龙NJ系列PLC建立连接失败:{connect.Message}"); return false; } } @@ -442,7 +442,14 @@ namespace SlnMesnac.Plc.Impl private void PrintLogInfo(string message, Exception ex = null) { - + if (ex != null) + { + _logger.LogError($"{message}:{ex.Message}"); + } + else + { + _logger.LogInformation(message); + } } } } diff --git a/SlnMesnac.Plc/Impl/SiemensPlc.cs b/SlnMesnac.Plc/Impl/SiemensPlc.cs index 13c9b41..b7e0423 100644 --- a/SlnMesnac.Plc/Impl/SiemensPlc.cs +++ b/SlnMesnac.Plc/Impl/SiemensPlc.cs @@ -51,7 +51,7 @@ namespace SlnMesnac.Plc.Impl else { this.IsConnected = false; - PrintLogInfo("西门子S7系列PLC建立连接失败!!!"); + PrintLogInfo($"西门子S7系列PLC建立连接失败:{connect.Message}"); return false; } } @@ -409,7 +409,14 @@ namespace SlnMesnac.Plc.Impl private void PrintLogInfo(string message, Exception ex = null) { - + if (ex != null) + { + _logger.LogError($"{message}:{ex.Message}"); + } + else + { + _logger.LogInformation(message); + } } } } \ No newline at end of file diff --git a/SlnMesnac.Plc/PlcPool.cs b/SlnMesnac.Plc/PlcPool.cs index 66446e6..2e7d517 100644 --- a/SlnMesnac.Plc/PlcPool.cs +++ b/SlnMesnac.Plc/PlcPool.cs @@ -1,9 +1,11 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; +using SlnMesnac.Config; using SlnMesnac.Plc.Impl; using System; using System.Collections; using System.Collections.Generic; +using System.Threading.Tasks; namespace SlnMesnac.Plc { @@ -21,30 +23,59 @@ namespace SlnMesnac.Plc private readonly MelsecBinaryPlc _melsecBinaryPlc; private readonly OmronNJPlc _omronNJPlc; private readonly SiemensPlc _siemensPlc; + private readonly AppConfig _appConfig; - public PlcPool(ILogger logger, InovancePlc inovancePlc,MelsecBinaryPlc melsecBinaryPlc,OmronNJPlc omronNJPlc,SiemensPlc siemensPlc) + public PlcPool(ILogger logger, InovancePlc inovancePlc, MelsecBinaryPlc melsecBinaryPlc, OmronNJPlc omronNJPlc, SiemensPlc siemensPlc, AppConfig appConfig) { _logger = logger; _inovancePlc = inovancePlc; _melsecBinaryPlc = melsecBinaryPlc; _omronNJPlc = omronNJPlc; _siemensPlc = siemensPlc; + _appConfig = appConfig; + //this.Init(); + } + + public void Init() + { if (!HslCommunication.Authorization.SetAuthorizationCode("ed1415f8-e06a-43ad-95f7-c04f7ae93b41")) { _logger.LogInformation("HslCommunication激活失败,可用时长24小时"); } _logger.LogInformation("HslCommunication 11.0.6.0激活成功"); + + try + { + if (_appConfig.plcConfig != null) + { + Task.Run(() => + { + foreach (var item in _appConfig.plcConfig) + { + AddPlc(item.plcType, item.plcIp, item.plcPort, item.plcKey); + } + }); + } + else + { + _logger.LogInformation("PLC配置信息为空"); + } + } + catch (Exception e) + { + _logger.LogError($"PLC初始化连接异常:{e.Message}"); + } } /// - /// 初始化Plc + /// 添加PLC连接 /// /// /// /// /// - public void InitPlc(string plcType, string ip, int port, string key) + public void AddPlc(string plcType, string ip, int port, string key) { IPlc _plc = null; switch (plcType) @@ -86,7 +117,14 @@ namespace SlnMesnac.Plc /// public IPlc GetPlcByKey(string key) { - return keyValuePairs[key]; + try + { + return keyValuePairs[key]; + } + catch (Exception e) + { + throw new ArgumentException($"根据PLC Key获取连接信息异常:{e.Message}"); ; + } } /// diff --git a/SlnMesnac.Plc/PlcSetup.cs b/SlnMesnac.Plc/PlcSetup.cs index 53afcc5..9fc9439 100644 --- a/SlnMesnac.Plc/PlcSetup.cs +++ b/SlnMesnac.Plc/PlcSetup.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; using SlnMesnac.Common; using SlnMesnac.Plc.Impl; using System; @@ -17,5 +18,12 @@ namespace SlnMesnac.Plc services.AddSingleton(); services.AddSingleton(); } + + public static IApplicationBuilder UsePlcExtensions(this IApplicationBuilder app) + { + var plcPool = app.ApplicationServices.GetService(); + plcPool.Init(); + return app; + } } } diff --git a/SlnMesnac.Plc/SlnMesnac.Plc.csproj b/SlnMesnac.Plc/SlnMesnac.Plc.csproj index d2d19be..9f89a4f 100644 --- a/SlnMesnac.Plc/SlnMesnac.Plc.csproj +++ b/SlnMesnac.Plc/SlnMesnac.Plc.csproj @@ -7,11 +7,13 @@ + + diff --git a/SlnMesnac.Repository/SqlsugarSetup.cs b/SlnMesnac.Repository/SqlsugarSetup.cs index 3b2addb..90a808e 100644 --- a/SlnMesnac.Repository/SqlsugarSetup.cs +++ b/SlnMesnac.Repository/SqlsugarSetup.cs @@ -20,26 +20,24 @@ namespace SlnMesnac.Repository services.AddSingleton(x => { var appConfig = x.GetService(); - SqlSugarScope Db = new SqlSugarScope(new List() + + var connectConfigList = new List(); + if (appConfig.sqlConfig != null) { - new ConnectionConfig() - { - ConfigId = "mes", - DbType = DbType.SqlServer, - ConnectionString = appConfig.mesConnStr, - InitKeyType = InitKeyType.Attribute, - IsAutoCloseConnection = true, - }, - new ConnectionConfig() + foreach (var item in appConfig.sqlConfig) { - ConfigId = "mcs", - DbType = DbType.Oracle, - ConnectionString = appConfig.mcsConnStr, - InitKeyType = InitKeyType.Attribute, - IsAutoCloseConnection = true, + var config = new ConnectionConfig() + { + ConfigId = item.configId, + DbType = (DbType)item.dbType, + ConnectionString = item.connStr, + InitKeyType = InitKeyType.Attribute, + IsAutoCloseConnection = true, + }; + connectConfigList.Add(config); } - }, - db => + } + SqlSugarScope Db = new SqlSugarScope(connectConfigList, db => { db.Aop.OnLogExecuting = (sql, pars) => { }; }); diff --git a/SlnMesnac.WPF/Startup.cs b/SlnMesnac.WPF/Startup.cs index 82f4adc..bbbf884 100644 --- a/SlnMesnac.WPF/Startup.cs +++ b/SlnMesnac.WPF/Startup.cs @@ -51,7 +51,7 @@ namespace SlnMesnac.WPF services.AddServices(); //注册Quartz - services.AddQuartzSetUp(); + //services.AddQuartzSetUp(); //注册PLC services.AddPlcSetup(); @@ -78,6 +78,9 @@ namespace SlnMesnac.WPF //启用Serilog中间件 app.UseSerilogExtensions(); + //初始化PLC中间件 + app.UsePlcExtensions(); + app.UseRouting(); app.UseAuthorization(); diff --git a/SlnMesnac.WPF/appsettings.json b/SlnMesnac.WPF/appsettings.json index d05c71e..4235900 100644 --- a/SlnMesnac.WPF/appsettings.json +++ b/SlnMesnac.WPF/appsettings.json @@ -8,8 +8,34 @@ }, "AllowedHosts": "*", "AppConfig": { - "logPath": "E:\\桌面\\日常代码\\SlnMesnac\\SlnMesnac\\bin\\Debug\\net6.0", - "mesConnStr": "server=.;uid=sa;pwd=123456;database=JiangYinMENS", - "mcsConnStr": "Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma" + "logPath": "E:\\桌面\\SlnMesnac\\SlnMesnac.WPF\\bin\\Debug\\net6.0-windows", + "SqlConfig": [ + { + "configId": "mes", + "dbType": 1, + "connStr": "server=.;uid=sa;pwd=123456;database=JiangYinMENS" + }, + { + "configId": "mcs", + "dbType": 3, + "connStr": "Data Source=175.27.215.92/helowin;User ID=aucma_scada;Password=aucma" + } + ], + "PlcConfig": [ + { + "configId": 1, + "plcType": "MelsecBinaryPlc", + "plcIp": "127.0.0.1", //192.168.1.71 + "plcPort": 6000, + "plcKey": "mcs" + }, + { + "configId": 2, + "plcType": "MelsecBinaryPlc", + "plcIp": "127.0.0.1", + "plcPort": 6000, + "plcKey": "cwss" + } + ] } } diff --git a/SlnMesnac/Controllers/BaseUserController.cs b/SlnMesnac/Controllers/BaseUserController.cs index 3cd1395..3cdd7e0 100644 --- a/SlnMesnac/Controllers/BaseUserController.cs +++ b/SlnMesnac/Controllers/BaseUserController.cs @@ -17,18 +17,15 @@ namespace SlnMesnac.Controllers private readonly IBaseUserService _service; - private readonly PlcPool _plcPool; - /// /// /// /// /// - public BaseUserController(ILogger logger, IBaseUserService service, PlcPool plcPool) + public BaseUserController(ILogger logger, IBaseUserService service) { _logger = logger; _service = service; - _plcPool = plcPool; } /// @@ -38,7 +35,6 @@ namespace SlnMesnac.Controllers [HttpGet] public IEnumerable Get() { - _plcPool.InitPlc("SiemensPlc", "127.0.0.1", 102, "SiemensPlc"); IEnumerable users = null; try {