lixun 2 years ago
parent
commit
7b03c60923
33 changed files with 415 additions and 73 deletions
  1. 4 4
      src/YSAI.DAQ/YSAI.Core/interface/unify/IBase.cs
  2. 5 25
      src/YSAI.DAQ/YSAI.Core/interface/unify/IOr.cs
  3. 45 0
      src/YSAI.DAQ/YSAI.Core/interface/unify/IOrAbstract.cs
  4. 3 0
      src/YSAI.DAQ/YSAI.DB/DBData.cs
  5. 1 0
      src/YSAI.DAQ/YSAI.DB/YSAI.DB.csproj
  6. 3 0
      src/YSAI.DAQ/YSAI.Kafka/KafkaAdminData.cs
  7. 4 1
      src/YSAI.DAQ/YSAI.Kafka/KafkaBaseData.cs
  8. 4 1
      src/YSAI.DAQ/YSAI.Kafka/KafkaConsumerData.cs
  9. 3 0
      src/YSAI.DAQ/YSAI.Kafka/KafkaProducerData.cs
  10. 1 0
      src/YSAI.DAQ/YSAI.Kafka/YSAI.Kafka.csproj
  11. 0 19
      src/YSAI.DAQ/YSAI.Manage/Controllers/HomeController.cs
  12. 140 0
      src/YSAI.DAQ/YSAI.Manage/Controllers/libController.cs
  13. 2 2
      src/YSAI.DAQ/YSAI.Manage/Program.cs
  14. 8 0
      src/YSAI.DAQ/YSAI.Manage/YSAI.Manage.csproj
  15. 1 0
      src/YSAI.DAQ/YSAI.Modbus/YSAI.Modbus.csproj
  16. 19 0
      src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientData.cs
  17. 1 0
      src/YSAI.DAQ/YSAI.Mqtt/YSAI.Mqtt.csproj
  18. 8 0
      src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientData.cs
  19. 6 1
      src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceData.cs
  20. 1 0
      src/YSAI.DAQ/YSAI.Opc/YSAI.Opc.csproj
  21. 4 0
      src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientData.cs
  22. 5 0
      src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpData.cs
  23. 9 0
      src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientData.cs
  24. 4 0
      src/YSAI.DAQ/YSAI.Opc/ua/service/OpcUaServiceData.cs
  25. 7 0
      src/YSAI.DAQ/YSAI.RabbitMQ/RabbitMQData.cs
  26. 1 0
      src/YSAI.DAQ/YSAI.RabbitMQ/YSAI.RabbitMQ.csproj
  27. 1 0
      src/YSAI.DAQ/YSAI.Redis/YSAI.Redis.csproj
  28. 1 0
      src/YSAI.DAQ/YSAI.S7/YSAI.S7.csproj
  29. 7 0
      src/YSAI.DAQ/YSAI.S7/client/S7ClientData.cs
  30. 7 4
      src/YSAI.DAQ/YSAI.TestConsole/Program.cs
  31. 0 15
      src/YSAI.DAQ/YSAI.Unility/AnalysisTool.cs
  32. 63 0
      src/YSAI.DAQ/YSAI.Unility/EnumTool.cs
  33. 47 1
      src/YSAI.DAQ/YSAI.Unility/ReflexTool.cs

+ 4 - 4
src/YSAI.DAQ/YSAI.Core/interface/unify/IBase.cs

@@ -10,14 +10,14 @@ namespace YSAI.Core.@interface.unify
     /// <summary>
     /// [ 抽象类 ]统一出参
     /// </summary>
-    public abstract class IBase : IOr
+    public abstract class IBase : IOrAbstract
     {
     }
 
     /// <summary>
     /// [ 抽象类 ]包含一个事件与统一出参
     /// </summary>
-    public abstract class IBase<E1> : IOr
+    public abstract class IBase<E1> : IOrAbstract
     {
         /// <summary>
         /// 信息传递
@@ -36,7 +36,7 @@ namespace YSAI.Core.@interface.unify
     /// <summary>
     /// [ 抽象类 ]包含两个事件与统一出参
     /// </summary>
-    public abstract class IBase<E1, E2> : IOr
+    public abstract class IBase<E1, E2> : IOrAbstract
     {
         /// <summary>
         /// 信息传递
@@ -68,7 +68,7 @@ namespace YSAI.Core.@interface.unify
     /// <summary>
     /// [ 抽象类 ]包含三个事件与统一出参
     /// </summary>
-    public abstract class IBase<E1, E2, E3> : IOr
+    public abstract class IBase<E1, E2, E3> : IOrAbstract
     {
         /// <summary>
         /// 信息传递

+ 5 - 25
src/YSAI.DAQ/YSAI.Core/interface/unify/IOr.cs

@@ -5,27 +5,23 @@ using System.Text;
 using System.Threading.Tasks;
 using YSAI.Core.data;
 using YSAI.Core.@enum;
-using YSAI.Log;
 using YSAI.Unility;
 
 namespace YSAI.Core.@interface.unify
 {
-    /// <summary>
-    /// 抽象类,实现统一返回
-    /// </summary>
-    public abstract class IOr
+    public interface IOr
     {
         /// <summary>
         /// 日志头数据,用于统一返回
         /// </summary>
-        public virtual string LogHead
+        string LogHead
         {
             get;
         }
         /// <summary>
         /// 自身类名,用于统一返回
         /// </summary>
-        public virtual string ClassName
+        string ClassName
         {
             get;
         }
@@ -37,13 +33,7 @@ namespace YSAI.Core.@interface.unify
         /// <param name="Message">消息</param>
         /// <param name="RData">结果值</param>
         /// <returns>统一结果</returns>
-        public virtual Task<OperateResult> BreakAsync(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
-        {
-            return Task.Run(() =>
-            {
-                return Break(MethodName, State, Message, RData, RType);
-            });
-        }
+        Task<OperateResult> BreakAsync(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL);
 
         /// <summary>
         /// 统一返回
@@ -53,16 +43,6 @@ namespace YSAI.Core.@interface.unify
         /// <param name="Message">消息</param>
         /// <param name="RData">结果值</param>
         /// <returns>统一结果</returns>
-        public virtual OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
-        {
-            //返回运行时间(毫秒)
-            double runTime = RunTimeTool.Instance($"{ClassName}.{MethodName}").StopRecord().milliseconds;
-            //消息数据组织
-            string message = $"{LogHead} ( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
-            //异常则输出日志
-            if (!State) { LogHelper.Error(message, $"{ClassName}.log"); }
-            //返回状态
-            return new OperateResult(State, message, runTime, RData, RType);
-        }
+        OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL);
     }
 }

+ 45 - 0
src/YSAI.DAQ/YSAI.Core/interface/unify/IOrAbstract.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using YSAI.Core.data;
+using YSAI.Core.@enum;
+using YSAI.Log;
+using YSAI.Unility;
+
+namespace YSAI.Core.@interface.unify
+{
+    /// <summary>
+    /// 抽象类,实现统一返回
+    /// </summary>
+    public abstract class IOrAbstract : IOr
+    {
+        public virtual string LogHead
+        {
+            get;
+        }
+        public virtual string ClassName
+        {
+            get;
+        }
+        public virtual Task<OperateResult> BreakAsync(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
+        {
+            return Task.Run(() =>
+            {
+                return Break(MethodName, State, Message, RData, RType);
+            });
+        }
+        public virtual OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
+        {
+            //返回运行时间(毫秒)
+            double runTime = RunTimeTool.Instance($"{ClassName}.{MethodName}").StopRecord().milliseconds;
+            //消息数据组织
+            string message = $"{LogHead} ( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
+            //异常则输出日志
+            if (!State) { LogHelper.Error(message, $"{ClassName}.log"); }
+            //返回状态
+            return new OperateResult(State, message, runTime, RData, RType);
+        }
+    }
+}

+ 3 - 0
src/YSAI.DAQ/YSAI.DB/DBData.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -16,10 +17,12 @@ namespace YSAI.DB
             /// <summary>
             /// 数据库连接字符串
             /// </summary>
+            [Description("数据库连接字符串")]
             public string ConnectStr { get; set; }
             /// <summary>
             /// 数据库类型
             /// </summary>
+            [Description("数据库类型")]
             public DBType DBType { get; set; } = DBType.SqlServer;
         }
         /// <summary>

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
 	<ItemGroup>

+ 3 - 0
src/YSAI.DAQ/YSAI.Kafka/KafkaAdminData.cs

@@ -1,6 +1,7 @@
 using Confluent.Kafka;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -17,10 +18,12 @@ namespace YSAI.Kafka
             /// <summary>
             /// 安全协议
             /// </summary>
+            [Description("安全协议")]
             public SecurityProtocol SecurityProtocol { get; set; } = SecurityProtocol.Plaintext;
             /// <summary>
             /// 新主题的分区数 默认-1
             /// </summary>
+            [Description("主题分区数")]
             public int NumPartitions { get; set; } = -1;
             /// <summary>
             /// 重写基类中的Equals方法

+ 4 - 1
src/YSAI.DAQ/YSAI.Kafka/KafkaBaseData.cs

@@ -1,6 +1,7 @@
 using Confluent.Kafka;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -12,10 +13,12 @@ namespace YSAI.Kafka
         /// <summary>
         /// 唯一标识符
         /// </summary>
-        public string? SN { get; set; } = Guid.NewGuid().ToString();    
+        [Description("唯一标识符")]
+        public string? SN { get; set; } = Guid.NewGuid().ToString();
         /// <summary>
         /// 服务器地址
         /// </summary>
+        [Description("服务器地址")]
         public string BootstrapServers { get; set; }
 
 

+ 4 - 1
src/YSAI.DAQ/YSAI.Kafka/KafkaConsumerData.cs

@@ -1,6 +1,7 @@
 using Confluent.Kafka;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -17,11 +18,13 @@ namespace YSAI.Kafka
             /// <summary>
             /// 组ID
             /// </summary>
+            [Description("组ID")]
             public string GroupId { get; set; }
-           
+
             /// <summary>
             /// 自动偏移复位
             /// </summary>
+            [Description("自动偏移复位")]
             public AutoOffsetReset AutoOffsetReset { get; set; } = AutoOffsetReset.Earliest;
             /// <summary>
             /// 重写基类中的Equals方法

+ 3 - 0
src/YSAI.DAQ/YSAI.Kafka/KafkaProducerData.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -16,10 +17,12 @@ namespace YSAI.Kafka
             /// <summary>
             /// 客户端ID
             /// </summary>
+            [Description("客户端ID")]
             public string ClientId { get; set; }
             /// <summary>
             /// 最多等待时间
             /// </summary>
+            [Description("等待时间")]
             public int WaitTime { get; set; } = 1000;
             /// <summary>
             /// 重写基类中的Equals方法

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 0 - 19
src/YSAI.DAQ/YSAI.Manage/Controllers/HomeController.cs

@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-
-namespace YSAI.Manage.Controllers
-{
-    [ApiController]
-    [Route("[controller]")]
-    public class HomeController : Controller
-    {
-        [HttpGet]
-        public string Go(string SN)
-        {
-            if (!string.IsNullOrWhiteSpace(SN))
-            {
-                return $"欢迎回家“{SN}”";
-            }
-            return "滚犊子";
-        }
-    }
-}

+ 140 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/libController.cs

@@ -0,0 +1,140 @@
+using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel;
+using System.Reflection.Metadata.Ecma335;
+using YSAI.Core.data;
+using YSAI.Core.@enum;
+using YSAI.Core.@interface.unify;
+using YSAI.DB;
+using YSAI.Kafka;
+using YSAI.Log;
+using YSAI.Modbus.client;
+using YSAI.Mqtt.client;
+using YSAI.Mqtt.service;
+using YSAI.Mqtt.service.websocket;
+using YSAI.Opc.da.client;
+using YSAI.Opc.da.http;
+using YSAI.Opc.ua.client;
+using YSAI.Opc.ua.service;
+using YSAI.RabbitMQ;
+using YSAI.S7.client;
+using YSAI.Unility;
+
+namespace YSAI.Manage.Controllers
+{
+    /// <summary>
+    /// 库文件信息
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class libController : Controller,IOr
+    {
+        /// <summary>
+        /// 获取库文件集合
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Description("获取库文件集合")]
+        public IActionResult array()
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{ClassName}.array").StartRecord();
+            return Ok(Break("array",true,RData: libArray,RType:ResultType.Json));
+        }
+        /// <summary>
+        /// 获取库文件实例参数
+        /// </summary>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Description("获取库文件实例参数")]
+        public IActionResult param(string name)
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{ClassName}.param").StartRecord();
+            switch (name)
+            {
+                case "DB":
+                   return Ok(Break("param",true,RData: ReflexTool.GetClassAllPropertyData<DBData.Basics>(),RType:ResultType.Json));
+                case "KafkaAdmin":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaAdminData.Basics>(), RType: ResultType.Json));
+                case "KafkaConsumer":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaConsumerData.Basics>(), RType: ResultType.Json));
+                case "KafkaProducer":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaProducerData.Basics>(), RType: ResultType.Json));
+                case "ModbusClient":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<ModbusClientData.Basics>(), RType: ResultType.Json));
+                case "MqttService":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttServiceData.Basics>(), RType: ResultType.Json));
+                case "MqttWebSocketService":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttWebSocketServiceData.Basics>(), RType: ResultType.Json));
+                case "MqttClient":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttClientData.Basics>(), RType: ResultType.Json));
+                case "OpcDaClient":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaClientData.Basics>(), RType: ResultType.Json));
+                case "OpcDaHttp":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaHttpData.Basics>(), RType: ResultType.Json));
+                case "OpcUaClient":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcUaClientData.Basics>(), RType: ResultType.Json));
+                case "OpcUaService":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcUaServiceData.Basics>(), RType: ResultType.Json));
+                case "RabbitMQConsumer":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
+                case "RabbitMQPublisher":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
+                case "S7Client":
+                    return Ok(Break("param", true, RData: ReflexTool.GetClassAllPropertyData<S7ClientData.Basics>(), RType: ResultType.Json));
+            }
+            return Ok(Break("param", false, "输入有误"));
+        }
+        /// <summary>
+        /// 库文件集合
+        /// </summary>
+        private string[] libArray = new string[]
+       {
+            "DB",
+            "KafkaAdmin",
+            "KafkaConsumer",
+            "KafkaProducer",
+            "ModbusClient",
+            "MqttClient",
+            "MqttService",
+            "MqttWebSocketService",
+            "OpcDaClient",
+            "OpcDaHttp",
+            "OpcUaClient",
+            "OpcUaService",
+            "RabbitMQConsumer",
+            "RabbitMQPublisher",
+            "S7Client"
+       };
+
+        public string LogHead => "[ lib 操作 ]";
+
+        public string ClassName => "lib";
+
+        [NonAction]
+        public Task<OperateResult> BreakAsync(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
+        {
+            return Task.Run(() =>
+            {
+                return Break(MethodName, State, Message, RData, RType);
+            });
+        }
+        [NonAction]
+        public OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.NULL)
+        {
+            //返回运行时间(毫秒)
+            double runTime = RunTimeTool.Instance($"{ClassName}.{MethodName}").StopRecord().milliseconds;
+            //消息数据组织
+            string message = $"{LogHead} ( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
+            //异常则输出日志
+            if (!State) { LogHelper.Error(message, $"{ClassName}.log"); }
+            //返回状态
+            return new OperateResult(State, message, runTime, RData, RType);
+        }
+
+        
+
+        
+    }
+}

+ 2 - 2
src/YSAI.DAQ/YSAI.Manage/Program.cs

@@ -1,3 +1,5 @@
+using YSAI.Core.@interface.unify;
+
 namespace YSAI.Manage
 {
     public class Program
@@ -12,7 +14,6 @@ namespace YSAI.Manage
             // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
             builder.Services.AddEndpointsApiExplorer();
             builder.Services.AddSwaggerGen();
-
             var app = builder.Build();
 
             // Configure the HTTP request pipeline.
@@ -21,7 +22,6 @@ namespace YSAI.Manage
                 app.UseSwagger();
                 app.UseSwaggerUI();
             }
-
             app.UseHttpsRedirection();
 
             app.UseAuthorization();

+ 8 - 0
src/YSAI.DAQ/YSAI.Manage/YSAI.Manage.csproj

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>
@@ -12,6 +13,13 @@
 
   <ItemGroup>
     <ProjectReference Include="..\YSAI.Core\YSAI.Core.csproj" />
+    <ProjectReference Include="..\YSAI.DB\YSAI.DB.csproj" />
+    <ProjectReference Include="..\YSAI.Kafka\YSAI.Kafka.csproj" />
+    <ProjectReference Include="..\YSAI.Modbus\YSAI.Modbus.csproj" />
+    <ProjectReference Include="..\YSAI.Mqtt\YSAI.Mqtt.csproj" />
+    <ProjectReference Include="..\YSAI.Opc\YSAI.Opc.csproj" />
+    <ProjectReference Include="..\YSAI.RabbitMQ\YSAI.RabbitMQ.csproj" />
+    <ProjectReference Include="..\YSAI.S7\YSAI.S7.csproj" />
   </ItemGroup>
 
 </Project>

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	<GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 19 - 0
src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientData.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.IO.Ports;
 using System.Linq;
 using System.Numerics;
@@ -69,14 +70,17 @@ namespace YSAI.Modbus.client
             /// <summary>
             /// IP
             /// </summary>
+            [Description("IP")]
             public string? Ip { get; set; } = "127.0.0.1";
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public int Port { get; set; } = 502;
             /// <summary>
             /// 连接超时时间
             /// </summary>
+            [Description("连接超时时间")]
             public int ConnectTimeOut { get; set; } = 5000;
 
             /// <summary>
@@ -118,10 +122,12 @@ namespace YSAI.Modbus.client
             /// <summary>
             /// IP
             /// </summary>
+            [Description("IP")]
             public string? Ip { get; set; } = "127.0.0.1";
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public int Port { get; set; } = 502;
 
             /// <summary>
@@ -162,22 +168,27 @@ namespace YSAI.Modbus.client
             /// <summary>
             /// 串口号
             /// </summary>
+            [Description("串口号")]
             public string? PortName { get; set; }
             /// <summary>
             /// 波特率
             /// </summary>
+            [Description("波特率")]
             public int BaudRate { get; set; } = 19200;
             /// <summary>
             /// 校验位
             /// </summary>
+            [Description("校验位")]
             public Parity ParityBit { get; set; } = Parity.Even;
             /// <summary>
             /// 数据位
             /// </summary>
+            [Description("数据位")]
             public int DataBit { get; set; } = 8;
             /// <summary>
             /// 停止位
             /// </summary>
+            [Description("停止位")]
             public StopBits StopBit { get; set; } = StopBits.One;
 
             /// <summary>
@@ -221,25 +232,33 @@ namespace YSAI.Modbus.client
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
             /// <summary>
             /// 寄存器地址
             /// </summary>
+            [Description("寄存器地址")]
             public int SlaveAddress { get; set; } = 1;
             /// <summary>
             /// 协议类型
             /// </summary>
+            [Description("协议类型")]
             public ProtocolType ProtocolType { get; set; } = ProtocolType.Tcp;
             /// <summary>
             /// 读取超时时间
             /// </summary>
+            [Description("读取超时时间")]
             public int ReadTimeOut { get; set; } = 2000;
             /// <summary>
             /// 写入超时时间
             /// </summary>
+            [Description("写入超时时间")]
             public int WriteTimeOut { get; set; } = 2000;
+            [Description("TCP参数")]
             public TcpParam? TcpParam { get; set; }
+            [Description("UDP参数")]
             public UdpParam? UdpParam { get; set; }
+            [Description("串口参数")]
             public SerialPortParam? SerialPortParam { get; set; }
 
             /// <summary>

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 8 - 0
src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientData.cs

@@ -4,6 +4,7 @@ using MQTTnet.Protocol;
 using Newtonsoft.Json.Bson;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -23,27 +24,33 @@ namespace YSAI.Mqtt.client
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
             /// <summary>
             /// IP地址
             /// </summary>
+            [Description("IP地址")]
             public string? ServerIPAddress { get; set; }
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public int ServerPort { get; set; }
             /// <summary>
             /// 登陆账号
             /// </summary>
+            [Description("登陆账号")]
             public string? ServerLoginID { get; set; }
             /// <summary>
             /// 登陆密码
             /// </summary>
+            [Description("登陆密码")]
             public string? ServerLoginPassword { get; set; }
             /// <summary>
             /// 客户端ID
             /// 不输入默认生成随机
             /// </summary>
+            [Description("客户端ID")]
             public string? ClientID { get; set; }
             /// <summary>
             /// QoS0 是最低级别,基本上等同于 Fire and Forget 模式,发送者发送完数据之后,不关心消息是否已经投递到了接收者那边。
@@ -52,6 +59,7 @@ namespace YSAI.Mqtt.client
             /// 
             /// 注意:QoS 级别越高,流程越复杂,系统资源消耗越大
             /// </summary>
+            [Description("QoS等级")]
             public MqttQualityOfServiceLevel QualityOfServiceLevel { get; set; }
 
             /// <summary>

+ 6 - 1
src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceData.cs

@@ -1,6 +1,7 @@
 using MQTTnet;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -20,20 +21,24 @@ namespace YSAI.Mqtt.service
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public string? Port { get; set; }
             /// <summary>
             /// 登陆账号
             /// </summary>
+            [Description("登陆账号")]
             public string? LoginID { get; set; }
             /// <summary>
             /// 登陆密码
             /// </summary>
+            [Description("登陆密码")]
             public string? LoginPassword { get; set; }
 
             /// <summary>
             /// 最大连接数
             /// </summary>
-            public int MaxNumber { get; set; }
+            [Description("最大连接数")]
+            public int MaxNumber { get; set; } = 10000;
 
             /// <summary>
             /// 重写基类中的Equals方法

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

@@ -5,6 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <PlatformTarget>AnyCPU</PlatformTarget>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 4 - 0
src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientData.cs

@@ -2,6 +2,7 @@
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -22,14 +23,17 @@ namespace YSAI.Opc.da.client
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
             /// <summary>
             /// 服务名
             /// </summary>
+            [Description("服务名")]
             public string? ServiceName { get; set; }
             /// <summary>
             /// 接口版本
             /// </summary>
+            [Description("接口版本")]
             public Specification SpecificationVer { get; set; }
 
             /// <summary>

+ 5 - 0
src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpData.cs

@@ -21,24 +21,29 @@ namespace YSAI.Opc.da.http
             /// <summary>
             /// 唯一标识
             /// </summary>
+            [Description("唯一标识")]
             public string? SN { get; set; }
             /// <summary>
             /// 服务IP
             /// </summary>
+            [Description("服务IP")]
             public string? ServerIP { get; set; }
 
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public string? Port { get; set; }
 
             /// <summary>
             /// 解密密钥
             /// </summary>
+            [Description("解密密钥")]
             public string? Key { get; set; }
             /// <summary>
             /// 请求类型
             /// </summary>
+            [Description("请求类型")]
             public RequestType RequestType { get; set; }
 
             /// <summary>

+ 9 - 0
src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientData.cs

@@ -2,6 +2,7 @@
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Security.Cryptography;
 using System.Text;
@@ -23,41 +24,49 @@ namespace YSAI.Opc.ua.client
             /// <summary>
             /// 用户
             /// </summary>
+            [Description("用户名")]
             public string? User { get; set; }
 
             /// <summary>
             /// 密码
             /// </summary>
+            [Description("密码")]
             public string? Password { get; set; }
 
             /// <summary>
             /// 证书路径
             /// </summary>
+            [Description("证书路径")]
             public string? Cer { get; set; }
             /// <summary>
             /// 密钥
             /// </summary>
+            [Description("密钥")]
             public string? SecreKey { get; set; }
 
             /// <summary>
             /// 服务地址
             /// </summary>
+            [Description("服务地址")]
             public string? ServerUrl { get; set; }
 
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
 
 
             /// <summary>
             /// 自定义的名称空间
             /// </summary>
+            [Description("自定义的名称空间")]
             public string? Name { get; set; }
 
             /// <summary>
             /// 取样时间间隔
             /// </summary>
+            [Description("取样时间间隔")]
             public int SamplingInterval { get; set; }
 
 

+ 4 - 0
src/YSAI.DAQ/YSAI.Opc/ua/service/OpcUaServiceData.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -19,15 +20,18 @@ namespace YSAI.Opc.ua.service
             /// <summary>
             /// 是否应该接受和抑制为证书报告的当前错误
             /// </summary>
+            [Description("是否应该接受和抑制为证书报告的当前错误")]
             public bool AutoAccept { get; set; }
             /// <summary>
             /// 用户
             /// </summary>
+            [Description("用户名")]
             public string? User { get; set; }
 
             /// <summary>
             /// 密码
             /// </summary>
+            [Description("密码")]
             public string? Password { get; set; }
 
 

+ 7 - 0
src/YSAI.DAQ/YSAI.RabbitMQ/RabbitMQData.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -19,26 +20,32 @@ namespace YSAI.RabbitMQ
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
             /// <summary>
             /// 交换机名称
             /// </summary>
+            [Description("交换机名称")]
             public string? ExChangeName { get; set; }
             /// <summary>
             /// 要连接的地址
             /// </summary>
+            [Description("连接地址")]
             public string? HostName { get; set; }
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public int Port { get; set; }
             /// <summary>
             /// 账号
             /// </summary>
+            [Description("账号")]
             public string? UserName { get; set; } = null;
             /// <summary>
             /// 密码
             /// </summary>
+            [Description("密码")]
             public string? Password { get; set; } = null;
 
             /// <summary>

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 0
src/YSAI.DAQ/YSAI.Redis/YSAI.Redis.csproj

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

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

@@ -4,6 +4,7 @@
     <TargetFramework>net6.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
+	  <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
   <ItemGroup>

+ 7 - 0
src/YSAI.DAQ/YSAI.S7/client/S7ClientData.cs

@@ -1,6 +1,7 @@
 using S7.Net;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -18,30 +19,36 @@ namespace YSAI.S7.client
             /// <summary>
             /// 唯一标识符
             /// </summary>
+            [Description("唯一标识符")]
             public string? SN { get; set; }
             /// <summary>
             /// ip地址
             /// </summary>
+            [Description("IP")]
             public string? Ip { get; set; }
             /// <summary>
             /// 端口
             /// </summary>
+            [Description("端口")]
             public int Port { get; set; }
             /// <summary>
             /// CPU类型
             /// </summary>
+            [Description("CPU类型")]
             public CpuType S7CpuType { get; set; }
             /// <summary>
             /// PLC的机架,
             /// 通常为0,
             /// 但检查Step7或TIA门户的硬件配置
             /// </summary>
+            [Description("PLC机架")]
             public int Rack { get; set; } = 0;
             /// <summary>
             /// PLC的CPU插槽,
             /// S7-300/S7-400为2,
             /// S7-1200/S7-1500为0
             /// </summary>
+            [Description("PLCCPU插槽")]
             public int Slot { get; set; } = 0;
             /// <summary>
             /// 重写Equals

+ 7 - 4
src/YSAI.DAQ/YSAI.TestConsole/Program.cs

@@ -1,8 +1,13 @@
-using System.Collections.Concurrent;
+using Google.Protobuf.WellKnownTypes;
+using System.Collections.Concurrent;
+using System.Drawing;
+using System.Reflection;
 using YSAI.Core.data;
+using YSAI.DB;
 using YSAI.Log;
 using YSAI.Opc.ua.client;
 using YSAI.Opc.ua.service;
+using YSAI.Unility;
 
 namespace YSAI.TestConsole
 {
@@ -10,8 +15,6 @@ namespace YSAI.TestConsole
     {
         static void Main(string[] args)
         {
-            
-
 
 
             while (true)
@@ -19,7 +22,7 @@ namespace YSAI.TestConsole
                 Console.ReadKey();
             }
         }
+        
 
-       
     }
 }

+ 0 - 15
src/YSAI.DAQ/YSAI.Unility/AnalysisTool.cs

@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace YSAI.Unility
-{
-    /// <summary>
-    /// 通用解析工具
-    /// </summary>
-    public class AnalysisTool
-    {
-    }
-}

+ 63 - 0
src/YSAI.DAQ/YSAI.Unility/EnumTool.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Dynamic;
 using System.Linq;
 using System.Reflection;
 using System.Text;
@@ -37,6 +38,68 @@ namespace YSAI.Unility
             }
             return list;
         }
+        /// <summary>
+        /// get all information of enum,include value,name and description
+        /// </summary>
+        /// <param name="enumName">the type of enumName</param>
+        /// <returns></returns>
+        public static List<dynamic> GetAllItems(this Type enumName)
+        {
+            List<dynamic> list = new List<dynamic>();
+            // get enum fileds
+            FieldInfo[] fields = enumName.GetFields();
+            foreach (FieldInfo field in fields)
+            {
+                if (!field.FieldType.IsEnum)
+                {
+                    continue;
+                }
+                // get enum value
+                int value = (int)enumName.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);
+                string text = field.Name;
+                string description = string.Empty;
+                object[] array = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
+                if (array.Length > 0)
+                {
+                    description = ((DescriptionAttribute)array[0]).Description;
+                }
+                else
+                {
+                    description = ""; //none description,set empty
+                }
+                //add to list
+                dynamic obj = new ExpandoObject();
+                obj.Value = value;
+                obj.Text = text;
+                obj.Description = description;
+                list.Add(obj);
+            }
+            return list;
+        }
+        /// <summary>
+        /// 将枚举转换为List,便于界面绑定
+        /// </summary>
+        /// <typeparam name="T">枚举类型</typeparam>
+        /// <returns>枚举转换后的List列表信息</returns>
+        public static List<EnumberEntity> EnumToList(Type @enum)
+        {
+            List<EnumberEntity> list = new List<EnumberEntity>();
+
+            foreach (var e in Enum.GetValues(@enum))
+            {
+                EnumberEntity m = new EnumberEntity();
+                object[] objArr = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
+                if (objArr != null && objArr.Length > 0)
+                {
+                    DescriptionAttribute da = objArr[0] as DescriptionAttribute;
+                    m.Description = da.Description;
+                }
+                m.EnumValue = Convert.ToInt32(e);
+                m.EnumName = e.ToString();
+                list.Add(m);
+            }
+            return list;
+        }
 
         /// <summary>
         /// 获取成员元数据的Description特性描述信息

+ 47 - 1
src/YSAI.DAQ/YSAI.Unility/ReflexTool.cs

@@ -138,6 +138,52 @@ namespace YSAI.Unility
             return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
         }
 
-
+        /// <summary>
+        /// 获取类中所有属性信息
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        public static List<LibInstanceParam> GetClassAllPropertyData<T>()
+        {
+            List<LibInstanceParam> libInstanceParams = new List<LibInstanceParam>();
+            //创建实体对象实例
+            T tac = Activator.CreateInstance<T>();
+            System.Type t = tac.GetType();//获得该类的Type
+            foreach (PropertyInfo pi in t.GetProperties())
+            {
+                LibInstanceParam libInstanceParam = new LibInstanceParam();
+                libInstanceParam.name = pi.Name;
+                libInstanceParam.describe = pi.GetDescription();
+                libInstanceParam.paramType = pi.PropertyType.Name.ToString();
+                if (pi.PropertyType.BaseType.Name.Equals("Enum"))
+                {
+                    libInstanceParam.paramType = "Enum";
+                    libInstanceParam.enumArray = pi.PropertyType.GetAllItems();
+                }
+                libInstanceParams.Add(libInstanceParam);
+            }
+            return libInstanceParams;
+        }
+        /// <summary>
+        /// 库文件实例参数
+        /// </summary>
+        public class LibInstanceParam
+        {
+            /// <summary>
+            /// 名称
+            /// </summary>
+            public string name { get; set; }
+            /// <summary>
+            /// 描述
+            /// </summary>
+            public string describe { get; set; }
+            /// <summary>
+            /// 参数类型
+            /// </summary>
+            public string paramType { get; set; }
+            /// <summary>
+            /// 枚举集合
+            /// </summary>
+            public object enumArray { get; set; }
+        }
     }
 }