lixun hace 2 años
padre
commit
e542481e88

+ 36 - 18
src/YSAI.DAQ/YSAI.Core/interface/only/IManage.cs

@@ -30,12 +30,14 @@ namespace YSAI.Core.@interface.only
         /// 设置配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
+        /// <param name="LType">库类型</param>
         /// <returns>统一出参</returns>
         OperateResult Setting(IFormFile? ConfigFile, LibType LType);
         /// <summary>
         /// 设置配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
+        /// <param name="LType">库类型</param>
         /// <returns>统一出参</returns>
         Task<OperateResult> SettingAsync(IFormFile? ConfigFile, LibType LType);
 
@@ -43,6 +45,7 @@ namespace YSAI.Core.@interface.only
         /// 修改配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
+        /// <param name="LType">库类型</param>
         /// <returns>统一出参</returns>
         OperateResult Update(IFormFile? ConfigFile, LibType LType);
 
@@ -50,6 +53,7 @@ namespace YSAI.Core.@interface.only
         /// 修改配置
         /// </summary>
         /// <param name="ConfigFile">配置文件</param>
+        /// <param name="LType">库类型</param>
         /// <returns>统一出参</returns>
         Task<OperateResult> UpdateAsync(IFormFile? ConfigFile, LibType LType);
     }
@@ -74,74 +78,88 @@ namespace YSAI.Core.@interface.only
         /// <summary>
         /// 打开采集
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
-        OperateResult On(DaqType? Name, string SN);
+        OperateResult On(DaqType? DType, string SN);
 
         /// <summary>
         /// 打开采集
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
-        Task<OperateResult> OnAsync(DaqType? Name, string SN);
+        Task<OperateResult> OnAsync(DaqType? DType, string SN);
 
         /// <summary>
         /// 关闭采集
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
-        OperateResult Off(DaqType? Name, string SN);
+        OperateResult Off(DaqType? DType, string SN);
 
         /// <summary>
         /// 关闭采集
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
-        Task<OperateResult> OffAsync(DaqType? Name, string SN);
+        Task<OperateResult> OffAsync(DaqType? DType, string SN);
 
         /// <summary>
         /// 读取
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param> 
         /// <param name="AddressName">地址</param>
         /// <returns>统一返回结果</returns>
-        OperateResult Read(DaqType? Name, string SN, string AddressName);
+        OperateResult Read(DaqType? DType, string SN, string AddressName);
 
         /// <summary>
         /// 读取
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param> 
         /// <param name="AddressName">地址</param>
         /// <returns>统一返回结果</returns>
-        Task<OperateResult> ReadAsync(DaqType? Name, string SN, string AddressName);
+        Task<OperateResult> ReadAsync(DaqType? DType, string SN, string AddressName);
 
         /// <summary>
         /// 写入
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
-        /// <param name="DType">数据类型</param>
+        /// <param name="DaType">数据类型</param>
         /// <returns>统一返回结果</returns>
-        OperateResult Write(DaqType? Name, string SN, string AddressName, string Value, DataType DType);
+        OperateResult Write(DaqType? DType, string SN, string AddressName, string Value, DataType DaType);
 
         /// <summary>
         /// 写入
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="DType">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
-        /// <param name="DType">数据类型</param>
+        /// <param name="DaType">数据类型</param>
+        /// <returns>统一返回结果</returns>
+        Task<OperateResult> WriteAsync(DaqType? DType, string SN, string AddressName, string Value, DataType DaType);
+
+        /// <summary>
+        /// 获取初始化成功集合
+        /// </summary>
+        /// <param name="LType">库类型</param>
+        /// <returns>统一返回结果</returns>
+        OperateResult InitSucceedArray();
+
+        /// <summary>
+        /// 获取初始化成功集合
+        /// </summary>
+        /// <param name="LType">库类型</param>
         /// <returns>统一返回结果</returns>
-        Task<OperateResult> WriteAsync(DaqType? Name, string SN, string AddressName, string Value, DataType DType);
+        Task<OperateResult> InitSucceedArrayAsync();
     }
 
     /// <summary>

+ 34 - 37
src/YSAI.DAQ/YSAI.Manage.Core/ManageOperate.cs

@@ -43,22 +43,6 @@ namespace YSAI.Manage.Core
         /// 底层统一管理
         /// </summary>
         private ManageBaseOperate? baseOperate = null;
-        /// <summary>
-        /// 类型解析
-        /// </summary>
-        /// <param name="Name"></param>
-        /// <returns></returns>
-        public DaqType? TypeParse(string Name)
-        {
-            try
-            {
-                return (DaqType)Enum.Parse(typeof(DaqType), Name);
-            }
-            catch
-            {
-                return null;
-            }
-        }
 
         public IActionResult Sample(LibType LType)
         {
@@ -263,69 +247,82 @@ namespace YSAI.Manage.Core
             return Task.Run(() => Init());
         }
 
-        public OperateResult Off(DaqType? Name, string SN)
+        public OperateResult Off(DaqType? DType, string SN)
         {
             if (baseOperate == null)
             {
-                Depart("Off");
-                return Break("Off", false, "请先设置配置");
+                return Break(Depart("Off"), false, "请先设置配置,如配置存在,可直接初始化");
             }
-            return baseOperate.Off(Name, SN);
+            return baseOperate.Off(DType, SN);
         }
 
-        public Task<OperateResult> OffAsync(DaqType? Name, string SN)
+        public Task<OperateResult> OffAsync(DaqType? DType, string SN)
         {
-            return Task.Run(() => Off(Name, SN));
+            return Task.Run(() => Off(DType, SN));
         }
 
-        public OperateResult On(DaqType? Name, string SN)
+        public OperateResult On(DaqType? DType, string SN)
         {
             if (baseOperate == null)
             {
                 Depart("On");
-                return Break("On", false, "请先设置配置");
+                return Break("On", false, "请先设置配置,如配置存在,可直接初始化");
             }
-            return baseOperate.On(Name, SN);
+            return baseOperate.On(DType, SN);
         }
 
-        public Task<OperateResult> OnAsync(DaqType? Name, string SN)
+        public Task<OperateResult> OnAsync(DaqType? DType, string SN)
         {
-            return Task.Run(() => On(Name, SN));
+            return Task.Run(() => On(DType, SN));
         }
 
-        public OperateResult Read(DaqType? Name, string SN, string AddressName)
+        public OperateResult Read(DaqType? DType, string SN, string AddressName)
         {
             if (baseOperate == null)
             {
                 Depart("Read");
-                return Break("Read", false, "请先设置配置");
+                return Break("Read", false, "请先设置配置,如配置存在,可直接初始化");
             }
-            return baseOperate.Read(Name, SN, AddressName);
+            return baseOperate.Read(DType, SN, AddressName);
         }
 
-        public Task<OperateResult> ReadAsync(DaqType? Name, string SN, string AddressName)
+        public Task<OperateResult> ReadAsync(DaqType? DType, string SN, string AddressName)
         {
-            return Task.Run(() => Read(Name, SN, AddressName));
+            return Task.Run(() => Read(DType, SN, AddressName));
         }
 
-        public OperateResult Write(DaqType? Name, string SN, string AddressName, string Value,DataType DType)
+        public OperateResult Write(DaqType? DType, string SN, string AddressName, string Value,DataType DaType)
         {
             if (baseOperate == null)
             {
                 Depart("Write");
-                return Break("Write", false, "请先设置配置");
+                return Break("Write", false, "请先设置配置,如配置存在,可直接初始化");
             }
-            return baseOperate.Write(Name, SN, AddressName, Value, DType);
+            return baseOperate.Write(DType, SN, AddressName, Value, DaType);
         }
 
-        public Task<OperateResult> WriteAsync(DaqType? Name, string SN, string AddressName, string Value, DataType DType)
+        public Task<OperateResult> WriteAsync(DaqType? DType, string SN, string AddressName, string Value, DataType DaType)
         {
-            return Task.Run(() => Write(Name, SN, AddressName, Value, DType));
+            return Task.Run(() => Write(DType, SN, AddressName, Value, DaType));
         }
 
         public void Dispose()
         {
             baseOperate?.Dispose();
         }
+
+        public OperateResult InitSucceedArray()
+        {
+            if (baseOperate == null)
+            {
+                return Break(Depart("InitSucceedArray"), false, "请先设置配置,如配置存在,可直接初始化");
+            }
+            return baseOperate.InitSucceedArray();
+        }
+
+        public Task<OperateResult> InitSucceedArrayAsync()
+        {
+            return Task.Run(() => InitSucceedArray());
+        }
     }
 }

+ 16 - 1
src/YSAI.DAQ/YSAI.Manage.Core/base/ManageBaseData.cs

@@ -1,4 +1,5 @@
-using Newtonsoft.Json.Converters;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -6,6 +7,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using YSAI.Core.data;
+using YSAI.Core.@enum;
 using YSAI.DB;
 
 namespace YSAI.Manage.Core.@base
@@ -51,5 +53,18 @@ namespace YSAI.Manage.Core.@base
                 }
             }
         }
+
+        public class initSucceedArray
+        {
+            /// <summary>
+            /// 数采类型
+            /// </summary>
+            [JsonConverter(typeof(StringEnumConverter))]
+            public DaqType DType { get; set; }
+            /// <summary>
+            /// 实例的唯一标识
+            /// </summary>
+            public string? SN { get; set; }
+        }
     }
 }

+ 103 - 77
src/YSAI.DAQ/YSAI.Manage.Core/base/ManageBaseOperate.cs

@@ -21,6 +21,7 @@ using YSAI.Opc.da.http;
 using YSAI.Opc.ua.client;
 using YSAI.S7.client;
 using YSAI.Unility;
+using static YSAI.Manage.Core.@base.ManageBaseData;
 
 namespace YSAI.Manage.Core.@base
 {
@@ -470,32 +471,32 @@ namespace YSAI.Manage.Core.@base
         /// </summary>
         /// <typeparam name="V">数据类型</typeparam>
         /// <param name="data">数据</param>
-        /// <param name="Name">数采类型</param>
+        /// <param name="DType">数采类型</param>
         /// <param name="SN">实例SN</param>
         /// <returns></returns>
-        private OperateResult WriteHandler<V>(ConcurrentDictionary<string, V> data, DaqType? Name,string SN)
+        private OperateResult WriteHandler<V>(ConcurrentDictionary<string, V> data, DaqType? DType,string SN)
         {
-            switch (Name)
+            switch (DType)
             {
                 case DaqType.OpcUa:
                     operateResult = OpcUaDaqObjArray[SN].Write(data);
                     if (!operateResult.State)
                     {
-                        return Break("Write", false, $"[ {Name.ToString()} ] {operateResult.Message}");
+                        return Break("Write", false, $"[ {DType.ToString} ] {operateResult.Message}");
                     }
                     break;
                 case DaqType.OpcDa:
                     operateResult = OpcDaDaqObjArray[SN].Write(data);
                     if (!operateResult.State)
                     {
-                        return Break("Write", false, $"[ {Name.ToString()} ] {operateResult.Message}");
+                        return Break("Write", false, $"[ {DType.ToString} ] {operateResult.Message}");
                     }
                     break;
                 case DaqType.S7:
                     operateResult = S7DaqObjArray[SN].Write(data);
                     if (!operateResult.State)
                     {
-                        return Break("Write", false, $"[ {Name.ToString()} ] {operateResult.Message}");
+                        return Break("Write", false, $"[ {DType.ToString} ] {operateResult.Message}");
                     }
                     break;
             }
@@ -578,7 +579,7 @@ namespace YSAI.Manage.Core.@base
             return Task.Run(() => Init());
         }
 
-        public OperateResult On(DaqType? Name, string SN)
+        public OperateResult On(DaqType? DType, string SN)
         {
             Depart("On");
             try
@@ -586,24 +587,24 @@ namespace YSAI.Manage.Core.@base
                 if (InitState)
                 {
                     //每个库的状态识别ID
-                    string ID = $"{Name.ToString()}-{SN}";
+                    string ID = $"{DType.ToString()}-{SN}";
 
                     if (!OnState.ContainsKey(ID) || !OnState[ID])
                     {
-                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(Name) && c.SN.Equals(SN));
+                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(DType) && c.SN.Equals(SN));
 
                         if (addressManage == null)
                         {
-                            return Break("On", false, $"[ {Name.ToString()} ] 地址管理数据为空");
+                            return Break("On", false, $"[ {DType.ToString()} ] 地址管理数据为空");
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.DB:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.Modbus:
@@ -611,7 +612,7 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
 
                                 break;
@@ -619,33 +620,33 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!OpcUaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDa:
                                 //判断是否有此实例
                                 if (!OpcDaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDaHttp:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.S7:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.OpcUa:
                                 //OPCUA 自带订阅功能
@@ -661,7 +662,7 @@ namespace YSAI.Manage.Core.@base
                                 operateResult = OpcDaDaqObjArray[SN].UpdateGroupSubscribedState(SN, true);
                                 if (!operateResult.State)
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] {operateResult.Message}");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] {operateResult.Message}");
                                 }
                                 break;
                             case DaqType.DB:
@@ -674,12 +675,12 @@ namespace YSAI.Manage.Core.@base
                                     operateResult = SubscribeObjArray[SN].On();
                                     if (!operateResult.State)
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] {operateResult.Message}");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] {operateResult.Message}");
                                     }
                                 }
                                 else
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 订阅不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 订阅不存在");
                                 }
                                 break;
                         }
@@ -705,12 +706,12 @@ namespace YSAI.Manage.Core.@base
             }
         }
 
-        public Task<OperateResult> OnAsync(DaqType? Name, string SN)
+        public Task<OperateResult> OnAsync(DaqType? DType, string SN)
         {
-            return Task.Run(() => On(Name, SN));
+            return Task.Run(() => On(DType, SN));
         }
 
-        public OperateResult Off(DaqType? Name, string SN)
+        public OperateResult Off(DaqType? DType, string SN)
         {
             Depart("Off");
             try
@@ -718,62 +719,62 @@ namespace YSAI.Manage.Core.@base
                 if (InitState)
                 {
                     //每个库的状态识别ID
-                    string ID = $"{Name.ToString()}-{SN}";
+                    string ID = $"{DType.ToString()}-{SN}";
 
                     if (OnState.ContainsKey(ID) || OnState[ID])
                     {
                         if (!OffState.ContainsKey(ID) || !OffState[ID])
                         {
-                            switch (Name)
+                            switch (DType)
                             {
                                 case DaqType.DB:
                                     //判断是否有此实例
                                     if (!DBDaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                                 case DaqType.Modbus:
                                     //判断是否有此实例
                                     if (!ModbusDaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                                 case DaqType.OpcUa:
                                     //判断是否有此实例
                                     if (!OpcUaDaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                                 case DaqType.OpcDa:
                                     //判断是否有此实例
                                     if (!OpcDaDaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                                 case DaqType.OpcDaHttp:
                                     //判断是否有此实例
                                     if (!OpcDaHttpDaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                                 case DaqType.S7:
                                     //判断是否有此实例
                                     if (!S7DaqObjArray.ContainsKey(SN))
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                     }
                                     break;
                             }
 
-                            switch (Name)
+                            switch (DType)
                             {
                                 case DaqType.OpcUa:
-                                    operateResult = OpcUaDaqObjArray[SN].RemoveSubscribe(basics.AManages.FirstOrDefault(c => c.DType.Equals(Name) && c.SN.Equals(SN)).AddressArray);
+                                    operateResult = OpcUaDaqObjArray[SN].RemoveSubscribe(basics.AManages.FirstOrDefault(c => c.DType.Equals(DType) && c.SN.Equals(SN)).AddressArray);
                                     if (!operateResult.State)
                                     {
                                         return Break("Off", false, operateResult.Message);
@@ -796,12 +797,12 @@ namespace YSAI.Manage.Core.@base
                                         operateResult = SubscribeObjArray[SN].Off();
                                         if (!operateResult.State)
                                         {
-                                            return Break("Off", false, $"[ {Name.ToString} ] [ {SN} ] {operateResult.Message}");
+                                            return Break("Off", false, $"[ {DType.ToString} ] [ {SN} ] {operateResult.Message}");
                                         }
                                     }
                                     else
                                     {
-                                        return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 订阅不存在");
+                                        return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 订阅不存在");
                                     }
                                     break;
                             }
@@ -832,12 +833,12 @@ namespace YSAI.Manage.Core.@base
             }
         }
 
-        public Task<OperateResult> OffAsync(DaqType? Name, string SN)
+        public Task<OperateResult> OffAsync(DaqType? DType, string SN)
         {
-            return Task.Run(() => Off(Name, SN));
+            return Task.Run(() => Off(DType, SN));
         }
 
-        public OperateResult Read(DaqType? Name, string SN, string AddressName)
+        public OperateResult Read(DaqType? DType, string SN, string AddressName)
         {
             Depart("Read");
             try
@@ -845,28 +846,28 @@ namespace YSAI.Manage.Core.@base
                 if (InitState)
                 {
                     //每个库的状态识别ID
-                    string ID = $"{Name.ToString()}-{SN}";
+                    string ID = $"{DType.ToString()}-{SN}";
 
                     if (OnState.ContainsKey(ID) || OnState[ID])
                     {
-                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(Name) && c.SN.Equals(SN));
+                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(DType) && c.SN.Equals(SN));
                         if (addressManage == null)
                         {
-                            return Break("Read", false, $"[ {Name.ToString()} ] 地址管理数据为空");
+                            return Break("Read", false, $"[ {DType.ToString()} ] 地址管理数据为空");
                         }
                         AddressDetails? details = addressManage.AddressArray.FirstOrDefault(c => c.AddressName.Equals(AddressName));
                         if (details == null)
                         {
-                            return Break("Read", false, $"[ {Name.ToString()} ] 未查询到({AddressName})地址配置数据");
+                            return Break("Read", false, $"[ {DType.ToString()} ] 未查询到({AddressName})地址配置数据");
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.DB:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.Modbus:
@@ -874,7 +875,7 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
 
                                 break;
@@ -882,33 +883,33 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!OpcUaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDa:
                                 //判断是否有此实例
                                 if (!OpcDaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDaHttp:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.S7:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.DB:
                                 operateResult = DBDaqObjArray[SN].Read(new Address() { SN = addressManage.SN, CreationTime = addressManage.CreationTime, AddressArray = new List<AddressDetails>() { details } });
@@ -954,7 +955,7 @@ namespace YSAI.Manage.Core.@base
                                 break;
                         }
 
-                        return Break("Read", false, $"[ {Name.ToString()} ] [ {AddressName} ] {operateResult.Message}");
+                        return Break("Read", false, $"[ {DType.ToString()} ] [ {AddressName} ] {operateResult.Message}");
                     }
                     else
                     {
@@ -972,12 +973,12 @@ namespace YSAI.Manage.Core.@base
             }
         }
 
-        public Task<OperateResult> ReadAsync(DaqType? Name, string SN, string AddressName)
+        public Task<OperateResult> ReadAsync(DaqType? DType, string SN, string AddressName)
         {
-            return Task.Run(()=>Read(Name, SN, AddressName));
+            return Task.Run(()=>Read(DType, SN, AddressName));
         }
 
-        public OperateResult Write(DaqType? Name, string SN, string AddressName, string Value, DataType DType)
+        public OperateResult Write(DaqType? DType, string SN, string AddressName, string Value, DataType DaType)
         {
             Depart("Write");
             try
@@ -985,28 +986,28 @@ namespace YSAI.Manage.Core.@base
                 if (InitState)
                 {
                     //每个库的状态识别ID
-                    string ID = $"{Name.ToString()}-{SN}";
+                    string ID = $"{DType.ToString()}-{SN}";
 
                     if (OnState.ContainsKey(ID) || OnState[ID])
                     {
-                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(Name) && c.SN.Equals(SN));
+                        AddressManage? addressManage = basics.AManages.FirstOrDefault(c => c.DType.Equals(DType) && c.SN.Equals(SN));
                         if (addressManage == null)
                         {
-                            return Break("Write", false, $"[ {Name.ToString()} ] 地址管理数据为空");
+                            return Break("Write", false, $"[ {DType.ToString()} ] 地址管理数据为空");
                         }
                         AddressDetails? details = addressManage.AddressArray.FirstOrDefault(c => c.AddressName.Equals(AddressName));
                         if (details == null)
                         {
-                            return Break("Write", false, $"[ {Name.ToString()} ] 未查询到({AddressName})地址配置数据");
+                            return Break("Write", false, $"[ {DType.ToString()} ] 未查询到({AddressName})地址配置数据");
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.DB:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.Modbus:
@@ -1014,7 +1015,7 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
 
                                 break;
@@ -1022,42 +1023,42 @@ namespace YSAI.Manage.Core.@base
                                 //判断是否有此实例
                                 if (!OpcUaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDa:
                                 //判断是否有此实例
                                 if (!OpcDaDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.OpcDaHttp:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                             case DaqType.S7:
                                 //判断是否有此实例
                                 if (!DBDaqObjArray.ContainsKey(SN))
                                 {
-                                    return Break("On", false, $"[ {Name.ToString} ] [ {SN} ] 实例不存在");
+                                    return Break("On", false, $"[ {DType.ToString} ] [ {SN} ] 实例不存在");
                                 }
                                 break;
                         }
 
-                        switch (Name)
+                        switch (DType)
                         {
                             case DaqType.OpcDaHttp:
                             case DaqType.DB:
-                                return Break("Write", false, $"[ {Name.ToString()} ] 目前不支持写入功能");
+                                return Break("Write", false, $"[ {DType.ToString} ] 目前不支持写入功能");
                             case DaqType.Modbus:
                                 ConcurrentDictionary<ushort, object> pairs = new ConcurrentDictionary<ushort, object>();
                                 try
                                 {
-                                    switch (DType)
+                                    switch (DaType)
                                     {
                                         case DataType.String:
                                             pairs.TryAdd(int.Parse(AddressName).ToUshort(), Value);
@@ -1082,28 +1083,28 @@ namespace YSAI.Manage.Core.@base
                                 operateResult = ModbusDaqObjArray[SN].Write(pairs);
                                 if (!operateResult.State)
                                 {
-                                    return Break("Write", false, $"[ {Name.ToString()} ] {operateResult.Message}");
+                                    return Break("Write", false, $"[ {DType.ToString} ] {operateResult.Message}");
                                 }
                                 break;
                             default:
-                                switch (DType)
+                                switch (DaType)
                                 {
                                     case DataType.String:
                                         ConcurrentDictionary<string, string> str = new ConcurrentDictionary<string, string>();
                                         str.TryAdd(AddressName, Value);
-                                        return WriteHandler(str, Name, SN);
+                                        return WriteHandler(str, DType, SN);
                                     case DataType.Bool:
                                         ConcurrentDictionary<string, bool> bo = new ConcurrentDictionary<string, bool>();
                                         bo.TryAdd(AddressName, bool.Parse(Value));
-                                        return WriteHandler(bo, Name, SN);
+                                        return WriteHandler(bo, DType, SN);
                                     case DataType.Double:
                                         ConcurrentDictionary<string, double> dou = new ConcurrentDictionary<string, double>();
                                         dou.TryAdd(AddressName, double.Parse(Value));
-                                        return WriteHandler(dou, Name, SN);
+                                        return WriteHandler(dou, DType, SN);
                                     case DataType.Int:
                                         ConcurrentDictionary<string, int> ints = new ConcurrentDictionary<string, int>();
                                         ints.TryAdd(AddressName, int.Parse(Value));
-                                        return WriteHandler(ints, Name, SN);
+                                        return WriteHandler(ints, DType, SN);
                                     default:
                                         return Break("Write", false, "值类型错误");
                                 }
@@ -1127,9 +1128,9 @@ namespace YSAI.Manage.Core.@base
             }
         }
 
-        public Task<OperateResult> WriteAsync(DaqType? Name, string SN, string AddressName, string Value, DataType DType)
+        public Task<OperateResult> WriteAsync(DaqType? DType, string SN, string AddressName, string Value, DataType DaType)
         {
-            return Task.Run(()=> Write(Name,SN,AddressName,Value,DType));
+            return Task.Run(()=> Write(DType, SN,AddressName,Value,DaType));
         }
 
         public void Dispose()
@@ -1157,5 +1158,30 @@ namespace YSAI.Manage.Core.@base
             GC.SuppressFinalize(this);
             ThisObjList.Remove(this);
         }
+
+        public OperateResult InitSucceedArray()
+        {
+            Depart("InitSucceedArray");
+            try
+            {
+                List<initSucceedArray> array = new List<initSucceedArray>();
+                foreach (var item in DBDaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.DB, SN = item.Key }); }
+                foreach (var item in ModbusDaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.Modbus, SN = item.Key }); }
+                foreach (var item in OpcUaDaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.OpcUa, SN = item.Key }); }
+                foreach (var item in OpcDaDaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.OpcDa, SN = item.Key }); }
+                foreach (var item in OpcDaHttpDaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.OpcDaHttp, SN = item.Key }); }
+                foreach (var item in S7DaqObjArray) { array.Add(new initSucceedArray { DType = DaqType.S7, SN = item.Key }); }
+                return Break("InitSucceedArray", true, RData: array, RType: ResultType.Json);
+            }
+            catch (Exception ex)
+            {
+                return Break("InitSucceedArray", false, ex.Message);
+            }
+        }
+
+        public Task<OperateResult> InitSucceedArrayAsync()
+        {
+            return Task.Run(() => InitSucceedArray());
+        }
     }
 }

+ 32 - 56
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibOperateController.cs

@@ -57,6 +57,17 @@ namespace YSAI.Manage.Controllers
         {
             return manageOperate.Sample(LibType.Daq);
         }
+
+        /// <summary>
+        /// 获取初始化成功的集合
+        /// </summary>
+        /// <returns>统一出参</returns>
+        [HttpGet]
+        public OperateResult InitSucceedArray()
+        {
+            return manageOperate.InitSucceedArray();
+        }
+
         /// <summary>
         /// 设置配置
         /// </summary>
@@ -89,126 +100,91 @@ namespace YSAI.Manage.Controllers
         /// <summary>
         /// 打开
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult On(string Name, string SN)
+        public OperateResult On(DaqType Dtype, string SN)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误",new Random().NextDouble());
-            }
-            return manageOperate.On(daqType, SN);
+            return manageOperate.On(Dtype, SN);
         }
         /// <summary>
         /// 关闭
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult Off(string Name, string SN)
+        public OperateResult Off(DaqType Dtype, string SN)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Off(daqType, SN);
+            return manageOperate.Off(Dtype, SN);
         }
         /// <summary>
         /// 读取
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param> 
         /// <param name="AddressName">地址</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult Read(string Name, string SN, string AddressName)
+        public OperateResult Read(DaqType Dtype, string SN, string AddressName)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Read(daqType, SN, AddressName);
+            return manageOperate.Read(Dtype, SN, AddressName);
         }
         /// <summary>
         /// 写入浮点型数据
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult WriteDouble(string Name, string SN, string AddressName, string Value)
+        public OperateResult WriteDouble(DaqType Dtype, string SN, string AddressName, string Value)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Write(daqType, SN, AddressName, Value, YSAI.Core.@enum.DataType.Double);
+            return manageOperate.Write(Dtype, SN, AddressName, Value, YSAI.Core.@enum.DataType.Double);
         }
 
         /// <summary>
         /// 写入整数型数据
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult WriteInt(string Name, string SN, string AddressName, string Value)
+        public OperateResult WriteInt(DaqType Dtype, string SN, string AddressName, string Value)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Write(daqType, SN, AddressName, Value, YSAI.Core.@enum.DataType.Int);
+            return manageOperate.Write(Dtype, SN, AddressName, Value, YSAI.Core.@enum.DataType.Int);
         }
 
         /// <summary>
         /// 写入字符串类型数据
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult WriteString(string Name, string SN, string AddressName, string Value)
+        public OperateResult WriteString(DaqType Dtype, string SN, string AddressName, string Value)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Write(daqType, SN, AddressName, Value, YSAI.Core.@enum.DataType.String);
+            return manageOperate.Write(Dtype, SN, AddressName, Value, YSAI.Core.@enum.DataType.String);
         }
 
         /// <summary>
         /// 写入布尔类型数据
         /// </summary>
-        /// <param name="Name">库名称</param>
+        /// <param name="Dtype">库名称</param>
         /// <param name="SN">库实例SN</param>
         /// <param name="AddressName">地址</param>
         /// <param name="Value">值</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public OperateResult WriteBool(string Name, string SN, string AddressName, string Value)
+        public OperateResult WriteBool(DaqType Dtype, string SN, string AddressName, string Value)
         {
-            DaqType? daqType = manageOperate.TypeParse(Name);
-            if (daqType == null)
-            {
-                return new OperateResult(false, "输入有误", new Random().NextDouble());
-            }
-            return manageOperate.Write(daqType, SN, AddressName, Value, YSAI.Core.@enum.DataType.Bool);
+            return manageOperate.Write(Dtype, SN, AddressName, Value, YSAI.Core.@enum.DataType.Bool);
         }
     }
 }

+ 2 - 0
src/YSAI.DAQ/YSAI.Manage/Controllers/RelayLibOperateController.cs

@@ -30,6 +30,7 @@ namespace YSAI.Manage.Controllers
             this.manageOperate = manageOperate;
         }
 
+       
 
         /// <summary>
         /// 示例
@@ -40,6 +41,7 @@ namespace YSAI.Manage.Controllers
         {
             return manageOperate.Sample(LibType.Relay);
         }
+
         /// <summary>
         /// 设置配置
         /// </summary>

+ 5 - 0
src/YSAI.DAQ/YSAI.Manage/Program.cs

@@ -1,6 +1,7 @@
 
 using Microsoft.Extensions.Configuration.Json;
 using System.Reflection;
+using System.Text.Json.Serialization;
 using YSAI.Core.@interface.unify;
 using YSAI.Manage.Controllers;
 using YSAI.Manage.Core;
@@ -24,6 +25,10 @@ namespace YSAI.Manage
             {
                 //无驼峰,名称大小不变
                 options.JsonSerializerOptions.PropertyNamingPolicy = null;
+            }).AddJsonOptions(options =>
+            {
+                //让枚举以字符串形式展现
+                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
             });
 
             builder.Services.AddEndpointsApiExplorer();