lixun 2 лет назад
Родитель
Сommit
04ef04a2fe
36 измененных файлов с 27950 добавлено и 345 удалено
  1. 5 1
      src/YSAI.DAQ/YSAI.Core/data/AddressDetails.cs
  2. 5 3
      src/YSAI.DAQ/YSAI.Core/data/AddressManage.cs
  3. 4 1
      src/YSAI.DAQ/YSAI.Core/data/AddressParse.cs
  4. 0 8
      src/YSAI.DAQ/YSAI.Core/data/AddressRelay.cs
  5. 2 2
      src/YSAI.DAQ/YSAI.Core/data/Dispose.cs
  6. 4 1
      src/YSAI.DAQ/YSAI.Core/data/OperateResult.cs
  7. 111 111
      src/YSAI.DAQ/YSAI.Core/reflection/Reflection.json
  8. 5 2
      src/YSAI.DAQ/YSAI.Core/script/ScriptData.cs
  9. 7 1
      src/YSAI.DAQ/YSAI.Core/serialport/SerialPortData.cs
  10. 4 1
      src/YSAI.DAQ/YSAI.Core/virtualAddress/VirtualAddressData.cs
  11. 4 1
      src/YSAI.DAQ/YSAI.DB/DBData.cs
  12. 3 0
      src/YSAI.DAQ/YSAI.Kafka/KafkaAdminData.cs
  13. 3 0
      src/YSAI.DAQ/YSAI.Kafka/KafkaConsumerData.cs
  14. 7 0
      src/YSAI.DAQ/YSAI.Manage.Core/Class1.cs
  15. 9 0
      src/YSAI.DAQ/YSAI.Manage.Core/YSAI.Manage.Core.csproj
  16. 14 14
      src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibInfoController.cs
  17. 135 20
      src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibOperateController.cs
  18. 11 21
      src/YSAI.DAQ/YSAI.Manage/Controllers/RelayLibInfoController.cs
  19. 14 7
      src/YSAI.DAQ/YSAI.Manage/Program.cs
  20. 1 1
      src/YSAI.DAQ/YSAI.Manage/Properties/launchSettings.json
  21. 27542 0
      src/YSAI.DAQ/YSAI.Manage/Sample.json
  22. 4 4
      src/YSAI.DAQ/YSAI.Manage/YSAI.Manage.csproj
  23. 6 1
      src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientData.cs
  24. 4 1
      src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientData.cs
  25. 2 0
      src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceData.cs
  26. 2 0
      src/YSAI.DAQ/YSAI.Mqtt/service/websocket/MqttWebSocketServiceData.cs
  27. 4 1
      src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientData.cs
  28. 4 1
      src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpData.cs
  29. 6 4
      src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientData.cs
  30. 2 2
      src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientOperate.cs
  31. 2 2
      src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientReadController.cs
  32. 4 1
      src/YSAI.DAQ/YSAI.S7/client/S7ClientData.cs
  33. 1 2
      src/YSAI.DAQ/YSAI.Test/TestAll.cs
  34. 3 129
      src/YSAI.DAQ/YSAI.TestConsole/Program.cs
  35. 6 0
      src/YSAI.DAQ/YSAI.TestConsole/YSAI.TestConsole.csproj
  36. 10 2
      src/YSAI.DAQ/YSAI.Unility/FileTool.cs

+ 5 - 1
src/YSAI.DAQ/YSAI.Core/data/AddressDetails.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
@@ -55,10 +57,12 @@ namespace YSAI.Core.data
         /// <summary>
         /// 数据类型
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public DataType AddressDataType { get; set; } = DataType.String;
         /// <summary>
         /// 地址类型,默认实际地址
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public AddressType AddressType { get; set; } = AddressType.Reality;
         /// <summary>
         /// 重写Equals

+ 5 - 3
src/YSAI.DAQ/YSAI.Core/data/AddressManage.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -8,14 +10,14 @@ using YSAI.Core.@enum;
 namespace YSAI.Core.data
 {
     /// <summary>
-    /// 地址管理,
-    /// 这些地址通过什么采集
+    /// 地址管理
     /// </summary>
     public class AddressManage : Address
     {
         /// <summary>
         /// 数采类型
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public DaqType DaqType { get; set; }
 
         /// <summary>

+ 4 - 1
src/YSAI.DAQ/YSAI.Core/data/AddressParse.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -19,6 +21,7 @@ namespace YSAI.Core.data
         /// <summary>
         /// 解析类型
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public ParseType ParseType { get; set; }
 
         /// <summary>

+ 0 - 8
src/YSAI.DAQ/YSAI.Core/data/AddressRelay.cs

@@ -65,10 +65,6 @@ namespace YSAI.Core.data
             /// 键
             /// </summary>
             public string Key { get; set; }
-            /// <summary>
-            /// 值
-            /// </summary>
-            public string Value { get; set; }
 
             /// <summary>
             /// 通过反射得到的转发方法
@@ -85,10 +81,6 @@ namespace YSAI.Core.data
             /// </summary>
             public string MessageHead { get; set; }
             /// <summary>
-            /// 消息内容
-            /// </summary>
-            public string MessageContent { get; set; }
-            /// <summary>
             /// 通道类型
             /// direct  //用于AMQP直接交换的交换类型。
             /// fanout  //用于AMQP扇出交换的交换类型。

+ 2 - 2
src/YSAI.DAQ/YSAI.Core/data/Dispose.cs

@@ -157,7 +157,7 @@ namespace YSAI.Core.data
                     //RabbitMQ转发
                     if (addressDetails.RabbitMQRelay != null)
                     {
-                        OperateResult? operateResult = reflectionOperate.ExecuteMethod(addressDetails.RabbitMQRelay.ReflectionSN, new object[] { addressDetails.RabbitMQRelay.MessageHead, value, addressDetails.RabbitMQRelay.MessageContent, addressDetails.RabbitMQRelay.Type, addressDetails.RabbitMQRelay.Durable, addressDetails.RabbitMQRelay.Exclusive, addressDetails.RabbitMQRelay.AutoDelete }) as OperateResult;
+                        OperateResult? operateResult = reflectionOperate.ExecuteMethod(addressDetails.RabbitMQRelay.ReflectionSN, new object[] { addressDetails.RabbitMQRelay.MessageHead, value, addressDetails.RabbitMQRelay.Type, addressDetails.RabbitMQRelay.Durable, addressDetails.RabbitMQRelay.Exclusive, addressDetails.RabbitMQRelay.AutoDelete }) as OperateResult;
                         if (operateResult.State)
                         {
                             LogHelper.Info($"[ {addressDetails.AddressName} ][ {addressDetails.RabbitMQRelay.MessageHead} ]转发状态:{operateResult.State}", logName);
@@ -172,7 +172,7 @@ namespace YSAI.Core.data
                     //Kafka转发
                     if (addressDetails.KafkaRelay != null)
                     {
-                        OperateResult? operateResult = reflectionOperate.ExecuteMethod(addressDetails.KafkaRelay.ReflectionSN, new object[] { addressDetails.KafkaRelay.Topic, value, addressDetails.KafkaRelay.Key, addressDetails.KafkaRelay.Value }) as OperateResult;
+                        OperateResult? operateResult = reflectionOperate.ExecuteMethod(addressDetails.KafkaRelay.ReflectionSN, new object[] { addressDetails.KafkaRelay.Topic, addressDetails.KafkaRelay.Key, value }) as OperateResult;
                         if (operateResult.State)
                         {
                             LogHelper.Info($"[ {addressDetails.AddressName} ][ {addressDetails.KafkaRelay.Topic} ]转发状态:{operateResult.State}", logName);

+ 4 - 1
src/YSAI.DAQ/YSAI.Core/data/OperateResult.cs

@@ -1,4 +1,6 @@
-using System.Dynamic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System.Dynamic;
 using YSAI.Core.@enum;
 
 namespace YSAI.Core.data
@@ -43,6 +45,7 @@ namespace YSAI.Core.data
         /// <summary>
         /// 结果数据类型
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public ResultType RType { get; set; } = ResultType.NULL;
 
         /// <summary>

+ 111 - 111
src/YSAI.DAQ/YSAI.Core/reflection/Reflection.json

@@ -1,123 +1,123 @@
 {
-  "DllDatas": [
-    {
-      "DllPath": "YSAI.Mqtt.dll",
-      "IsAbsolutePath": false,
-      "NamespaceDatas": [
+    "DllDatas": [
         {
-          "Namespace": "YSAI.Mqtt.client",
-          "ClassDatas": [
-            {
-              "SN": "YSAI.Mqtt.MqttClientOperate[Instance]",
-              "ClassName": "MqttClientOperate",
-              "ConstructorParam": [
+            "DllPath": "YSAI.Mqtt.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
                 {
-                  "SN": "YSAI",
-                  "ServerIPAddress": "127.0.0.1",
-                  "ServerPort": 11819,
-                  "ServerLoginID": "ysai",
-                  "ServerLoginPassword": "ysai",
-                  "ClientID": null,
-                  "QualityOfServiceLevel": 0
+                    "Namespace": "YSAI.Mqtt.client",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.Mqtt.MqttClientOperate[Instance]",
+                            "ClassName": "MqttClientOperate",
+                            "ConstructorParam": [
+                                {
+                                    "SN": "YSAI",
+                                    "ServerIPAddress": "127.0.0.1",
+                                    "ServerPort": 11819,
+                                    "ServerLoginID": "ysai",
+                                    "ServerLoginPassword": "ysai",
+                                    "ClientID": null,
+                                    "QualityOfServiceLevel": "AtMostOnce"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[Init]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "Init",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[On]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "On",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[PublishSubscribe]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "PublishSubscribe",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
                 }
-              ],
-              "MethodDatas": [
-                {
-                  "SN": "[Init]",
-                  "WhetherExecute": true,
-                  "MethodName": "Init",
-                  "MethodParam": null
-                },
-                {
-                  "SN": "[On]",
-                  "WhetherExecute": true,
-                  "MethodName": "On",
-                  "MethodParam": null
-                },
-                {
-                  "SN": "[PublishSubscribe]",
-                  "WhetherExecute": false,
-                  "MethodName": "PublishSubscribe",
-                  "MethodParam": null
-                }
-              ],
-              "EventDatas": null
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "DllPath": "YSAI.Kafka.dll",
-      "IsAbsolutePath": false,
-      "NamespaceDatas": [
+            ]
+        },
         {
-          "Namespace": "YSAI.Kafka",
-          "ClassDatas": [
-            {
-              "SN": "YSAI.Kafka.KafkaProducerOperate[Instance]",
-              "ClassName": "KafkaProducerOperate",
-              "ConstructorParam": [
+            "DllPath": "YSAI.Kafka.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
                 {
-                  "ClientId": "ysai",
-                  "WaitTime": 1000,
-                  "SN": "YSAI",
-                  "BootstrapServers": "127.0.0.1:8083"
+                    "Namespace": "YSAI.Kafka",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.Kafka.KafkaProducerOperate[Instance]",
+                            "ClassName": "KafkaProducerOperate",
+                            "ConstructorParam": [
+                                {
+                                    "ClientId": "ysai",
+                                    "WaitTime": 1000,
+                                    "SN": "YSAI",
+                                    "BootstrapServers": "127.0.0.1:8083"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[Produce]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "Produce",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
                 }
-              ],
-              "MethodDatas": [
-                {
-                  "SN": "[Produce]",
-                  "WhetherExecute": false,
-                  "MethodName": "Produce",
-                  "MethodParam": null
-                }
-              ],
-              "EventDatas": null
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "DllPath": "YSAI.RabbitMQ.dll",
-      "IsAbsolutePath": false,
-      "NamespaceDatas": [
+            ]
+        },
         {
-          "Namespace": "YSAI.RabbitMQ",
-          "ClassDatas": [
-            {
-              "SN": "YSAI.RabbitMQ.RabbitMQPublisherOperate[Instance]",
-              "ClassName": "RabbitMQPublisherOperate",
-              "ConstructorParam": [
-                {
-                  "SN": "YSAI",
-                  "ExChangeName": "exYSAI",
-                  "HostName": "localhost",
-                  "Port": 4369,
-                  "UserName": "ysai",
-                  "Password": "ysai"
-                }
-              ],
-              "MethodDatas": [
-                {
-                  "SN": "[On]",
-                  "WhetherExecute": true,
-                  "MethodName": "On",
-                  "MethodParam": null
-                },
+            "DllPath": "YSAI.RabbitMQ.dll",
+            "IsAbsolutePath": false,
+            "NamespaceDatas": [
                 {
-                  "SN": "[Publish]",
-                  "WhetherExecute": false,
-                  "MethodName": "Publish",
-                  "MethodParam": null
+                    "Namespace": "YSAI.RabbitMQ",
+                    "ClassDatas": [
+                        {
+                            "SN": "YSAI.RabbitMQ.RabbitMQPublisherOperate[Instance]",
+                            "ClassName": "RabbitMQPublisherOperate",
+                            "ConstructorParam": [
+                                {
+                                    "SN": "YSAI",
+                                    "ExChangeName": "exYSAI",
+                                    "HostName": "localhost",
+                                    "Port": 4369,
+                                    "UserName": "ysai",
+                                    "Password": "ysai"
+                                }
+                            ],
+                            "MethodDatas": [
+                                {
+                                    "SN": "[On]",
+                                    "WhetherExecute": true,
+                                    "MethodName": "On",
+                                    "MethodParam": null
+                                },
+                                {
+                                    "SN": "[Publish]",
+                                    "WhetherExecute": false,
+                                    "MethodName": "Publish",
+                                    "MethodParam": null
+                                }
+                            ],
+                            "EventDatas": null
+                        }
+                    ]
                 }
-              ],
-              "EventDatas": null
-            }
-          ]
+            ]
         }
-      ]
-    }
-  ]
+    ]
 }

+ 5 - 2
src/YSAI.DAQ/YSAI.Core/script/ScriptData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -19,7 +21,8 @@ namespace YSAI.Core.script
             /// <summary>
             /// 脚本类型 
             /// </summary>
-            public ScriptType ScriptType { get; set; }  
+            [JsonConverter(typeof(StringEnumConverter))]
+            public ScriptType ScriptType { get; set; } = ScriptType.JavaScript;
             /// <summary>
             /// 脚本代码或路径
             /// </summary>

+ 7 - 1
src/YSAI.DAQ/YSAI.Core/serialport/SerialPortData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.IO.Ports;
 using System.Linq;
@@ -36,6 +38,7 @@ namespace YSAI.Core.serialport
             /// <summary>
             /// 停止位
             /// </summary>
+            [JsonConverter(typeof(StringEnumConverter))]
             public StopBits StopBit { get; set; }
 
             /// <summary>
@@ -59,6 +62,7 @@ namespace YSAI.Core.serialport
             /// <summary>
             /// 数据效验类型
             /// </summary>
+            [JsonConverter(typeof(StringEnumConverter))]
             public _CheckType CheckType { get; set; }
             /// <summary>
             /// 数据校验类型枚举
@@ -88,6 +92,7 @@ namespace YSAI.Core.serialport
             /// <summary>
             /// 发送数据类型
             /// </summary>
+            [JsonConverter(typeof(StringEnumConverter))]
             public _SendDataType SendDataType { get; set; }
             /// <summary>
             /// 发送数据类型枚举
@@ -134,6 +139,7 @@ namespace YSAI.Core.serialport
             /// <summary>
             /// 在那一个无返回的函数中出现的
             /// </summary>
+            [JsonConverter(typeof(StringEnumConverter))]
             public Steps Step { get; set; }
             /// <summary>
             /// 时间

+ 4 - 1
src/YSAI.DAQ/YSAI.Core/virtualAddress/VirtualAddressData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -26,6 +28,7 @@ namespace YSAI.Core.virtualAddress
         /// <summary>
         /// 数据类型
         /// </summary>
+        [JsonConverter(typeof(StringEnumConverter))]
         public DataType DataType { get; set; }
 
         /// <summary>

+ 4 - 1
src/YSAI.DAQ/YSAI.DB/DBData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
@@ -23,6 +25,7 @@ namespace YSAI.DB
             /// 数据库类型
             /// </summary>
             [Description("数据库类型")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public DBType DBType { get; set; } = DBType.SqlServer;
         }
         /// <summary>

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

@@ -1,4 +1,6 @@
 using Confluent.Kafka;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -19,6 +21,7 @@ namespace YSAI.Kafka
             /// 安全协议
             /// </summary>
             [Description("安全协议")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public SecurityProtocol SecurityProtocol { get; set; } = SecurityProtocol.Plaintext;
             /// <summary>
             /// 新主题的分区数 默认-1

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

@@ -1,4 +1,6 @@
 using Confluent.Kafka;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -25,6 +27,7 @@ namespace YSAI.Kafka
             /// 自动偏移复位
             /// </summary>
             [Description("自动偏移复位")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public AutoOffsetReset AutoOffsetReset { get; set; } = AutoOffsetReset.Earliest;
             /// <summary>
             /// 重写基类中的Equals方法

+ 7 - 0
src/YSAI.DAQ/YSAI.Manage.Core/Class1.cs

@@ -0,0 +1,7 @@
+namespace YSAI.Manage.Core
+{
+    public class Class1
+    {
+
+    }
+}

+ 9 - 0
src/YSAI.DAQ/YSAI.Manage.Core/YSAI.Manage.Core.csproj

@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>

+ 14 - 14
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibInfoController.cs

@@ -50,42 +50,42 @@ namespace YSAI.Manage.Controllers
         /// </summary>
         /// <returns>rData:库文件名集合</returns>
         [HttpGet]
-        public IActionResult array()
+        public IActionResult Array()
         {
             //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.array").StartRecord();
-            return Ok(operateResult.Break("array",true,RData:EnumTool.EnumToList<DaqType>(), RType:ResultType.Json));
+            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>
+        /// <param name="Name">库文件名</param>
         /// <returns>rData:库文件所需实例参数集合</returns>
         [HttpGet]
-        public IActionResult param(string name)
+        public IActionResult Param(string Name)
         {
             //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.param").StartRecord();
+            RunTimeTool.Instance($"{operateResult.ClassName}.Param").StartRecord();
 
-            DaqType daqType = (DaqType)Enum.Parse(typeof(DaqType), name);
+            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));
+                    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));
+                    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));
+                    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));
+                    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));
+                    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));
+                    return Ok(operateResult.Break("Param", true, RData: ReflexTool.GetClassAllPropertyData<S7ClientData.Basics>(), RType: ResultType.Json));
                 default:
-                    return Ok(operateResult.Break("param", false, "输入有误"));
+                    return Ok(operateResult.Break("Param", false, "输入有误"));
             }
 
 

+ 135 - 20
src/YSAI.DAQ/YSAI.Manage/Controllers/DaqLibOperateController.cs

@@ -1,4 +1,12 @@
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Drawing;
+using System.Text;
+using YSAI.Core.data;
+using YSAI.Opc.ua.client;
+using YSAI.Unility;
+using static System.Net.Mime.MediaTypeNames;
+
 namespace YSAI.Manage.Controllers
 {
     /// <summary>
@@ -16,6 +24,12 @@ namespace YSAI.Manage.Controllers
         /// 统一操作结果
         /// </summary>
         private readonly Or operateResult;
+
+        /// <summary>
+        /// 配置路径
+        /// </summary>
+        private readonly string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config//AMConfig.json");
+
         /// <summary>
         /// 点位地址信息操作
         /// </summary>
@@ -27,60 +41,161 @@ namespace YSAI.Manage.Controllers
             operateResult.ClassName = "DaqLibOperate";
         }
 
+
+
         /// <summary>
-        /// 上传配置,自动实例与订阅
+        /// 配置内容示例
         /// </summary>
-        /// <returns></returns>
+        /// <returns>统一返回结果</returns>
+        [HttpGet]
+        public IActionResult Sample()
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.Sample").StartRecord();
+            Address address = JsonTool.StringToJsonEntity<Address>(FileTool.FileToString("Sample.json"));
+            AddressManage addressManage = new AddressManage();
+            addressManage.SN = address.SN;
+            addressManage.AddressArray = address.AddressArray;
+            addressManage.CreationTime = DateTime.Now;
+            addressManage.DaqType = Core.@enum.DaqType.OpcUa;
+            addressManage.InstanceParam = new OpcUaClientData.Basics() { Name = $"YSAI-OpcUa", UserName = "123", Password = "123", ServerUrl = "opc.tcp://127.0.0.1:4840", SamplingInterval = 100 };
+            return File(System.Text.Encoding.Default.GetBytes(new List<AddressManage> { addressManage, addressManage, addressManage, addressManage, addressManage, addressManage }.ToJson().JsonFormatting()), "application/octet-stream");
+        }
+
+        /// <summary>
+        /// 上传配置
+        /// </summary>
+        /// <param name="ConfigFile">配置文件</param>
+        /// <returns>统一返回结果</returns>
         [HttpPost]
-        public IActionResult UploadConfig()
+        public async Task<IActionResult> Setting(IFormFile? ConfigFile)
         {
-            return Ok();
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.Setting").StartRecord();
+            try
+            {
+                if (ConfigFile == null || ConfigFile.Length == 0)
+                {
+                    return Ok(operateResult.Break("Setting", false, "请选择要上传的文件"));
+                }
+                if (!System.IO.File.Exists(configPath))
+                {
+                    //判断文件夹是否存在,不存在则创建
+                    FileTool.GetPathFolderPath(configPath, true);
+
+                    using (var stream = System.IO.File.Create(configPath))
+                    {
+                        await ConfigFile.CopyToAsync(stream);
+                    }
+
+                    return Ok(operateResult.Break("Setting", true));
+                }
+                else
+                {
+                    return Ok(operateResult.Break("Setting", false, "配置文件已存在,请执行修改配置接口"));
+                }
+            }
+            catch (Exception ex)
+            {
+                return Ok(operateResult.Break("Setting", false, $"设置配置异常:{ex.Message}"));
+            }
+        }
+
+        /// <summary>
+        /// 修改配置,将重新初始化库操作函数
+        /// </summary>
+        /// <param name="ConfigFile">配置文件</param>
+        /// <returns>统一返回结果</returns>
+        [HttpPost]
+        public async Task<IActionResult> Update(IFormFile? ConfigFile)
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.Update").StartRecord();
+            try
+            {
+                if (ConfigFile == null || ConfigFile.Length == 0)
+                {
+                    return Ok(operateResult.Break("Update", false, "请选择要上传的文件"));
+                }
+                //判断文件夹是否存在,不存在则创建
+                FileTool.GetPathFolderPath(configPath,true);
+                using (var stream = System.IO.File.Create(configPath))
+                {
+                    await ConfigFile.CopyToAsync(stream);
+                }
+                return Ok(operateResult.Break("Update", true));
+            }
+            catch (Exception ex)
+            {
+                return Ok(operateResult.Break("Update", false, $"修改配置异常:{ex.Message}"));
+            }
         }
 
+        /// <summary>
+        /// 通过上传的配置进行初始化
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Init()
+        {
+            //开始记录运行时间
+            RunTimeTool.Instance($"{operateResult.ClassName}.Init").StartRecord();
+            try
+            {
+               
+
+                return Ok(operateResult.Break("Init", true));
+            }
+            catch (Exception ex)
+            {
+                return Ok(operateResult.Break("Init", false, $"初始化异常:{ex.Message}"));
+            }
+        }
+
+
         /// <summary>
         /// 打开
         /// </summary>
-        /// <param name="name">库名称</param>
-        /// <param name="sn">库实例SN</param>
+        /// <param name="Name">库名称</param>
+        /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public IActionResult On(string name, string sn)
+        public IActionResult On(string Name, string SN)
         {
             return Ok();
         }
         /// <summary>
         /// 关闭
         /// </summary>
-        /// <param name="name">库名称</param>
-        /// <param name="sn">库实例SN</param>
+        /// <param name="Name">库名称</param>
+        /// <param name="SN">库实例SN</param>
         /// <returns>统一返回结果</returns>
         [HttpPost]
-        public IActionResult Off(string name, string sn)
+        public IActionResult Off(string Name, string SN)
         {
             return Ok();
         }
         /// <summary>
         /// 读取
         /// </summary>
-        /// <param name="name">库名称</param>
-        /// <param name="sn">库实例SN</param>
-        /// <param name="addressName">地址</param>
+        /// <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)
+        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>
+        /// <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)
+        public IActionResult Write(string Name, string SN, string AddressName, string Value)
         {
             return Ok();
         }

+ 11 - 21
src/YSAI.DAQ/YSAI.Manage/Controllers/RelayLibInfoController.cs

@@ -1,17 +1,7 @@
 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;
 
@@ -48,36 +38,36 @@ namespace YSAI.Manage.Controllers
         /// </summary>
         /// <returns>rData:库文件名集合</returns>
         [HttpGet]
-        public IActionResult array()
+        public IActionResult Array()
         {
             //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.array").StartRecord();
-            return Ok(operateResult.Break("array", true, RData: EnumTool.EnumToList<RelayType>(), RType: ResultType.Json));
+            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>
+        /// <param name="Name">库文件名</param>
         /// <returns>rData:库文件所需实例参数集合</returns>
         [HttpGet]
-        public IActionResult param(string name)
+        public IActionResult Param(string Name)
         {
             //开始记录运行时间
-            RunTimeTool.Instance($"{operateResult.ClassName}.param").StartRecord();
+            RunTimeTool.Instance($"{operateResult.ClassName}.Param").StartRecord();
 
-            RelayType daqType = (RelayType)Enum.Parse(typeof(RelayType), name);
+            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));
+                    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));
+                    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));
+                    return Ok(operateResult.Break("Param", true, RData: ReflexTool.GetClassAllPropertyData<RabbitMQData.Basics>(), RType: ResultType.Json));
                 default:
-                    return Ok(operateResult.Break("param", false, "输入有误"));
+                    return Ok(operateResult.Break("Param", false, "输入有误"));
             }
 
             

+ 14 - 7
src/YSAI.DAQ/YSAI.Manage/Program.cs

@@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration.Json;
 using System.Reflection;
 using YSAI.Core.@interface.unify;
 using YSAI.Manage.Controllers;
+using YSAI.Opc.ua.service.core;
 
 namespace YSAI.Manage
 {
@@ -15,10 +16,16 @@ namespace YSAI.Manage
             builder.Services.AddSingleton<Or>();
 
             // Add services to the container.
-            builder.Services.AddControllers();
+            builder.Services.AddControllers().AddJsonOptions(options =>
+            {
+                //ÎÞÍÕ·å,Ãû³Æ´óС²»±ä
+                options.JsonSerializerOptions.PropertyNamingPolicy = null;
+            });
+
             // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
             builder.Services.AddEndpointsApiExplorer();
-            builder.Services.AddSwaggerGen((o) => {
+            builder.Services.AddSwaggerGen((o) =>
+            {
                 var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.XML";
                 var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                 o.IncludeXmlComments(xmlPath);
@@ -26,11 +33,11 @@ namespace YSAI.Manage
             var app = builder.Build();
 
             // Configure the HTTP request pipeline.
-            if (app.Environment.IsDevelopment())
-            {
-                app.UseSwagger();
-                app.UseSwaggerUI();
-            }
+            //if (app.Environment.IsDevelopment())
+            //{
+            app.UseSwagger();
+            app.UseSwaggerUI();
+            //}
             app.UseHttpsRedirection();
 
             app.UseAuthorization();

+ 1 - 1
src/YSAI.DAQ/YSAI.Manage/Properties/launchSettings.json

@@ -14,7 +14,7 @@
       "dotnetRunMessages": true,
       "launchBrowser": true,
       "launchUrl": "swagger",
-      "applicationUrl": "https://192.168.2.38:7205;http://192.168.2.38:5237",
+      "applicationUrl": "https://127.0.0.1:1899;http://127.0.0.1:1900",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
       }

Разница между файлами не показана из-за своего большого размера
+ 27542 - 0
src/YSAI.DAQ/YSAI.Manage/Sample.json


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

@@ -7,6 +7,10 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
   </PropertyGroup>
 
+  <ItemGroup>
+    <None Remove="Controllers\DaqLibOperateController.cs~RF139cf15.TMP" />
+  </ItemGroup>
+
   <ItemGroup>
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
   </ItemGroup>
@@ -22,8 +26,4 @@
     <ProjectReference Include="..\YSAI.S7\YSAI.S7.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Data\" />
-  </ItemGroup>
-
 </Project>

+ 6 - 1
src/YSAI.DAQ/YSAI.Modbus/client/ModbusClientData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.IO.Ports;
@@ -179,6 +181,7 @@ namespace YSAI.Modbus.client
             /// 校验位
             /// </summary>
             [Description("校验位")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public Parity ParityBit { get; set; } = Parity.Even;
             /// <summary>
             /// 数据位
@@ -189,6 +192,7 @@ namespace YSAI.Modbus.client
             /// 停止位
             /// </summary>
             [Description("停止位")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public StopBits StopBit { get; set; } = StopBits.One;
 
             /// <summary>
@@ -243,6 +247,7 @@ namespace YSAI.Modbus.client
             /// 协议类型
             /// </summary>
             [Description("协议类型")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public ProtocolType ProtocolType { get; set; } = ProtocolType.Tcp;
             /// <summary>
             /// 读取超时时间

+ 4 - 1
src/YSAI.DAQ/YSAI.Mqtt/client/MqttClientData.cs

@@ -1,7 +1,9 @@
 using MQTTnet;
 using MQTTnet.Client;
 using MQTTnet.Protocol;
+using Newtonsoft.Json;
 using Newtonsoft.Json.Bson;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -60,7 +62,8 @@ namespace YSAI.Mqtt.client
             /// 注意:QoS 级别越高,流程越复杂,系统资源消耗越大
             /// </summary>
             [Description("QoS等级")]
-            public MqttQualityOfServiceLevel QualityOfServiceLevel { get; set; }
+            [JsonConverter(typeof(StringEnumConverter))]
+            public MqttQualityOfServiceLevel QualityOfServiceLevel { get; set; } = MqttQualityOfServiceLevel.AtMostOnce;
 
             /// <summary>
             /// 重写基类中的Equals方法

+ 2 - 0
src/YSAI.DAQ/YSAI.Mqtt/service/MqttServiceData.cs

@@ -1,4 +1,6 @@
 using MQTTnet;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;

+ 2 - 0
src/YSAI.DAQ/YSAI.Mqtt/service/websocket/MqttWebSocketServiceData.cs

@@ -1,4 +1,6 @@
 using MQTTnet;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.Linq;

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

@@ -1,4 +1,6 @@
-using OpcDaNetApi;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using OpcDaNetApi;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -34,6 +36,7 @@ namespace YSAI.Opc.da.client
             /// 接口版本
             /// </summary>
             [Description("接口版本")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public Specification SpecificationVer { get; set; }
 
             /// <summary>

+ 4 - 1
src/YSAI.DAQ/YSAI.Opc/da/http/OpcDaHttpData.cs

@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
@@ -44,6 +46,7 @@ namespace YSAI.Opc.da.http
             /// 请求类型
             /// </summary>
             [Description("请求类型")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public RequestType RequestType { get; set; }
 
             /// <summary>

+ 6 - 4
src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientData.cs

@@ -1,4 +1,6 @@
-using Opc.Ua.Client;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Opc.Ua.Client;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -22,10 +24,10 @@ namespace YSAI.Opc.ua.client
         public class Basics
         {
             /// <summary>
-            /// 用户
+            /// 用户
             /// </summary>
             [Description("用户名")]
-            public string? User { get; set; }
+            public string? UserName { get; set; }
 
             /// <summary>
             /// 密码
@@ -88,7 +90,7 @@ namespace YSAI.Opc.ua.client
                 }
                 else
                 {
-                    if (User == Obj.User &&
+                    if (UserName == Obj.UserName &&
                     Password == Obj.Password &&
                     ServerUrl == Obj.ServerUrl &&
                     Name == Obj.Name &&

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

@@ -1044,9 +1044,9 @@ namespace YSAI.Opc.ua.client
                         X509Certificate2 certificate = new X509Certificate2(opcUaData.Cer, opcUaData.SecreKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
                         UserIdentity = new UserIdentity(certificate);
                     }
-                    else if (!opcUaData.User.IsEmpty() && !opcUaData.Password.IsEmpty())//设置账户密码
+                    else if (!opcUaData.UserName.IsEmpty() && !opcUaData.Password.IsEmpty())//设置账户密码
                     {
-                        UserIdentity = new UserIdentity(opcUaData.User, opcUaData.Password);
+                        UserIdentity = new UserIdentity(opcUaData.UserName, opcUaData.Password);
                     }
                     //通过调用CreateSession服务创建与服务器的新通信会话
                     clientSession = Session.Create(AC, endpoint, false, false, AC.ApplicationName, 60000, UserIdentity, null).Result;

+ 2 - 2
src/YSAI.DAQ/YSAI.Opc/ua/client/OpcUaClientReadController.cs

@@ -60,7 +60,7 @@ namespace YSAI.Opc.ua.client
                 {
                     //添加数据
                     Data.TryAdd(
-                       OpcUaClientOperate.Instance(new OpcUaClientData.Basics() { Name = ServerBasics.Name, Password = ServerBasics.Password, User = ServerBasics.User, ServerUrl = ServerBasics.ServerUrl, SamplingInterval = ServerBasics.SamplingInterval, Cer = ServerBasics.Cer, SN = i.ToString(), SecreKey = ServerBasics.SecreKey }),
+                       OpcUaClientOperate.Instance(new OpcUaClientData.Basics() { Name = ServerBasics.Name, Password = ServerBasics.Password, UserName = ServerBasics.UserName, ServerUrl = ServerBasics.ServerUrl, SamplingInterval = ServerBasics.SamplingInterval, Cer = ServerBasics.Cer, SN = i.ToString(), SecreKey = ServerBasics.SecreKey }),
                        NodesSplit.ElementAt(i).Value);
                 }
                 return Data;
@@ -85,7 +85,7 @@ namespace YSAI.Opc.ua.client
                 {
                     //添加数据
                     Data.AddOrUpdate(
-                       OpcUaClientOperate.Instance(new OpcUaClientData.Basics() { Name = ServerBasics.Name, Password = ServerBasics.Password, User = ServerBasics.User, ServerUrl = ServerBasics.ServerUrl, SamplingInterval = ServerBasics.SamplingInterval, Cer = ServerBasics.Cer, SN = i.ToString(), SecreKey = ServerBasics.SecreKey }),
+                       OpcUaClientOperate.Instance(new OpcUaClientData.Basics() { Name = ServerBasics.Name, Password = ServerBasics.Password, UserName = ServerBasics.UserName, ServerUrl = ServerBasics.ServerUrl, SamplingInterval = ServerBasics.SamplingInterval, Cer = ServerBasics.Cer, SN = i.ToString(), SecreKey = ServerBasics.SecreKey }),
                        (NodesSplit.ElementAt(i).Value, SubscriptionNodesSplit.ElementAt(i).Value),
                        (k, v) => (NodesSplit.ElementAt(i).Value, SubscriptionNodesSplit.ElementAt(i).Value));
                 }

+ 4 - 1
src/YSAI.DAQ/YSAI.S7/client/S7ClientData.cs

@@ -1,4 +1,6 @@
-using S7.Net;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using S7.Net;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -35,6 +37,7 @@ namespace YSAI.S7.client
             /// CPU类型
             /// </summary>
             [Description("CPU类型")]
+            [JsonConverter(typeof(StringEnumConverter))]
             public CpuType S7CpuType { get; set; }
             /// <summary>
             /// PLC的机架,

+ 1 - 2
src/YSAI.DAQ/YSAI.Test/TestAll.cs

@@ -25,7 +25,6 @@ namespace YSAI.Test
         [TestMethod]
         public void 反射与MQTT组合使用()
         {
-
             //创建配置
             Basics basics = new Basics()
             {
@@ -342,7 +341,7 @@ namespace YSAI.Test
                 using (OpcUaClientOperate opcUaClientOperate = OpcUaClientOperate.Instance(new OpcUaClientData.Basics()
                 {
                     Name = "test",
-                    User = "test",
+                    UserName = "test",
                     Password = "test",
                     ServerUrl = opc,
                     SN = Guid.NewGuid().ToString()

+ 3 - 129
src/YSAI.DAQ/YSAI.TestConsole/Program.cs

@@ -2,6 +2,7 @@
 using System.Collections.Concurrent;
 using System.Drawing;
 using System.Reflection;
+using System.Text.RegularExpressions;
 using YSAI.Core.data;
 using YSAI.Core.reflection;
 using YSAI.Core.subscription;
@@ -23,139 +24,12 @@ namespace YSAI.TestConsole
         static void Main(string[] args)
         {
 
-            //创建配置
-            Basics basics = new Basics()
-            {
-                DllDatas = new List<Basics.DllData>()
-                {
-                    new Basics.DllData()
-                    {
-                        DllPath="YSAI.Mqtt.dll",
-                        IsAbsolutePath=false,
-                        NamespaceDatas=new List<Basics.DllData.NamespaceData>()
-                        {
-                            new Basics.DllData.NamespaceData()
-                            {
-                                Namespace="YSAI.Mqtt.client",
-                                ClassDatas=new List<Basics.DllData.NamespaceData.ClassData>()
-                                {
-                                    new Basics.DllData.NamespaceData.ClassData()
-                                    {
-                                        ClassName="MqttClientOperate",
-                                        ConstructorParam=new object[]{ new MqttClientData.Basics { QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce, ServerIPAddress = "127.0.0.1", ServerLoginID = "ysai", ServerLoginPassword = "ysai", ServerPort = 11819, SN = "YSAI" } },
-                                        SN="YSAI.Mqtt.MqttClientOperate[Instance]",
-                                        MethodDatas=new List<Basics.DllData.NamespaceData.ClassData.MethodData>()
-                                        {
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="Init",
-                                                SN="[Init]",
-                                                WhetherExecute=true
-                                            },
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="On",
-                                                SN="[On]",
-                                                WhetherExecute=true
-                                            },
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="PublishSubscribe",
-                                                SN="[PublishSubscribe]"
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    },
-                    new Basics.DllData()
-                    {
-                        DllPath="YSAI.Kafka.dll",
-                        IsAbsolutePath=false,
-                        NamespaceDatas=new List<Basics.DllData.NamespaceData>()
-                        {
-                            new Basics.DllData.NamespaceData()
-                            {
-                                Namespace="YSAI.Kafka",
-                                ClassDatas=new List<Basics.DllData.NamespaceData.ClassData>()
-                                {
-                                    new Basics.DllData.NamespaceData.ClassData()
-                                    {
-                                        ClassName="KafkaProducerOperate",
-                                        ConstructorParam=new object[]{ new KafkaProducerData.Basics { BootstrapServers = "127.0.0.1:8083", ClientId = "ysai", SN = "YSAI" } },
-                                        SN="YSAI.Kafka.KafkaProducerOperate[Instance]",
-                                        MethodDatas=new List<Basics.DllData.NamespaceData.ClassData.MethodData>()
-                                        {
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="Produce",
-                                                SN="[Produce]"
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    },
-                    new Basics.DllData()
-                    {
-                        DllPath="YSAI.RabbitMQ.dll",
-                        IsAbsolutePath=false,
-                        NamespaceDatas=new List<Basics.DllData.NamespaceData>()
-                        {
-                            new Basics.DllData.NamespaceData()
-                            {
-                                Namespace="YSAI.RabbitMQ",
-                                ClassDatas=new List<Basics.DllData.NamespaceData.ClassData>()
-                                {
-                                    new Basics.DllData.NamespaceData.ClassData()
-                                    {
-                                        ClassName="RabbitMQPublisherOperate",
-                                        ConstructorParam=new object[]{ new RabbitMQData.Basics { ExChangeName = "exYSAI", HostName = "localhost", UserName = "ysai", Password = "ysai", Port = 4369, SN = "YSAI" } },
-                                        SN="YSAI.RabbitMQ.RabbitMQPublisherOperate[Instance]",
-                                        MethodDatas=new List<Basics.DllData.NamespaceData.ClassData.MethodData>()
-                                        {
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="On",
-                                                SN="[On]",
-                                                WhetherExecute=true
-                                            },
-                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
-                                            {
-                                                MethodName="Publish",
-                                                SN="[Publish]"
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            };
-
-
-            FileTool.StringToFile(ReflectionOperate.ConfigFile, JsonTool.JsonEntityToString(basics).JsonFormatting());
-
-
-            using (ReflectionOperate reflectOperate = ReflectionOperate.Instance())
-            {
-
-                OperateResult operateResult= reflectOperate.ExecuteMethod("YSAI.Kafka.KafkaProducerOperate[Instance][Produce]",new object[] {"牛逼",string.Empty,"卧槽" }) as OperateResult;
-            }
-
-
-
-
-
-                while (true)
+            while (true)
             {
                 Console.ReadKey();
             }
         }
-        
+
 
     }
 }

+ 6 - 0
src/YSAI.DAQ/YSAI.TestConsole/YSAI.TestConsole.csproj

@@ -19,4 +19,10 @@
     <ProjectReference Include="..\YSAI.S7\YSAI.S7.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Update="Sample.csv">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>

+ 10 - 2
src/YSAI.DAQ/YSAI.Unility/FileTool.cs

@@ -16,9 +16,10 @@ namespace YSAI.Unility
         /// <summary>
         /// 获取文件路径中的文件夹路径
         /// </summary>
-        /// <param name="Path"></param>
+        /// <param name="Path">路径</param>
+        /// <param name="Create">是否创建</param>
         /// <returns></returns>
-        public static string GetPathFolderPath(string Path)
+        public static string GetPathFolderPath(string Path,bool Create=true)
         {
            string[] paths= Path.Replace("//", "◆").Replace("\\", "◆").Replace("/", "◆").Split('◆');
             paths[paths.Length-1] = string.Empty;
@@ -39,6 +40,13 @@ namespace YSAI.Unility
                 }
                 index++;
             }
+            if (Create)
+            {
+                if (!Directory.Exists(folders.ToString()))
+                {
+                    Directory.CreateDirectory(folders.ToString());
+                }
+            }
             return folders.ToString();
         }
 //        /// <summary>