lixun 2 lat temu
rodzic
commit
300b28daf3

+ 8 - 8
src/YSAI.DAQ/YSAI.Core/data/Address.cs

@@ -5,6 +5,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Xml.Linq;
+using YSAI.Core.@enum;
 
 namespace YSAI.Core.data
 {
@@ -28,20 +29,20 @@ namespace YSAI.Core.data
         /// <summary>
         /// 获取地址信息
         /// </summary>
-        /// <param name="Address">PLC地址</param>
+        /// <param name="AddressName">PLC地址</param>
         /// <param name="AddressAnotherName">地址别名</param>
         /// <returns></returns>
-        public AddressDetails? GetAddressInfo(string? Address = null, string? AddressAnotherName = null)
+        public AddressDetails? GetAddressInfo(string? AddressName = null, string? AddressAnotherName = null)
         {
-            if (Address != null && AddressAnotherName != null)  //地址别名都不为空
+            if (AddressName != null && AddressAnotherName != null)  //地址别名都不为空
             {
-                return AddressArray?.Find(c => c.AddressName.Equals(Address) && c.AddressAnotherName.Equals(AddressAnotherName));
+                return AddressArray?.Find(c => c.AddressName.Equals(AddressName) && c.AddressAnotherName.Equals(AddressAnotherName));
             }
-            else if (Address != null && AddressAnotherName == null) //地址不为空,别名为空
+            else if (AddressName != null && AddressAnotherName == null) //地址不为空,别名为空
             {
-                return AddressArray?.Find(c => c.AddressName.Equals(Address));
+                return AddressArray?.Find(c => c.AddressName.Equals(AddressName));
             }
-            else if (Address == null && AddressAnotherName != null)  //别名不为空,地址为空
+            else if (AddressName == null && AddressAnotherName != null)  //别名不为空,地址为空
             {
                 return AddressArray?.Find(c => c.AddressAnotherName.Equals(AddressAnotherName));
             }
@@ -50,7 +51,6 @@ namespace YSAI.Core.data
                 return null;
             }
         }
-
         /// <summary>
         /// 重写Equals
         /// </summary>

+ 26 - 0
src/YSAI.DAQ/YSAI.Core/data/AddressManage.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using YSAI.Core.@enum;
+
+namespace YSAI.Core.data
+{
+    /// <summary>
+    /// 地址管理,
+    /// 这些地址通过什么采集
+    /// </summary>
+    public class AddressManage : Address
+    {
+        /// <summary>
+        /// 数采类型
+        /// </summary>
+        public DaqType DaqType { get; set; }
+
+        /// <summary>
+        /// 指定数采类型的实例参数
+        /// </summary>
+        public object? InstanceParam { get; set; }
+    }
+}

+ 30 - 0
src/YSAI.DAQ/YSAI.Core/enum/Enums.cs

@@ -155,4 +155,34 @@ namespace YSAI.Core.@enum
         /// </summary>
         NULL
     }
+    /// <summary>
+    /// 数据采集类型
+    /// </summary>
+    public enum DaqType
+    {
+        [Description("数据库采集")]
+        DB,
+        [Description("Modbus采集")]
+        Modbus,
+        [Description("OpcUa采集")]
+        OpcUa,
+        [Description("OpcDa采集")]
+        OpcDa,
+        [Description("OpcDaHttp采集")]
+        OpcDaHttp,
+        [Description("S7采集")]
+        S7
+    }
+    /// <summary>
+    /// 转发类型
+    /// </summary>
+    public enum RelayType
+    {
+        [Description("Kafka转发")]
+        Kafka,
+        [Description("Mqtt转发")]
+        Mqtt,
+        [Description("RabbitMQ转发")]
+        RabbitMQ
+    }
 }

+ 94 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibInfoController.cs

@@ -0,0 +1,94 @@
+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
+{
+   
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class DaqLibInfoController : Controller
+    {
+        /// <summary>
+        /// 配置
+        /// </summary>
+        private readonly IConfiguration configuration;
+        /// <summary>
+        /// 统一操作结果
+        /// </summary>
+        private readonly Or operateResult;
+        /// <summary>
+        /// 采集库文件信息
+        /// </summary>
+        public DaqLibInfoController(IConfiguration configuration, Or operateResult)
+        {
+            this.configuration = configuration;
+            this.operateResult = operateResult;
+            operateResult.LogHead = "[ DaqLibInfo 操作 ]";
+            operateResult.ClassName = "DaqLibInfo";
+        }
+
+        /// <summary>
+        /// 获取数采库文件集合
+        /// </summary>
+        /// <returns>rData:库文件名集合</returns>
+        [HttpGet]
+        public IActionResult array()
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.array").StartRecord();
+            return Ok(operateResult.Break("array",true,RData:EnumTool.EnumToList<DaqType>(), RType:ResultType.Json));
+        }
+
+        /// <summary>
+        /// 获取数采库文件实例参数
+        /// </summary>
+        /// <param name="name">库文件名</param>
+        /// <returns>rData:库文件所需实例参数集合</returns>
+        [HttpGet]
+        public IActionResult param(string name)
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.param").StartRecord();
+
+            DaqType daqType = (DaqType)Enum.Parse(typeof(DaqType), name);
+
+            switch (daqType)
+            {
+                case DaqType.DB:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<DBData.Basics>(), RType: ResultType.Json));
+                case DaqType.Modbus:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<ModbusClientData.Basics>(), RType: ResultType.Json));
+                case DaqType.OpcUa:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcUaClientData.Basics>(), RType: ResultType.Json));
+                case DaqType.OpcDa:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaClientData.Basics>(), RType: ResultType.Json));
+                case DaqType.OpcDaHttp:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaHttpData.Basics>(), RType: ResultType.Json));
+                case DaqType.S7:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<S7ClientData.Basics>(), RType: ResultType.Json));
+                default:
+                    return Ok(operateResult.Break("param", false, "输入有误"));
+            }
+
+
+        }
+    }
+}

+ 88 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibOperateController.cs

@@ -0,0 +1,88 @@
+using Microsoft.AspNetCore.Mvc;
+namespace YSAI.Manage.Controllers
+{
+    /// <summary>
+    /// 库文件操作
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class DaqLibOperateController : Controller
+    {
+        /// <summary>
+        /// 配置
+        /// </summary>
+        private readonly IConfiguration configuration;
+        /// <summary>
+        /// 统一操作结果
+        /// </summary>
+        private readonly Or operateResult;
+        /// <summary>
+        /// 点位地址信息操作
+        /// </summary>
+        public DaqLibOperateController(IConfiguration configuration, Or operateResult)
+        {
+            this.configuration = configuration;
+            this.operateResult = operateResult;
+            operateResult.LogHead = "[ DaqLibOperate 操作 ]";
+            operateResult.ClassName = "DaqLibOperate";
+        }
+
+        /// <summary>
+        /// 上传配置,自动实例与订阅
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult UploadConfig()
+        {
+            return Ok();
+        }
+
+        /// <summary>
+        /// 打开
+        /// </summary>
+        /// <param name="name">库名称</param>
+        /// <param name="sn">库实例SN</param>
+        /// <returns>统一返回结果</returns>
+        [HttpPost]
+        public IActionResult On(string name, string sn)
+        {
+            return Ok();
+        }
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <param name="name">库名称</param>
+        /// <param name="sn">库实例SN</param>
+        /// <returns>统一返回结果</returns>
+        [HttpPost]
+        public IActionResult Off(string name, string sn)
+        {
+            return Ok();
+        }
+        /// <summary>
+        /// 读取
+        /// </summary>
+        /// <param name="name">库名称</param>
+        /// <param name="sn">库实例SN</param>
+        /// <param name="addressName">地址</param>
+        /// <returns>统一返回结果</returns>
+        [HttpPost]
+        public IActionResult Read(string name, string sn, string addressName)
+        {
+            return Ok();
+        }
+        /// <summary>
+        /// 写入
+        /// </summary>
+        /// <param name="name">库名称</param>
+        /// <param name="sn">库实例SN</param>
+        /// <param name="addressName">地址</param>
+        /// <param name="value">值</param>
+        /// <returns>统一返回结果</returns>
+        [HttpPost]
+        public IActionResult Write(string name, string sn, string addressName, string value)
+        {
+            return Ok();
+        }
+    }
+}

+ 0 - 108
src/YSAI.DAQ/YSAI.Manage/Controllers/LibInfoController.cs

@@ -1,108 +0,0 @@
-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 LibInfoController : Controller
-    {
-        /// <summary>
-        /// 配置
-        /// </summary>
-        private readonly IConfiguration configuration;
-        /// <summary>
-        /// 统一操作结果
-        /// </summary>
-        private readonly Or operateResult;
-
-        public LibInfoController(IConfiguration configuration, Or operateResult)
-        {
-            this.configuration = configuration;
-            this.operateResult = operateResult;
-            operateResult.LogHead = "[ LibInfo 操作 ]";
-            operateResult.ClassName = "LibInfo";
-        }
-
-        /// <summary>
-        /// 获取库文件集合
-        /// </summary>
-        /// <returns>rData:库文件名集合</returns>
-        [HttpGet]
-        [Description("获取库文件集合")]
-        public IActionResult array()
-        {
-            //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.array").StartRecord();
-            return Ok(operateResult.Break("array",true,RData: configuration.GetSection("Config:LibArray").Get<List<string>>(), RType:ResultType.Json));
-        }
-
-        /// <summary>
-        /// 获取库文件实例参数
-        /// </summary>
-        /// <param name="name">库文件名</param>
-        /// <returns>rData:库文件所需实例参数集合</returns>
-        [HttpGet]
-        [Description("获取库文件实例参数")]
-        public IActionResult param(string name)
-        {
-            //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.param").StartRecord();
-            switch (name)
-            {
-                case "DB":
-                   return Ok(operateResult.Break("param",true,RData: ReflexTool.GetClassAllPropertyData<DBData.Basics>(),RType:ResultType.Json));
-                case "KafkaAdmin":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaAdminData.Basics>(), RType: ResultType.Json));
-                case "KafkaConsumer":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaConsumerData.Basics>(), RType: ResultType.Json));
-                case "KafkaProducer":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaProducerData.Basics>(), RType: ResultType.Json));
-                case "ModbusClient":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<ModbusClientData.Basics>(), RType: ResultType.Json));
-                case "MqttService":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttServiceData.Basics>(), RType: ResultType.Json));
-                case "MqttWebSocketService":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttWebSocketServiceData.Basics>(), RType: ResultType.Json));
-                case "MqttClient":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttClientData.Basics>(), RType: ResultType.Json));
-                case "OpcDaClient":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaClientData.Basics>(), RType: ResultType.Json));
-                case "OpcDaHttp":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcDaHttpData.Basics>(), RType: ResultType.Json));
-                case "OpcUaClient":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcUaClientData.Basics>(), RType: ResultType.Json));
-                case "OpcUaService":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<OpcUaServiceData.Basics>(), RType: ResultType.Json));
-                case "RabbitMQConsumer":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
-                case "RabbitMQPublisher":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
-                case "S7Client":
-                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<S7ClientData.Basics>(), RType: ResultType.Json));
-            }
-            return Ok(operateResult.Break("param", false, "输入有误"));
-        }
-    }
-}

+ 86 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/RelayLibInfoController.cs

@@ -0,0 +1,86 @@
+using Microsoft.AspNetCore.Mvc;
+using System.ComponentModel;
+using YSAI.DB;
+using YSAI.Kafka;
+using YSAI.Modbus.client;
+using YSAI.Mqtt.client;
+using YSAI.Mqtt.service.websocket;
+using YSAI.Mqtt.service;
+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;
+using YSAI.Core.@enum;
+
+namespace YSAI.Manage.Controllers
+{
+    /// <summary>
+    /// 转发库文件信息
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public class RelayLibInfoController : Controller
+    {
+        /// <summary>
+        /// 配置
+        /// </summary>
+        private readonly IConfiguration configuration;
+        /// <summary>
+        /// 统一操作结果
+        /// </summary>
+        private readonly Or operateResult;
+        /// <summary>
+        /// 转发库文件信息
+        /// </summary>
+        public RelayLibInfoController(IConfiguration configuration, Or operateResult)
+        {
+            this.configuration = configuration;
+            this.operateResult = operateResult;
+            operateResult.LogHead = "[ RelayLibInfo 操作 ]";
+            operateResult.ClassName = "RelayLibInfo";
+        }
+
+        /// <summary>
+        /// 获取转发库文件集合
+        /// </summary>
+        /// <returns>rData:库文件名集合</returns>
+        [HttpGet]
+        public IActionResult array()
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.array").StartRecord();
+            return Ok(operateResult.Break("array", true, RData: EnumTool.EnumToList<RelayType>(), RType: ResultType.Json));
+        }
+
+        /// <summary>
+        /// 获取转发库文件实例参数
+        /// </summary>
+        /// <param name="name">库文件名</param>
+        /// <returns>rData:库文件所需实例参数集合</returns>
+        [HttpGet]
+        public IActionResult param(string name)
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.param").StartRecord();
+
+            RelayType daqType = (RelayType)Enum.Parse(typeof(RelayType), name);
+
+            switch (daqType)
+            {
+                case RelayType.Kafka:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<KafkaProducerData.Basics>(), RType: ResultType.Json));
+                case RelayType.Mqtt:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<MqttClientData.Basics>(), RType: ResultType.Json));
+                case RelayType.RabbitMQ:
+                    return Ok(operateResult.Break("param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
+                default:
+                    return Ok(operateResult.Break("param", false, "输入有误"));
+            }
+
+            
+        }
+    }
+}

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

@@ -22,4 +22,8 @@
     <ProjectReference Include="..\YSAI.S7\YSAI.S7.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Data\" />
+  </ItemGroup>
+
 </Project>

+ 1 - 4
src/YSAI.DAQ/YSAI.Manage/appsettings.json

@@ -5,8 +5,5 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
-  "AllowedHosts": "*",
-  "Config": {
-    "LibArray": [ "DB", "KafkaAdmin", "KafkaConsumer", "KafkaProducer", "ModbusClient", "MqttClient", "MqttService", "MqttWebSocketService", "OpcDaClient", "OpcDaHttp", "OpcUaClient", "OpcUaService", "RabbitMQConsumer", "RabbitMQPublisher", "S7Client" ]
-  }
+  "AllowedHosts": "*"
 }

+ 10 - 11
src/YSAI.DAQ/YSAI.Unility/EnumTool.cs

@@ -32,8 +32,8 @@ namespace YSAI.Unility
                     DescriptionAttribute da = objArr[0] as DescriptionAttribute;
                     m.Description = da.Description;
                 }
-                m.EnumValue = Convert.ToInt32(e);
-                m.EnumName = e.ToString();
+                m.Value = Convert.ToInt32(e);
+                m.Name = e.ToString();
                 list.Add(m);
             }
             return list;
@@ -94,8 +94,8 @@ namespace YSAI.Unility
                     DescriptionAttribute da = objArr[0] as DescriptionAttribute;
                     m.Description = da.Description;
                 }
-                m.EnumValue = Convert.ToInt32(e);
-                m.EnumName = e.ToString();
+                m.Value = Convert.ToInt32(e);
+                m.Name = e.ToString();
                 list.Add(m);
             }
             return list;
@@ -167,20 +167,19 @@ namespace YSAI.Unility
         /// </summary>
         public class EnumberEntity
         {
-            /// <summary>  
-            /// 枚举的描述  
-            /// </summary>  
-            public string Description { set; get; }
-
             /// <summary>  
             /// 枚举名称  
             /// </summary>  
-            public string EnumName { set; get; }
+            public string Name { set; get; }
 
             /// <summary>  
             /// 枚举对象的值  
             /// </summary>  
-            public int? EnumValue { set; get; }
+            public int Value { set; get; }
+            /// <summary>  
+            /// 枚举的描述  
+            /// </summary>  
+            public string Description { set; get; }
         }
 
         /// <summary>