Explorar el Código

1. 修改 OPCUA 订阅流程逻辑,解决超时问题
2. 修改 OPCUA 工具显示问题
3. OPCUA 工具新增 导出 Core 地址对象
4. 版本更新
5. 细节更新
6. 结果类型新增
7. 单例模式下新增实例数量限制

Shun hace 2 años
padre
commit
56fad769ed
Se han modificado 43 ficheros con 685 adiciones y 318 borrados
  1. 3 0
      README.md
  2. 29 12
      src/YSAI.DAQ/YSAI.Can/CanOperator.cs
  3. 1 1
      src/YSAI.DAQ/YSAI.Can/YSAI.Can.csproj
  4. 1 1
      src/YSAI.DAQ/YSAI.Core/YSAI.Core.csproj
  5. 21 4
      src/YSAI.DAQ/YSAI.Core/communication/net/http/HttpOperate.cs
  6. 29 12
      src/YSAI.DAQ/YSAI.Core/communication/net/tcp/client/TcpClientOperate.cs
  7. 22 5
      src/YSAI.DAQ/YSAI.Core/communication/net/tcp/service/TcpServiceOperate.cs
  8. 27 10
      src/YSAI.DAQ/YSAI.Core/communication/net/udp/UdpOperate.cs
  9. 27 10
      src/YSAI.DAQ/YSAI.Core/communication/net/ws/client/WsClientOperate.cs
  10. 22 5
      src/YSAI.DAQ/YSAI.Core/communication/net/ws/service/WsServiceOperate.cs
  11. 24 7
      src/YSAI.DAQ/YSAI.Core/communication/serial/SerialOperate.cs
  12. 12 8
      src/YSAI.DAQ/YSAI.Core/enum/Enums.cs
  13. 6 13
      src/YSAI.DAQ/YSAI.Core/interface/IOrAbstract.cs
  14. 4 5
      src/YSAI.DAQ/YSAI.Core/reflection/RIOperate.cs
  15. 20 3
      src/YSAI.DAQ/YSAI.Core/reflection/ReflectionOperate.cs
  16. 20 4
      src/YSAI.DAQ/YSAI.Core/script/ScriptOperate.cs
  17. 21 3
      src/YSAI.DAQ/YSAI.Core/subscribe/SubscribeOperate.cs
  18. 31 13
      src/YSAI.DAQ/YSAI.DB/DBOperate.cs
  19. 1 1
      src/YSAI.DAQ/YSAI.DB/YSAI.DB.csproj
  20. 17 18
      src/YSAI.DAQ/YSAI.DaqManage/DaqManageOperate.cs
  21. 1 1
      src/YSAI.DAQ/YSAI.DaqManage/YSAI.DaqManage.csproj
  22. 26 9
      src/YSAI.DAQ/YSAI.Kafka/KafkaOperate.cs
  23. 1 1
      src/YSAI.DAQ/YSAI.Kafka/YSAI.Kafka.csproj
  24. 1 1
      src/YSAI.DAQ/YSAI.Modbus/YSAI.Modbus.csproj
  25. 45 29
      src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientOperate.cs
  26. 1 1
      src/YSAI.DAQ/YSAI.Mqtt/YSAI.Mqtt.csproj
  27. 27 10
      src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientOperate.cs
  28. 23 8
      src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceOperate.cs
  29. 27 7
      src/YSAI.DAQ/YSAI.Mqtt/service/websocket/MqttWebSocketServiceOperate.cs
  30. 1 1
      src/YSAI.DAQ/YSAI.Opc/YSAI.Opc.csproj
  31. 33 15
      src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientOperate.cs
  32. 33 15
      src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpOperate.cs
  33. 32 14
      src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientOperate.cs
  34. 24 6
      src/YSAI.DAQ/YSAI.Opc/ua/service/OpcUaServiceOperate.cs
  35. 27 10
      src/YSAI.DAQ/YSAI.RabbitMQ/RabbitMQOperate.cs
  36. 1 1
      src/YSAI.DAQ/YSAI.RabbitMQ/YSAI.RabbitMQ.csproj
  37. 13 14
      src/YSAI.DAQ/YSAI.RelayManage/RelayManageOperate.cs
  38. 1 1
      src/YSAI.DAQ/YSAI.RelayManage/YSAI.RelayManage.csproj
  39. 1 1
      src/YSAI.DAQ/YSAI.S7/YSAI.S7.csproj
  40. 26 9
      src/YSAI.DAQ/YSAI.S7/client/S7ClientOperate.cs
  41. 2 12
      src/YSAI.DAQ/YSAI.Test.All/Program.cs
  42. 0 16
      src/YSAI.DAQ/YSAI.Test/UnitTest1.cs
  43. 1 1
      src/YSAI.DAQ/YSAI.Test/YSAI.Test.csproj

+ 3 - 0
README.md

@@ -291,5 +291,8 @@ while(true)
 2. 修改 OPCUA 工具显示问题
 3. OPCUA 工具新增 导出 Core 地址对象
 4. 版本更新
+5. 细节更新
+6. 结果类型新增
+7. 单例模式下新增实例数量限制
 
 

+ 29 - 12
src/YSAI.DAQ/YSAI.Can/CanOperator.cs

@@ -4,6 +4,7 @@ using YSAI.Core.data;
 using YSAI.Core.@interface;
 using YSAI.Core.subscription;
 using YSAI.Core.virtualAddress;
+using YSAI.Log;
 using YSAI.Unility;
 
 namespace YSAI.Can
@@ -13,19 +14,35 @@ namespace YSAI.Can
     /// </summary>
     public class CanOperator : IBaseAbstract, IDaq
     {
-        protected override string LogHead => "[ CanOperator 操作 ]";
-        protected override string ClassName => "CanOperator";
-
-
-        private static readonly object Lock = new object();  //锁
-        private static List<CanOperator> ThisObjList = new List<CanOperator>(); //自身对象集合
+        protected override string TAG => "CanOperator";
 
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<CanOperator> ThisObjList = new List<CanOperator>(); 
+       
         /// <summary>
         /// 单例模式
         /// </summary>
         /// <returns></returns>
         public static CanOperator Instance(CanData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             CanOperator? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -119,7 +136,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("Write", false, ex.Message, Exc: ex);
+                return Break("Write", false, ex.Message, Exception: ex);
             }
         }
 
@@ -178,7 +195,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> OffAsync()
@@ -237,7 +254,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> OnAsync()
@@ -323,7 +340,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> ReadAsync(Address address)
@@ -386,7 +403,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> SubscribeAsync(Address address)
@@ -410,7 +427,7 @@ namespace YSAI.Can
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> UnSubscribeAsync(Address address)

+ 1 - 1
src/YSAI.DAQ/YSAI.Can/YSAI.Can.csproj

@@ -17,7 +17,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
src/YSAI.DAQ/YSAI.Core/YSAI.Core.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.0.41</Version>
+    <Version>1.0.0.45</Version>
     <Authors>Shun</Authors>
     <Company>YSAI</Company>
     <Product>SCADA</Product>

+ 21 - 4
src/YSAI.DAQ/YSAI.Core/communication/net/http/HttpOperate.cs

@@ -10,10 +10,23 @@ namespace YSAI.Core.communication.net.http
     /// </summary>
     public class HttpOperate : IBaseAbstract, IDisposable
     {
-        protected override string LogHead => "[ HttpOperate 操作 ]";
-        protected override string ClassName => "HttpOperate";
-        private static readonly object Lock = new object();  //锁
-        private static List<HttpOperate> ThisObjList = new List<HttpOperate>(); //自身对象集合
+        protected override string TAG => "HttpOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<HttpOperate> ThisObjList = new List<HttpOperate>();
 
         /// <summary>
         /// 单例模式
@@ -21,6 +34,10 @@ namespace YSAI.Core.communication.net.http
         /// <returns></returns>
         public static HttpOperate Instance(Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             HttpOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {

+ 29 - 12
src/YSAI.DAQ/YSAI.Core/communication/net/tcp/client/TcpClientOperate.cs

@@ -11,12 +11,25 @@ namespace YSAI.Core.communication.net.tcp.client
     /// </summary>
     public class TcpClientOperate : IBaseAbstract, ICommunication
     {
-        protected override string LogHead => "[ TcpClientOperate 操作 ]";
-        protected override string ClassName => "TcpClientOperate";
+        protected override string TAG => "TcpClientOperate";
 
 
-        private static readonly object Lock = new object();  //锁
-        private static List<TcpClientOperate> ThisObjList = new List<TcpClientOperate>(); //自身对象集合
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<TcpClientOperate> ThisObjList = new List<TcpClientOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
@@ -24,6 +37,10 @@ namespace YSAI.Core.communication.net.tcp.client
         /// <returns></returns>
         public static TcpClientOperate Instance(TcpClientData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             TcpClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -103,11 +120,11 @@ namespace YSAI.Core.communication.net.tcp.client
                                 int bytes = Communication.GetStream().ReadAsync(CacheBuffer, 0, alen).WaitAsync(token.Token).Result;  //读取数据
                                 if (bytes > 0)
                                 {
-                                    OnEventHandler(this, new EventResult(true, $"接收到[{ClassName}]监控数据", ByteTool.ByteTrimEnd(CacheBuffer), @enum.ResultType.Bytes));  //数据传递出去
+                                    OnEventHandler(this, new EventResult(true, $"接收到[{TAG}]监控数据", ByteTool.ByteTrimEnd(CacheBuffer), @enum.ResultType.Byte));  //数据传递出去
                                 }
                                 else
                                 {
-                                    OnEventHandler(this, new EventResult(false, $"接收到[{ClassName}]监控数据长度错误(小于等于零)"));  //数据传递出去
+                                    OnEventHandler(this, new EventResult(false, $"接收到[{TAG}]监控数据长度错误(小于等于零)"));  //数据传递出去
                                     OffAsync();
                                     return;
                                 }
@@ -115,7 +132,7 @@ namespace YSAI.Core.communication.net.tcp.client
                         }
                         else
                         {
-                            OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控异常,与服务端断开连接"));
+                            OnEventHandler(this, new EventResult(false, $"[{TAG}]监控异常,与服务端断开连接"));
                             OffAsync();
                             return;
                         }
@@ -123,7 +140,7 @@ namespace YSAI.Core.communication.net.tcp.client
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控异常,关闭对象:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控异常,关闭对象:{ex.Message}"));
                         OffAsync();
                         return;
                     }
@@ -153,19 +170,19 @@ namespace YSAI.Core.communication.net.tcp.client
                             Communication.SendTimeout = basics.Timeout;
                             if (!Communication.ConnectAsync(IpPort).WaitAsync(new TimeSpan(0, 0, 0, 0, basics.Timeout), token.Token).IsCanceled)
                             {
-                                OnEventHandler(this, new EventResult(false, $"[{ClassName}]断线重连失败,连接超时,重连{ReconnectionCount}次"));  //数据传递出去
+                                OnEventHandler(this, new EventResult(false, $"[{TAG}]断线重连失败,连接超时,重连{ReconnectionCount}次"));  //数据传递出去
                                 ReconnectionCount++;
                             }
                         }
                         else if (ReconnectionCount > 1)
                         {
-                            OnEventHandler(this, new EventResult(true, $"[{ClassName}]断线重连成功"));  //数据传递出去
+                            OnEventHandler(this, new EventResult(true, $"[{TAG}]断线重连成功"));  //数据传递出去
                             ReconnectionCount = 1;
                         }
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]断线重连异常:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]断线重连异常:{ex.Message}"));
                     }
 
                     Thread.Sleep(basics.ReconnectionInterval);
@@ -344,7 +361,7 @@ namespace YSAI.Core.communication.net.tcp.client
                         {
                             if (Byte.Length > 0)
                             {
-                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Bytes);
+                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Byte);
                             }
                             else
                             {

+ 22 - 5
src/YSAI.DAQ/YSAI.Core/communication/net/tcp/service/TcpServiceOperate.cs

@@ -9,11 +9,24 @@ namespace YSAI.Core.communication.net.tcp.service
 {
     public class TcpServiceOperate : IBaseAbstract, IOn, IOff, IDisposable
     {
-        protected override string LogHead => "[ TcpServiceOperate 操作 ]";
-        protected override string ClassName => "TcpServiceOperate";
+        protected override string TAG => "TcpServiceOperate";
 
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<TcpServiceOperate> ThisObjList = new List<TcpServiceOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -22,6 +35,10 @@ namespace YSAI.Core.communication.net.tcp.service
         /// <returns></returns>
         public static TcpServiceOperate Instance(TcpServiceData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             TcpServiceOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -126,7 +143,7 @@ namespace YSAI.Core.communication.net.tcp.service
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控客户端连接异常:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控客户端连接异常:{ex.Message}"));
                     }
 
                 }
@@ -153,7 +170,7 @@ namespace YSAI.Core.communication.net.tcp.service
                         int length = ClientCon.ReceiveAsync(DataByte, SocketFlags.Partial).WaitAsync(token.Token).Result; // 接收数据,并返回数据的长度;
                         if (length > 0)
                         {
-                            OnEventHandler(this, new EventResult(true, $"[{IpPort}]数据接收成功", new TcpServiceData.ClientMessage { Step = TcpServiceData.Steps.消息接收, IpPort = IpPort, Data = ByteTool.ByteTrimEnd(DataByte.Array) }, @enum.ResultType.Bytes));
+                            OnEventHandler(this, new EventResult(true, $"[{IpPort}]数据接收成功", new TcpServiceData.ClientMessage { Step = TcpServiceData.Steps.消息接收, IpPort = IpPort, Data = ByteTool.ByteTrimEnd(DataByte.Array) }, @enum.ResultType.Byte));
                         }
                         else
                         {

+ 27 - 10
src/YSAI.DAQ/YSAI.Core/communication/net/udp/UdpOperate.cs

@@ -8,11 +8,24 @@ namespace YSAI.Core.communication.net.udp
 {
     public class UdpOperate : IBaseAbstract, ICommunication, IUdpSend
     {
-        protected override string LogHead => "[ UdpOperate 操作 ]";
-        protected override string ClassName => "UdpOperate";
+        protected override string TAG => "UdpOperate";
 
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<UdpOperate> ThisObjList = new List<UdpOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -21,6 +34,10 @@ namespace YSAI.Core.communication.net.udp
         /// <returns></returns>
         public static UdpOperate Instance(UdpData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             UdpOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -90,11 +107,11 @@ namespace YSAI.Core.communication.net.udp
                             UdpReceiveResult urr = Communication.ReceiveAsync(token.Token).Result;  //读取数据
                             if (urr.Buffer.Length > 0)
                             {
-                                OnEventHandler(this, new EventResult(true, $"接收到[{ClassName}]监控数据,来自[{urr.RemoteEndPoint}]", new UdpData.TerminalMessage { IpPort = urr.RemoteEndPoint.ToString(), Data = ByteTool.ByteTrimEnd(urr.Buffer) }, @enum.ResultType.Bytes));  //数据传递出去
+                                OnEventHandler(this, new EventResult(true, $"接收到[{TAG}]监控数据,来自[{urr.RemoteEndPoint}]", new UdpData.TerminalMessage { IpPort = urr.RemoteEndPoint.ToString(), Data = ByteTool.ByteTrimEnd(urr.Buffer) }, @enum.ResultType.Byte));  //数据传递出去
                             }
                             else
                             {
-                                OnEventHandler(this, new EventResult(false, $"接收到[{ClassName}]监控数据长度错误(小于等于零)"));  //数据传递出去
+                                OnEventHandler(this, new EventResult(false, $"接收到[{TAG}]监控数据长度错误(小于等于零)"));  //数据传递出去
                                 OffAsync();
                                 return;
                             }
@@ -106,7 +123,7 @@ namespace YSAI.Core.communication.net.udp
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控异常,关闭对象:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控异常,关闭对象:{ex.Message}"));
                         OffAsync();
                         return;
                     }
@@ -320,7 +337,7 @@ namespace YSAI.Core.communication.net.udp
                         {
                             if (Byte.Length > 0)
                             {
-                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Bytes);
+                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Byte);
                             }
                             else
                             {
@@ -369,11 +386,11 @@ namespace YSAI.Core.communication.net.udp
                                     UdpReceiveResult urr = Communication.ReceiveAsync().Result;  //读取数据
                                     if (urr.Buffer.Length > 0)
                                     {
-                                        OnEventHandler(this, new EventResult(true, $"接收到[{ClassName}]监控数据,来自[{urr.RemoteEndPoint}]", new UdpData.TerminalMessage { IpPort = urr.RemoteEndPoint.ToString(), Data = ByteTool.ByteTrimEnd(urr.Buffer) }, @enum.ResultType.Bytes));  //数据传递出去
+                                        OnEventHandler(this, new EventResult(true, $"接收到[{TAG}]监控数据,来自[{urr.RemoteEndPoint}]", new UdpData.TerminalMessage { IpPort = urr.RemoteEndPoint.ToString(), Data = ByteTool.ByteTrimEnd(urr.Buffer) }, @enum.ResultType.Byte));  //数据传递出去
                                     }
                                     else
                                     {
-                                        OnEventHandler(this, new EventResult(false, $"接收到[{ClassName}]监控数据长度错误(小于等于零)"));  //数据传递出去
+                                        OnEventHandler(this, new EventResult(false, $"接收到[{TAG}]监控数据长度错误(小于等于零)"));  //数据传递出去
                                         OffAsync();
                                     }
                                 }
@@ -387,7 +404,7 @@ namespace YSAI.Core.communication.net.udp
                         {
                             if (Byte.Length > 0)
                             {
-                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Bytes);
+                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Byte);
                             }
                             else
                             {

+ 27 - 10
src/YSAI.DAQ/YSAI.Core/communication/net/ws/client/WsClientOperate.cs

@@ -7,11 +7,24 @@ namespace YSAI.Core.communication.net.ws.client
 {
     public class WsClientOperate : IBaseAbstract, ICommunication
     {
-        protected override string LogHead => "[ WsClientOperate 操作 ]";
-        protected override string ClassName => "WsClientOperate";
+        protected override string TAG => "WsClientOperate";
 
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<WsClientOperate> ThisObjList = new List<WsClientOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -20,6 +33,10 @@ namespace YSAI.Core.communication.net.ws.client
         /// <returns></returns>
         public static WsClientOperate Instance(WsClientData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             WsClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -96,11 +113,11 @@ namespace YSAI.Core.communication.net.ws.client
                             WebSocketReceiveResult result = Communication.ReceiveAsync(CacheBuffer, token.Token).WaitAsync(token.Token).Result;   //读取数据
                             if (result.Count > 0)
                             {
-                                OnEventHandler(this, new EventResult(true, $"接收到[{ClassName}]监控数据", ByteTool.ByteTrimEnd(CacheBuffer.Array), @enum.ResultType.Bytes));  //数据传递出去
+                                OnEventHandler(this, new EventResult(true, $"接收到[{TAG}]监控数据", ByteTool.ByteTrimEnd(CacheBuffer.Array), @enum.ResultType.Byte));  //数据传递出去
                             }
                             else
                             {
-                                OnEventHandler(this, new EventResult(false, $"接收到[{ClassName}]监控数据长度错误(小于等于零)"));  //数据传递出去
+                                OnEventHandler(this, new EventResult(false, $"接收到[{TAG}]监控数据长度错误(小于等于零)"));  //数据传递出去
                                 OffAsync();
                                 return;
                             }
@@ -112,7 +129,7 @@ namespace YSAI.Core.communication.net.ws.client
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控异常,关闭对象:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控异常,关闭对象:{ex.Message}"));
                         OffAsync();
                         return;
                     }
@@ -143,19 +160,19 @@ namespace YSAI.Core.communication.net.ws.client
                             //连接
                             if (!Communication.ConnectAsync(uri, token.Token).Wait(basics.Timeout))
                             {
-                                OnEventHandler(this, new EventResult(false, $"[{ClassName}]断线重连失败,连接超时,重连{ReconnectionCount}次"));  //数据传递出去
+                                OnEventHandler(this, new EventResult(false, $"[{TAG}]断线重连失败,连接超时,重连{ReconnectionCount}次"));  //数据传递出去
                                 ReconnectionCount++;
                             }
                         }
                         else if (ReconnectionCount > 1)
                         {
-                            OnEventHandler(this, new EventResult(true, $"[{ClassName}]断线重连成功"));  //数据传递出去
+                            OnEventHandler(this, new EventResult(true, $"[{TAG}]断线重连成功"));  //数据传递出去
                             ReconnectionCount = 1;
                         }
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]断线重连异常:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]断线重连异常:{ex.Message}"));
                     }
 
                     Thread.Sleep(basics.ReconnectionInterval);
@@ -347,7 +364,7 @@ namespace YSAI.Core.communication.net.ws.client
                         {
                             if (Byte.Length > 0)
                             {
-                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Bytes);
+                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Byte);
                             }
                             else
                             {

+ 22 - 5
src/YSAI.DAQ/YSAI.Core/communication/net/ws/service/WsServiceOperate.cs

@@ -8,11 +8,24 @@ namespace YSAI.Core.communication.net.ws.service
 {
     public class WsServiceOperate : IBaseAbstract, IOn, IOff, IDisposable
     {
-        protected override string LogHead => "[ WsServiceOperate 操作 ]";
-        protected override string ClassName => "WsServiceOperate";
+        protected override string TAG => "WsServiceOperate";
 
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<WsServiceOperate> ThisObjList = new List<WsServiceOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -21,6 +34,10 @@ namespace YSAI.Core.communication.net.ws.service
         /// <returns></returns>
         public static WsServiceOperate Instance(WsServiceData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             WsServiceOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -142,7 +159,7 @@ namespace YSAI.Core.communication.net.ws.service
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控客户端连接异常:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控客户端连接异常:{ex.Message}"));
                     }
                 }
             }, token.Token);
@@ -168,7 +185,7 @@ namespace YSAI.Core.communication.net.ws.service
                         WebSocketReceiveResult result = webSocket.ReceiveAsync(DataByte, token.Token).Result; // 接收数据,并返回数据的长度;
                         if (result.Count > 0)
                         {
-                            OnEventHandler(this, new EventResult(true, $"[{IpPort}]数据接收成功", new WsServiceData.ClientMessage { Step = WsServiceData.Steps.消息接收, IpPort = IpPort, Data = DataByte.Array }, @enum.ResultType.Bytes));
+                            OnEventHandler(this, new EventResult(true, $"[{IpPort}]数据接收成功", new WsServiceData.ClientMessage { Step = WsServiceData.Steps.消息接收, IpPort = IpPort, Data = DataByte.Array }, @enum.ResultType.Byte));
                         }
                         else
                         {

+ 24 - 7
src/YSAI.DAQ/YSAI.Core/communication/serial/SerialOperate.cs

@@ -11,11 +11,24 @@ namespace YSAI.Core.communication.serial
     /// </summary>
     public class SerialOperate : IBaseAbstract, ICommunication
     {
-        protected override string LogHead => "[ SerialOperate 操作 ]";
-        protected override string ClassName => "SerialOperate";
+        protected override string TAG => "SerialOperate";
 
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<SerialOperate> ThisObjList = new List<SerialOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -24,6 +37,10 @@ namespace YSAI.Core.communication.serial
         /// <returns></returns>
         public static SerialOperate Instance(SerialData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             SerialOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -94,11 +111,11 @@ namespace YSAI.Core.communication.serial
                                 byte[] Byte = new byte[BufSize];
                                 if (Communication.Read(Byte, 0, BufSize) > 0)
                                 {
-                                    OnEventHandler(this, new EventResult(true, $"接收到[{ClassName}]监控数据", ByteTool.ByteTrimEnd(Byte), ResultType.Bytes));
+                                    OnEventHandler(this, new EventResult(true, $"接收到[{TAG}]监控数据", ByteTool.ByteTrimEnd(Byte), ResultType.Byte));
                                 }
                                 else
                                 {
-                                    OnEventHandler(this, new EventResult(false, $"接收到[{ClassName}]监控数据长度错误(小于等于零)"));  //数据传递出去
+                                    OnEventHandler(this, new EventResult(false, $"接收到[{TAG}]监控数据长度错误(小于等于零)"));  //数据传递出去
                                     OffAsync();
                                     return;
                                 }
@@ -115,7 +132,7 @@ namespace YSAI.Core.communication.serial
                     }
                     catch (Exception ex)
                     {
-                        OnEventHandler(this, new EventResult(false, $"[{ClassName}]监控异常,关闭对象:{ex.Message}"));
+                        OnEventHandler(this, new EventResult(false, $"[{TAG}]监控异常,关闭对象:{ex.Message}"));
                         OffAsync();
                         return;
                     }
@@ -275,7 +292,7 @@ namespace YSAI.Core.communication.serial
                         {
                             if (Byte.Length > 0)
                             {
-                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Bytes);
+                                return Break("SendWait", true, RData: Byte, RType: @enum.ResultType.Byte);
                             }
                             else
                             {

+ 12 - 8
src/YSAI.DAQ/YSAI.Core/enum/Enums.cs

@@ -126,19 +126,23 @@ namespace YSAI.Core.@enum
         /// </summary>
         KeyValue,
         /// <summary>
-        /// 数据库键值集合数组
+        /// 键值集合数组
         /// </summary>
         KeyValueArray,
         /// <summary>
-        /// Josn字符串
+        /// Josn字符串数据(方便解析)
         /// </summary>
         Json,
         /// <summary>
-        /// 字节数据集合
+        /// 字节数据
         /// </summary>
-        Bytes,
+        Byte,
+        /// <summary>
+        /// 布尔数据
+        /// </summary>
+        Bool,
         /// <summary>
-        /// 返回的字符串参数
+        /// 字符串数
         /// </summary>
         String,
         /// <summary>
@@ -150,15 +154,15 @@ namespace YSAI.Core.@enum
         /// </summary>
         Object,
         /// <summary>
-        /// 枚举对象
+        /// 枚举数据
         /// </summary>
         Enum,
         /// <summary>
-        /// 操作结果
+        /// 操作结果数据
         /// </summary>
         OR,
         /// <summary>
-        /// 事件结果
+        /// 事件结果数据
         /// </summary>
         ER,
         /// <summary>

+ 6 - 13
src/YSAI.DAQ/YSAI.Core/interface/IOrAbstract.cs

@@ -11,16 +11,9 @@ namespace YSAI.Core.@interface
     public abstract class IOrAbstract
     {
         /// <summary>
-        /// 日志头数据,用于统一返回
+        /// 全局标识,用于统一返回
         /// </summary>
-        protected virtual string LogHead
-        {
-            get;
-        }
-        /// <summary>
-        /// 自身类名,用于统一返回
-        /// </summary>
-        protected virtual string ClassName
+        protected virtual string TAG
         {
             get;
         }
@@ -33,7 +26,7 @@ namespace YSAI.Core.@interface
         /// <returns>返回方法名</returns>
         protected string Depart(string MethodName)
         {
-            RunTimeTool.Instance($"{ClassName}.{MethodName}").StartRecord();
+            RunTimeTool.Instance($"{TAG}.{MethodName}").StartRecord();
             return MethodName;
         }
 
@@ -75,11 +68,11 @@ namespace YSAI.Core.@interface
         protected OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.Null, Exception? Exception = null)
         {
             //返回运行时间(毫秒)
-            double runTime = RunTimeTool.Instance($"{ClassName}.{MethodName}").StopRecord().milliseconds;
+            double runTime = RunTimeTool.Instance($"{TAG}.{MethodName}").StopRecord().milliseconds;
             //消息数据组织
-            string message = $"{LogHead} ( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
+            string message = $"[ {TAG} ]( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
             //异常则输出日志
-            if (!State) { LogHelper.Error(message, $"{ClassName}{MethodName}.log", Exception); }
+            if (!State) { LogHelper.Error(message, $"{TAG}{MethodName}.log", Exception); }
             //返回状态
             return new OperateResult(State, message, runTime, RData, RType);
         }

+ 4 - 5
src/YSAI.DAQ/YSAI.Core/reflection/RIOperate.cs

@@ -27,8 +27,7 @@ namespace YSAI.Core.reflection
     /// </summary>
     public class RIOperate : IBaseAbstract, IDisposable
     {
-        protected override string LogHead => "[ RIOperate 操作 ]";
-        protected override string ClassName => "RIOperate";
+        protected override string TAG => "RIOperate";
         /// <summary>
         /// 文件夹
         /// </summary>
@@ -56,7 +55,7 @@ namespace YSAI.Core.reflection
             }
             catch (Exception ex)
             {
-                LogHelper.Error($"获取配置异常:{ex.Message}", $"{ClassName}.log", ex);
+                LogHelper.Error($"获取配置异常:{ex.Message}", $"{TAG}.log", ex);
             }
             return null;
         }
@@ -76,7 +75,7 @@ namespace YSAI.Core.reflection
             }
             catch (Exception ex)
             {
-                LogHelper.Error($"设置配置异常:{ex.Message}", $"{ClassName}.log", ex);
+                LogHelper.Error($"设置配置异常:{ex.Message}", $"{TAG}.log", ex);
             }
             return false;
         }
@@ -98,7 +97,7 @@ namespace YSAI.Core.reflection
                 OperateResult operateResult = Init();
                 if (!operateResult.State)
                 {
-                    LogHelper.Error("反射初始化异常:" + operateResult.Message, $"{ClassName}.log");
+                    LogHelper.Error("反射初始化异常:" + operateResult.Message, $"{TAG}.log");
                 }
             }
         }

+ 20 - 3
src/YSAI.DAQ/YSAI.Core/reflection/ReflectionOperate.cs

@@ -16,10 +16,23 @@ namespace YSAI.Core.reflection
     /// </summary>
     public class ReflectionOperate : IBaseAbstract, IDisposable
     {
-        protected override string LogHead => "[ ReflectionOperate 操作 ]";
-        protected override string ClassName => "ReflectionOperate";
+        protected override string TAG => "ReflectionOperate";
 
-        private static readonly object Lock = new object();  //锁
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<ReflectionOperate> ThisObjList = new List<ReflectionOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -28,6 +41,10 @@ namespace YSAI.Core.reflection
         /// <returns></returns>
         public static ReflectionOperate Instance(ReflectionData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             ReflectionOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {

+ 20 - 4
src/YSAI.DAQ/YSAI.Core/script/ScriptOperate.cs

@@ -9,7 +9,22 @@ namespace YSAI.Core.script
     /// </summary>
     public class ScriptOperate : IBaseAbstract, IDisposable
     {
-        private static readonly object Lock = new object();  //锁
+        protected override string TAG => "ScriptOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<ScriptOperate> ThisObjList = new List<ScriptOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -17,6 +32,10 @@ namespace YSAI.Core.script
         /// <returns></returns>
         public static ScriptOperate Instance(ScriptData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             ScriptOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -50,9 +69,6 @@ namespace YSAI.Core.script
         /// </summary>
         ScriptData.Basics basics;
 
-        protected override string LogHead => "[ ScriptOperate 操作 ]";
-
-        protected override string ClassName => "ScriptOperate";
 
         public void Dispose()
         {

+ 21 - 3
src/YSAI.DAQ/YSAI.Core/subscribe/SubscribeOperate.cs

@@ -13,7 +13,22 @@ namespace YSAI.Core.subscription
     /// </summary>
     public class SubscribeOperate : IBaseAbstract, ISubscribe
     {
-        private static readonly object Lock = new object();  //锁
+        protected override string TAG => "SubscribeOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<SubscribeOperate> ThisObjList = new List<SubscribeOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -22,6 +37,10 @@ namespace YSAI.Core.subscription
         /// <returns></returns>
         public static SubscribeOperate Instance(SubscribeData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             SubscribeOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -81,9 +100,8 @@ namespace YSAI.Core.subscription
         /// </summary>
         List<ConcurrentDictionary<string, AddressValue>> UpParamArray;
 
-        protected override string LogHead => "[ SubscribeOperate 操作 ]";
 
-        protected override string ClassName => "SubscribeOperate";
+        
 
         /// <summary>
         /// 现场安全字典比对,是否一致

+ 31 - 13
src/YSAI.DAQ/YSAI.DB/DBOperate.cs

@@ -21,8 +21,23 @@ namespace YSAI.DB
     /// </summary>
     public sealed class DBOperate : IBaseAbstract, IDaq
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<DBOperate> ThisObjList = new List<DBOperate>(); //自身对象集合
+        protected override string TAG => "DBOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<DBOperate> ThisObjList = new List<DBOperate>();
 
         /// <summary>
         /// 单例模式
@@ -30,6 +45,10 @@ namespace YSAI.DB
         /// <returns></returns>
         public static DBOperate Instance(DBData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             DBOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -612,8 +631,7 @@ namespace YSAI.DB
             GC.SuppressFinalize(this);
             ThisObjList.Remove(this);
         }
-        protected override string LogHead => "[ DBOperate 操作 ]";
-        protected override string ClassName => "DBOperate";
+        
         public Task<OperateResult> ReadAsync(Address address)
         {
             return Task.Run(() => Read(address));
@@ -657,11 +675,11 @@ namespace YSAI.DB
                         }
                         catch (Exception ex)
                         {
-                            LogHelper.Error(basics.DBType.ToString(), $"{ClassName}.log");
-                            LogHelper.Error(basics.ConnectStr, $"{ClassName}.log");
-                            LogHelper.Error($"执行SQL:{sql} 异常:", $"{ClassName}.log");
-                            LogHelper.Error(ex.Message, $"{ClassName}.log");
-                            LogHelper.Error("以上异常不影响流程", $"{ClassName}.log");
+                            LogHelper.Error(basics.DBType.ToString(), $"{TAG}.log");
+                            LogHelper.Error(basics.ConnectStr, $"{TAG}.log");
+                            LogHelper.Error($"执行SQL:{sql} 异常:", $"{TAG}.log");
+                            LogHelper.Error(ex.Message, $"{TAG}.log");
+                            LogHelper.Error("以上异常不影响流程", $"{TAG}.log");
                         }
                         if (obj == null)  //查询结果为空
                         {
@@ -683,7 +701,7 @@ namespace YSAI.DB
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
 
@@ -722,7 +740,7 @@ namespace YSAI.DB
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> SubscribeAsync(Address address)
@@ -747,7 +765,7 @@ namespace YSAI.DB
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -797,7 +815,7 @@ namespace YSAI.DB
         }
         public OperateResult GetStatus()
         {
-            return Break(Depart("GetStatus"), true, "已连接", true, Core.@enum.ResultType.All);
+            return Break(Depart("GetStatus"), true, "已连接", true, Core.@enum.ResultType.Bool);
         }
 
         public Task<OperateResult> GetStatusAsync()

+ 1 - 1
src/YSAI.DAQ/YSAI.DB/YSAI.DB.csproj

@@ -18,7 +18,7 @@
 		<PackageReference Include="System.Data.OracleClient" Version="1.0.8" />
 		<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
 		<PackageReference Include="System.Data.SQLite" Version="1.0.118" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.45" />
 	</ItemGroup>
 	<!--<ItemGroup>
 		<ProjectReference Include="..\YSAI.Core\YSAI.Core.csproj" />

+ 17 - 18
src/YSAI.DAQ/YSAI.DaqManage/DaqManageOperate.cs

@@ -17,8 +17,7 @@ namespace YSAI.DaqManage
     /// </summary>
     public class DaqManageOperate : IBaseAbstract, IDisposable
     {
-        protected override string LogHead => "[ DaqManageOperate 操作 ]";
-        protected override string ClassName => "DaqManageOperate";
+        protected override string TAG => "DaqManageOperate";
         /// <summary>
         /// 文件夹
         /// </summary>
@@ -92,7 +91,7 @@ namespace YSAI.DaqManage
                 //实体转JSON字符串
                 string json = JsonTool.JsonEntityToString(basics);
                 //写入文件
-                System.IO.File.WriteAllText(ConfigFile, JsonTool.JsonFormatting(json));
+                System.IO.File.WriteAllText(ConfigFile, json.JsonFormatting());
                 return true;
             }
             catch (Exception ex)
@@ -750,7 +749,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Dispose", false, ex.Message, Exc: ex);
+                return Break("Dispose", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -811,7 +810,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Remove", false, ex.Message, Exc: ex);
+                return Break("Remove", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -850,7 +849,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -875,7 +874,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -901,7 +900,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Write", false, ex.Message, Exc: ex);
+                return Break("Write", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -940,7 +939,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -965,7 +964,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1004,7 +1003,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1029,7 +1028,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1053,7 +1052,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1077,7 +1076,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1177,7 +1176,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("SettingLibZip", false, ex.Message, Exc: ex);
+                return Break("SettingLibZip", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1243,7 +1242,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("DeleteLibFolder", false, ex.Message, Exc: ex);
+                return Break("DeleteLibFolder", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1280,7 +1279,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("SettingLibConfig", false, ex.Message, Exc: ex);
+                return Break("SettingLibConfig", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1317,7 +1316,7 @@ namespace YSAI.DaqManage
             }
             catch (Exception ex)
             {
-                return Break("UpdateLibConfig", false, ex.Message, Exc: ex);
+                return Break("UpdateLibConfig", false, ex.Message, Exception: ex);
             }
         }
     }

+ 1 - 1
src/YSAI.DAQ/YSAI.DaqManage/YSAI.DaqManage.csproj

@@ -7,7 +7,7 @@
   </PropertyGroup>
 	<ItemGroup>
 		<FrameworkReference Include="Microsoft.AspNetCore.App" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.45" />
 	</ItemGroup>
 
 	<!--<ItemGroup>

+ 26 - 9
src/YSAI.DAQ/YSAI.Kafka/KafkaOperate.cs

@@ -7,16 +7,33 @@ namespace YSAI.Kafka
 {
     public sealed class KafkaOperate : IBaseAbstract, IRelay
     {
-        protected override string LogHead => "[ KafkaOperate 操作 ]";
-        protected override string ClassName => "KafkaOperate";
-        private static readonly object Lock = new object();  //锁
-        private static List<KafkaOperate> ThisObjList = new List<KafkaOperate>(); //自身对象集合
+        protected override string TAG => "KafkaOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<KafkaOperate> ThisObjList = new List<KafkaOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
         /// <returns></returns>
         public static KafkaOperate Instance(KafkaData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             KafkaOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -105,7 +122,7 @@ namespace YSAI.Kafka
                             object Content = result.Message.Value;
                             string Key = result.Message.Key;
                             long Offset = result.TopicPartitionOffset.Offset.Value;
-                            OnEventHandler(this, new EventResult(true, $"{LogHead} 接收到主题 ( {Topic} ) 内容 ( {Content} ) 键 ( {Key} ) 偏移量 ( {Offset} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content},\"Key\":\"{Key}\",\"Offset\":\"{Offset}\"" + "}", Core.@enum.ResultType.Dynamic));
+                            OnEventHandler(this, new EventResult(true, $"{TAG} 接收到主题 ( {Topic} ) 内容 ( {Content} ) 键 ( {Key} ) 偏移量 ( {Offset} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content},\"Key\":\"{Key}\",\"Offset\":\"{Offset}\"" + "}", Core.@enum.ResultType.Dynamic));
                             //消息已处理提交偏移量
                             Consumer?.Commit(result);
                         }
@@ -174,7 +191,7 @@ namespace YSAI.Kafka
             }
             catch (Exception ex)
             {
-                return Break("CreateTopics", false, ex.Message, Exc: ex);
+                return Break("CreateTopics", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -220,7 +237,7 @@ namespace YSAI.Kafka
             }
             catch (Exception ex)
             {
-                return Break("Produce", false, ex.Message, Exc: ex);
+                return Break("Produce", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -294,7 +311,7 @@ namespace YSAI.Kafka
             }
             catch (Exception ex)
             {
-                return Break("Consume", false, ex.Message, Exc: ex);
+                return Break("Consume", false, ex.Message, Exception: ex);
             }
         }
 
@@ -456,7 +473,7 @@ namespace YSAI.Kafka
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 1 - 1
src/YSAI.DAQ/YSAI.Kafka/YSAI.Kafka.csproj

@@ -14,7 +14,7 @@
 
   <ItemGroup>
     <PackageReference Include="Confluent.Kafka" Version="2.2.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 	
 	<!--<ItemGroup>

+ 1 - 1
src/YSAI.DAQ/YSAI.Modbus/YSAI.Modbus.csproj

@@ -15,7 +15,7 @@
 	<ItemGroup>
     <PackageReference Include="NModbus" Version="3.0.80" />
     <PackageReference Include="NModbus.Serial" Version="3.0.80" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 45 - 29
src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientOperate.cs

@@ -20,7 +20,22 @@ namespace YSAI.Modbus.client
     /// </summary>
     public sealed class ModbusClientOperate : IBaseAbstract, IDaq
     {
-        private static readonly object Lock = new object();  //锁
+        protected override string TAG => "ModbusClientOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
         private static List<ModbusClientOperate> ThisObjList = new List<ModbusClientOperate>(); //自身对象集合
         /// <summary>
         /// 单例模式
@@ -28,6 +43,10 @@ namespace YSAI.Modbus.client
         /// <returns></returns>
         public static ModbusClientOperate Instance(Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             ModbusClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -248,9 +267,6 @@ namespace YSAI.Modbus.client
 
         #endregion
 
-        protected override string LogHead => "[ ModbusClientOperate 操作 ]";
-        protected override string ClassName => "ModbusClientOperate";
-
         public Task<OperateResult> OnAsync()
         {
             return Task.Run(() => On());
@@ -363,7 +379,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -392,7 +408,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 
@@ -474,7 +490,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadCoils", false, ex.Message, Exc: ex);
+                return Break("ReadCoils", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -560,7 +576,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadInputs", false, ex.Message, Exc: ex);
+                return Break("ReadInputs", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -644,7 +660,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -730,7 +746,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadInputRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadInputRegisters", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -790,7 +806,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteSingleCoil", false, ex.Message, Exc: ex);
+                return Break("WriteSingleCoil", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -845,7 +861,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteSingleRegister", false, ex.Message, Exc: ex);
+                return Break("WriteSingleRegister", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -900,7 +916,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteMultipleRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteMultipleRegisters", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -955,7 +971,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteMultipleCoils", false, ex.Message, Exc: ex);
+                return Break("WriteMultipleCoils", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1036,7 +1052,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadCharHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadCharHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1105,7 +1121,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadUshortHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadUshortHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1174,7 +1190,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadShortHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadShortHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1243,7 +1259,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadUintHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadUintHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1312,7 +1328,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadIntHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadIntHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1381,7 +1397,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadFloatHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadFloatHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1428,7 +1444,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteCharHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteCharHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1475,7 +1491,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteUshortHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteUshortHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1522,7 +1538,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteShortHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteShortHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1569,7 +1585,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteIntHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteIntHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1616,7 +1632,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteUintHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteUintHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1663,7 +1679,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("WriteFloatHoldingRegisters", false, ex.Message, Exc: ex);
+                return Break("WriteFloatHoldingRegisters", false, ex.Message, Exception: ex);
             }
         }
         #endregion
@@ -1863,7 +1879,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("ReadFloatInputRegisters", false, ex.Message, Exc: ex);
+                return Break("ReadFloatInputRegisters", false, ex.Message, Exception: ex);
             }
         }
         #endregion
@@ -2076,7 +2092,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -2102,7 +2118,7 @@ namespace YSAI.Modbus.client
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 1 - 1
src/YSAI.DAQ/YSAI.Mqtt/YSAI.Mqtt.csproj

@@ -15,7 +15,7 @@
   <ItemGroup>
     <PackageReference Include="MQTTnet" Version="4.3.1.873" />
     <PackageReference Include="MQTTnet.AspNetCore" Version="4.3.1.873" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 27 - 10
src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientOperate.cs

@@ -12,17 +12,34 @@ namespace YSAI.Mqtt.client
     /// </summary>
     public sealed class MqttClientOperate : IBaseAbstract, IRelay
     {
-        protected override string LogHead => "[ MqttClientOperate 操作 ]";
-        protected override string ClassName => "MqttClientOperate";
+        protected override string TAG => "MqttClientOperate";
 
-        private static readonly object Lock = new object();  //锁
-        private static List<MqttClientOperate> ThisObjList = new List<MqttClientOperate>(); //自身对象集合
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<MqttClientOperate> ThisObjList = new List<MqttClientOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
         /// <returns></returns>
         public static MqttClientOperate Instance(MqttClientData.Basics param)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             MqttClientOperate? exp = ThisObjList.FirstOrDefault(c => c.mqttClientData.Equals(param));
             if (exp == null)
             {
@@ -84,7 +101,7 @@ namespace YSAI.Mqtt.client
             string Topic = arg.ApplicationMessage.Topic;
             object Content = Encoding.UTF8.GetString(arg.ApplicationMessage.Payload);
             string ClientID = arg.ClientId;
-            OnEventHandler(this, new EventResult(true, $"{LogHead} 接收到主题 ( {Topic} ) 内容 ( {Content} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content},\"ClientID\":\"{ClientID}\"" + "}", Core.@enum.ResultType.Dynamic));
+            OnEventHandler(this, new EventResult(true, $"{TAG} 接收到主题 ( {Topic} ) 内容 ( {Content} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content},\"ClientID\":\"{ClientID}\"" + "}", Core.@enum.ResultType.Dynamic));
             await Task.CompletedTask;
         }
 
@@ -167,7 +184,7 @@ namespace YSAI.Mqtt.client
             }
             catch (Exception ex)
             {
-                return Break("Publish", false, ex.Message, Exc: ex);
+                return Break("Publish", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -216,7 +233,7 @@ namespace YSAI.Mqtt.client
             }
             catch (Exception ex)
             {
-                return Break("AddSubscribe", false, ex.Message, Exc: ex);
+                return Break("AddSubscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -249,7 +266,7 @@ namespace YSAI.Mqtt.client
             }
             catch (Exception ex)
             {
-                return Break("RemoveSubscribe", false, ex.Message, Exc: ex);
+                return Break("RemoveSubscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -287,7 +304,7 @@ namespace YSAI.Mqtt.client
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -313,7 +330,7 @@ namespace YSAI.Mqtt.client
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 

+ 23 - 8
src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceOperate.cs

@@ -13,14 +13,33 @@ namespace YSAI.Mqtt.service
     /// </summary>
     public sealed class MqttServiceOperate : IBaseAbstract, IDisposable
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<MqttServiceOperate> ThisObjList = new List<MqttServiceOperate>(); //自身对象集合
+        protected override string TAG => "MqttService";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<MqttServiceOperate> ThisObjList = new List<MqttServiceOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
         /// <returns></returns>
         public static MqttServiceOperate Instance(MqttServiceData.Basics param)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             MqttServiceOperate? exp = ThisObjList.FirstOrDefault(c => c.mqttServiceData.Equals(param));
             if (exp == null)
             {
@@ -198,10 +217,6 @@ namespace YSAI.Mqtt.service
             ThisObjList.Remove(this);
         }
 
-        protected override string LogHead => "[ MqttService 操作 ]";
-
-        protected override string ClassName => "MqttService";
-
         /// <summary>
         /// 打开
         /// </summary>
@@ -246,7 +261,7 @@ namespace YSAI.Mqtt.service
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -279,7 +294,7 @@ namespace YSAI.Mqtt.service
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>

+ 27 - 7
src/YSAI.DAQ/YSAI.Mqtt/service/websocket/MqttWebSocketServiceOperate.cs

@@ -18,14 +18,35 @@ namespace YSAI.Mqtt.service.websocket
     /// </summary>
     public sealed class MqttWebSocketServiceOperate : IBaseAbstract, IMqttWebSocketService
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<MqttWebSocketServiceOperate> ThisObjList = new List<MqttWebSocketServiceOperate>(); //自身对象集合
+        protected override string TAG => TAG_Static;
+
+        public static string TAG_Static => "MqttWebSocketServiceOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<MqttWebSocketServiceOperate> ThisObjList = new List<MqttWebSocketServiceOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
         /// <returns></returns>
         public static MqttWebSocketServiceOperate Instance(MqttWebSocketServiceData.Basics param)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             MqttWebSocketServiceOperate? exp = ThisObjList.FirstOrDefault(c => c.mqttServiceData.Equals(param));
             if (exp == null)
             {
@@ -88,11 +109,10 @@ namespace YSAI.Mqtt.service.websocket
             GC.SuppressFinalize(this);
             ThisObjList.Remove(this);
         }
-        protected override string LogHead => "[ MqttWebSocketServiceOperate 操作 ]";
-
-        public static string LogHead_Static => "[ MqttWebSocketServiceOperate 操作 ]";
+       
 
-        protected override string ClassName => "MqttWebSocketServiceOperate";
+        
+        
 
         /// <summary>
         /// 信息传递
@@ -146,7 +166,7 @@ namespace YSAI.Mqtt.service.websocket
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 

+ 1 - 1
src/YSAI.DAQ/YSAI.Opc/YSAI.Opc.csproj

@@ -13,7 +13,7 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="OPCFoundation.NetStandard.Opc.Ua" Version="1.4.372.56" />
-	<PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+	<PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
 

+ 33 - 15
src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientOperate.cs

@@ -12,8 +12,23 @@ namespace YSAI.Opc.da.client
     /// </summary>
     public sealed class OpcDaClientOperate : IBaseAbstract, IDaq
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<OpcDaClientOperate> ThisObjList = new List<OpcDaClientOperate>(); //自身对象集合
+        protected override string TAG => "OpcDaClientOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<OpcDaClientOperate> ThisObjList = new List<OpcDaClientOperate>(); 
 
         /// <summary>
         /// 单例模式
@@ -21,6 +36,10 @@ namespace YSAI.Opc.da.client
         /// <returns></returns>
         public static OpcDaClientOperate Instance(OpcDaClientData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             OpcDaClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -193,8 +212,7 @@ namespace YSAI.Opc.da.client
             ThisObjList.Remove(this);
         }
 
-        protected override string LogHead => "[ OpcDaClientOperate 操作 ]";
-        protected override string ClassName => "OpcDaClientOperate";
+       
         /// <summary>
         /// 添加组
         /// </summary>
@@ -243,7 +261,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("AddGroup", false, ex.Message, Exc: ex);
+                return Break("AddGroup", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -361,7 +379,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("AddNode", false, ex.Message, Exc: ex);
+                return Break("AddNode", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -415,7 +433,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("UpdateGroupSubscribedState", false, ex.Message, Exc: ex);
+                return Break("UpdateGroupSubscribedState", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -474,7 +492,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("RemoveGroup", false, ex.Message, Exc: ex);
+                return Break("RemoveGroup", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -553,7 +571,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("RemoveNode", false, ex.Message, Exc: ex);
+                return Break("RemoveNode", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -718,7 +736,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
             return Break("On", false, "连接失败");
         }
@@ -767,7 +785,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
             return Break("Off", false, "关闭失败");
         }
@@ -850,7 +868,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
 
@@ -915,7 +933,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("Write", false, ex.Message, Exc: ex);
+                return Break("Write", false, ex.Message, Exception: ex);
             }
         }
 
@@ -929,7 +947,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -960,7 +978,7 @@ namespace YSAI.Opc.da.client
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 33 - 15
src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpOperate.cs

@@ -14,17 +14,24 @@ namespace YSAI.Opc.da.http
 {
     public sealed class OpcDaHttpOperate : IBaseAbstract, IDaq
     {
+        protected override string TAG => "OpcDaHttpOperate";
+       
         /// <summary>
-        /// 构造函数
+        /// 
         /// </summary>
-        public OpcDaHttpOperate(OpcDaHttpData.Basics basics)
-        {
-            this.basics = basics;
-            Url = $"{basics.RequestType.ToString()}://{basics.Ip}:{basics.Port}/";
-        }
-
-        private static readonly object Lock = new object();  //锁
-        private static List<OpcDaHttpOperate> ThisObjList = new List<OpcDaHttpOperate>(); //自身对象集合
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<OpcDaHttpOperate> ThisObjList = new List<OpcDaHttpOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
@@ -32,6 +39,10 @@ namespace YSAI.Opc.da.http
         /// <returns></returns>
         public static OpcDaHttpOperate Instance(OpcDaHttpData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             OpcDaHttpOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -52,6 +63,14 @@ namespace YSAI.Opc.da.http
             return exp;
         }
         /// <summary>
+        /// 构造函数
+        /// </summary>
+        public OpcDaHttpOperate(OpcDaHttpData.Basics basics)
+        {
+            this.basics = basics;
+            Url = $"{basics.RequestType.ToString()}://{basics.Ip}:{basics.Port}/";
+        }
+        /// <summary>
         /// 基础数据
         /// </summary>
         private OpcDaHttpData.Basics basics;
@@ -149,8 +168,7 @@ namespace YSAI.Opc.da.http
             GC.SuppressFinalize(this);
             ThisObjList.Remove(this);
         }
-        protected override string LogHead => "[ OpcDaHttpOperate 操作 ]";
-        protected override string ClassName => "OpcDaHttpOperate";
+       
         /// <summary>
         /// 请求
         /// </summary>
@@ -254,7 +272,7 @@ namespace YSAI.Opc.da.http
             catch (Exception ex)
             {
                 OnEventHandler(this, new EventResult(false, ex.Message, request, Core.@enum.ResultType.Enum));  //事件抛出
-                return Break("Request", false, ex.Message, Exc: ex);
+                return Break("Request", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -369,7 +387,7 @@ namespace YSAI.Opc.da.http
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
 
@@ -438,7 +456,7 @@ namespace YSAI.Opc.da.http
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -464,7 +482,7 @@ namespace YSAI.Opc.da.http
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 32 - 14
src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientOperate.cs

@@ -19,8 +19,23 @@ namespace YSAI.Opc.ua.client
     /// </summary>
     public sealed class OpcUaClientOperate : IBaseAbstract, IDaq
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<OpcUaClientOperate> ThisObjList = new List<OpcUaClientOperate>(); //自身对象集合
+        protected override string TAG => "OpcUaClientOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<OpcUaClientOperate> ThisObjList = new List<OpcUaClientOperate>(); 
         /// <summary>
         /// 单例模式
         /// </summary>
@@ -28,6 +43,10 @@ namespace YSAI.Opc.ua.client
         /// <returns></returns>
         public static OpcUaClientOperate Instance(Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             OpcUaClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -755,8 +774,7 @@ namespace YSAI.Opc.ua.client
             ThisObjList.Remove(this);
         }
 
-        protected override string LogHead => "[ OpcUaClientOperate 操作 ]";
-        protected override string ClassName => "OpcUaClientOperate";
+       
         /// <summary>
         /// 批量添加订阅
         /// </summary>
@@ -939,7 +957,7 @@ namespace YSAI.Opc.ua.client
                     }
                     catch (Exception ex)
                     {
-                        return Break("AddSubscribe", false, ex.Message, Exc: ex);
+                        return Break("AddSubscribe", false, ex.Message, Exception: ex);
                     }
                 }
 
@@ -947,7 +965,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("AddSubscribe", false, ex.Message, Exc: ex);
+                return Break("AddSubscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1069,7 +1087,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("RemoveSubscribe", false, ex.Message, Exc: ex);
+                return Break("RemoveSubscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1115,7 +1133,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("DeleteNode", false, ex.Message, Exc: ex);
+                return Break("DeleteNode", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1318,7 +1336,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1396,7 +1414,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1478,7 +1496,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("Read", false, ex.Message, Exc: ex);
+                return Break("Read", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1545,7 +1563,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("Write", false, ex.Message, Exc: ex);
+                return Break("Write", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1561,7 +1579,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1580,7 +1598,7 @@ namespace YSAI.Opc.ua.client
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 24 - 6
src/YSAI.DAQ/YSAI.Opc/ua/service/OpcUaServiceOperate.cs

@@ -14,8 +14,23 @@ namespace YSAI.Opc.ua.service
     /// </summary>
     public sealed class OpcUaServiceOperate : IBaseAbstract, IDisposable
     {
-        private static readonly object Lock = new object();  //锁
-        private static List<OpcUaServiceOperate> ThisObjList = new List<OpcUaServiceOperate>(); //自身对象集合
+        protected override string TAG => "OpcUaServiceOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<OpcUaServiceOperate> ThisObjList = new List<OpcUaServiceOperate>();
         /// <summary>
         /// 单例模式
         /// </summary>
@@ -23,6 +38,10 @@ namespace YSAI.Opc.ua.service
         /// <returns></returns>
         public static OpcUaServiceOperate Instance(OpcUaServiceData.Basics opcUaData)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             OpcUaServiceOperate? exp = ThisObjList.FirstOrDefault(c => c.opcUaData.Equals(opcUaData));
             if (exp == null)
             {
@@ -201,8 +220,7 @@ namespace YSAI.Opc.ua.service
             ThisObjList.Remove(this);
         }
 
-        protected override string LogHead => "[ OpcUaServiceOperate 操作 ]";
-        protected override string ClassName => "OpcUaServiceOperate";
+        
 
         /// <summary>
         /// 打开
@@ -280,7 +298,7 @@ namespace YSAI.Opc.ua.service
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -323,7 +341,7 @@ namespace YSAI.Opc.ua.service
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 

+ 27 - 10
src/YSAI.DAQ/YSAI.RabbitMQ/RabbitMQOperate.cs

@@ -12,11 +12,24 @@ namespace YSAI.RabbitMQ
     /// </summary>
     public sealed class RabbitMQOperate : IBaseAbstract, IRelay
     {
-        protected override string LogHead => "[ RabbitMQOperate 操作 ]";
-        protected override string ClassName => "RabbitMQOperate";
+        protected override string TAG => "RabbitMQOperate";
 
-        private static readonly object Lock = new object();  //锁
-        private static List<RabbitMQOperate> ThisObjList = new List<RabbitMQOperate>(); //自身对象集合
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<RabbitMQOperate> ThisObjList = new List<RabbitMQOperate>(); 
 
         /// <summary>
         /// 单例模式
@@ -24,6 +37,10 @@ namespace YSAI.RabbitMQ
         /// <returns></returns>
         public static RabbitMQOperate Instance(RabbitMQData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             RabbitMQOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -148,7 +165,7 @@ namespace YSAI.RabbitMQ
             }
             catch (Exception ex)
             {
-                return Break("Publish", false, ex.Message, Exc: ex);
+                return Break("Publish", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -252,7 +269,7 @@ namespace YSAI.RabbitMQ
             }
             catch (Exception ex)
             {
-                return Break("Consume", false, ex.Message, Exc: ex);
+                return Break("Consume", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -290,7 +307,7 @@ namespace YSAI.RabbitMQ
             }
             string Topic = e.RoutingKey;
             object Content = Encoding.UTF8.GetString(e.Body.ToArray());
-            OnEventHandler(this, new EventResult(true, $"{LogHead} 接收到主题 ( {Topic} ) 内容 ( {Content} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content}" + "}", Core.@enum.ResultType.Dynamic));
+            OnEventHandler(this, new EventResult(true, $"{TAG} 接收到主题 ( {Topic} ) 内容 ( {Content} )", "{" + $"\"Topic\":\"{Topic}\",\"Content\":{Content}" + "}", Core.@enum.ResultType.Dynamic));
         }
         public Task<OperateResult> OnAsync()
         {
@@ -328,7 +345,7 @@ namespace YSAI.RabbitMQ
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -362,7 +379,7 @@ namespace YSAI.RabbitMQ
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 
@@ -415,7 +432,7 @@ namespace YSAI.RabbitMQ
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 1 - 1
src/YSAI.DAQ/YSAI.RabbitMQ/YSAI.RabbitMQ.csproj

@@ -14,7 +14,7 @@
 
   <ItemGroup>
     <PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
   <ItemGroup>

+ 13 - 14
src/YSAI.DAQ/YSAI.RelayManage/RelayManageOperate.cs

@@ -18,8 +18,7 @@ namespace YSAI.RelayManage
     /// </summary>
     public class RelayManageOperate : IBaseAbstract, IDisposable
     {
-        protected override string LogHead => "[ RelayManageOperate 操作 ]";
-        protected override string ClassName => "RelayManageOperate";
+        protected override string TAG => "RelayManageOperate";
         /// <summary>
         /// 文件夹
         /// </summary>
@@ -94,7 +93,7 @@ namespace YSAI.RelayManage
                 //实体转JSON字符串
                 string json = JsonTool.JsonEntityToString(basics);
                 //写入文件
-                File.WriteAllText(ConfigFile, JsonTool.JsonFormatting(json));
+                File.WriteAllText(ConfigFile, json.JsonFormatting());
                 return true;
             }
             catch (Exception ex)
@@ -846,7 +845,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("SettingLibZip", false, ex.Message, Exc: ex);
+                return Break("SettingLibZip", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -912,7 +911,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("DeleteLibFolder", false, ex.Message, Exc: ex);
+                return Break("DeleteLibFolder", false, ex.Message, Exception: ex);
             }
         }
 
@@ -950,7 +949,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("SettingLibConfig", false, ex.Message, Exc: ex);
+                return Break("SettingLibConfig", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -987,7 +986,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("UpdateLibConfig", false, ex.Message, Exc: ex);
+                return Break("UpdateLibConfig", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1012,7 +1011,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("Dispose", false, ex.Message, Exc: ex);
+                return Break("Dispose", false, ex.Message, Exception: ex);
             }
         }
 
@@ -1076,7 +1075,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("Remove", false, ex.Message, Exc: ex);
+                return Break("Remove", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1100,7 +1099,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1124,7 +1123,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1186,7 +1185,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("Produce", false, ex.Message, Exc: ex);
+                return Break("Produce", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1211,7 +1210,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         /// <summary>
@@ -1236,7 +1235,7 @@ namespace YSAI.RelayManage
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
     }

+ 1 - 1
src/YSAI.DAQ/YSAI.RelayManage/YSAI.RelayManage.csproj

@@ -9,7 +9,7 @@
 	<ItemGroup>
 		<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
 		<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.45" />
 		<FrameworkReference Include="Microsoft.AspNetCore.App" />
 	</ItemGroup>
 

+ 1 - 1
src/YSAI.DAQ/YSAI.S7/YSAI.S7.csproj

@@ -14,7 +14,7 @@
 
 	<ItemGroup>
     <PackageReference Include="S7netplus" Version="0.20.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 26 - 9
src/YSAI.DAQ/YSAI.S7/client/S7ClientOperate.cs

@@ -16,10 +16,23 @@ namespace YSAI.S7.client
     /// </summary>
     public sealed class S7ClientOperate : IBaseAbstract, IDaq
     {
-        protected override string LogHead => "[ S7ClientOperate 操作 ]";
-        protected override string ClassName => "S7ClientOperate";
-        private static readonly object Lock = new object();  //锁
-        private static List<S7ClientOperate> ThisObjList = new List<S7ClientOperate>(); //自身对象集合
+        protected override string TAG => "S7ClientOperate";
+        /// <summary>
+        /// 锁
+        /// </summary>
+        private static readonly object Lock = new object();
+        /// <summary>
+        /// 最大实例数量
+        /// </summary>
+        private static readonly uint MaxInstanceCount = 100;
+        /// <summary>
+        /// 实例数超过限制提示
+        /// </summary>
+        private static readonly string ExceedMaxInstanceCountTips = $"当前实例数量超过最大限制数({MaxInstanceCount}),请检查您的代码是否合理的使用了单例模式";
+        /// <summary>
+        /// 自身对象集合
+        /// </summary>
+        private static List<S7ClientOperate> ThisObjList = new List<S7ClientOperate>(); 
 
         /// <summary>
         /// 单例模式
@@ -27,6 +40,10 @@ namespace YSAI.S7.client
         /// <returns></returns>
         public static S7ClientOperate Instance(S7ClientData.Basics basics)
         {
+            if (ThisObjList.Count >= MaxInstanceCount)
+            {
+                throw new Exception(ExceedMaxInstanceCountTips);
+            }
             S7ClientOperate? exp = ThisObjList.FirstOrDefault(c => c.basics.Equals(basics));
             if (exp == null)
             {
@@ -115,7 +132,7 @@ namespace YSAI.S7.client
             }
             catch (Exception ex)
             {
-                return Break("On", false, ex.Message, Exc: ex);
+                return Break("On", false, ex.Message, Exception: ex);
             }
         }
 
@@ -143,7 +160,7 @@ namespace YSAI.S7.client
             }
             catch (Exception ex)
             {
-                return Break("Off", false, ex.Message, Exc: ex);
+                return Break("Off", false, ex.Message, Exception: ex);
             }
         }
 
@@ -281,7 +298,7 @@ namespace YSAI.S7.client
             }
             catch (Exception ex)
             {
-                return Break("Write", false, ex.Message, Exc: ex);
+                return Break("Write", false, ex.Message, Exception: ex);
             }
         }
 
@@ -321,7 +338,7 @@ namespace YSAI.S7.client
             }
             catch (Exception ex)
             {
-                return Break("Subscribe", false, ex.Message, Exc: ex);
+                return Break("Subscribe", false, ex.Message, Exception: ex);
             }
         }
         public Task<OperateResult> SubscribeAsync(Address address)
@@ -346,7 +363,7 @@ namespace YSAI.S7.client
             }
             catch (Exception ex)
             {
-                return Break("UnSubscribe", false, ex.Message, Exc: ex);
+                return Break("UnSubscribe", false, ex.Message, Exception: ex);
             }
         }
 

+ 2 - 12
src/YSAI.DAQ/YSAI.Test.All/Program.cs

@@ -38,18 +38,8 @@ void OpcUaClientOperate_OnEvent(object? sender, EventResult e)
                LogHelper.Verbose(str);
             }
             break;
-        case YSAI.Core.@enum.ResultType.KeyValueArray:
-        case YSAI.Core.@enum.ResultType.Json:
-        case YSAI.Core.@enum.ResultType.Bytes:
-        case YSAI.Core.@enum.ResultType.String:
-        case YSAI.Core.@enum.ResultType.Dynamic:
-        case YSAI.Core.@enum.ResultType.OperateResult:
-        case YSAI.Core.@enum.ResultType.Enum:
-        case YSAI.Core.@enum.ResultType.All:
-        case YSAI.Core.@enum.ResultType.NULL:
-            Console.WriteLine(e.Message);
-            break;
         default:
+            Console.WriteLine(e.Message);
             break;
     }
    
@@ -434,7 +424,7 @@ void OpcUaClientOperate_OnEvent(object? sender, EventResult e)
 //class TEST : IBaseAbstract
 //{
 //    protected override string LogHead => "[ TEST 操作 ]";
-//    protected override string ClassName => "TEST";
+//    protected override string TAG => "TEST";
 //    public OperateResult Read(Address address)
 //    {
 //        Depart("Read");

+ 0 - 16
src/YSAI.DAQ/YSAI.Test/UnitTest1.cs

@@ -1229,22 +1229,6 @@ namespace YSAI.Test
                         Console.WriteLine($"{item.Key} - {item.Value.Value}");
                     }
                     break;
-                case ResultType.KeyValueArray:
-                    break;
-                case ResultType.Json:
-                    break;
-                case ResultType.Bytes:
-                    break;
-                case ResultType.String:
-                    break;
-                case ResultType.Dynamic:
-                    break;
-                case ResultType.OperateResult:
-                    break;
-                case ResultType.Enum:
-                    break;
-                case ResultType.NULL:
-                    break;
             }
         }
     }

+ 1 - 1
src/YSAI.DAQ/YSAI.Test/YSAI.Test.csproj

@@ -17,7 +17,7 @@
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-	<PackageReference Include="YSAI.Core" Version="1.0.0.40" />
+	<PackageReference Include="YSAI.Core" Version="1.0.0.45" />
   </ItemGroup>
 
   <ItemGroup>