lixun пре 2 година
родитељ
комит
738bff9321

+ 3 - 3
src/YSAI.DAQ/YSAI.Core/data/AddressHandler.cs

@@ -37,7 +37,7 @@ namespace YSAI.Core.data
         public static AddressValue? Execute(AddressDetails addressDetails, string value)
         {
             //日志文件名称
-            string logName = "Handler.txt";
+            string logName = "Handler.log";
             try
             {
                 //原始值
@@ -91,7 +91,7 @@ namespace YSAI.Core.data
             if (addressDetails.AddressParseParam != null)
             {
                 //日志文件名称
-                string logName = "Parse.txt";
+                string logName = "Parse.log";
 
                 try
                 { 
@@ -136,7 +136,7 @@ namespace YSAI.Core.data
             return Task.Run(() =>
             {
                 //日志文件名称
-                string logName = "Relay.txt";
+                string logName = "Relay.log";
 
                 try
                 {

+ 2 - 2
src/YSAI.DAQ/YSAI.Core/enum/Enums.cs

@@ -95,12 +95,12 @@ namespace YSAI.Core.@enum
         [Description("实际地址")]
         Reality,
         /// <summary>
-        /// 虚拟地址
+        /// 虚拟地址(读取时执行数据转发)
         /// </summary>
         [Description("虚拟地址")]
         Virtual,
         /// <summary>
-        /// 虚拟动态地址
+        /// 虚拟动态地址(读取时执行数据转发)
         /// </summary>
         [Description("虚拟动态地址")]
         VirtualDynamic

+ 25 - 18
src/YSAI.DAQ/YSAI.Manage.Core/base/ManageBaseOperate.cs

@@ -5,6 +5,7 @@ using S7.Net.Types;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Data.Entity.Core.Metadata.Edm;
+using System.Diagnostics;
 using System.Reflection.Emit;
 using System.Text;
 using System.Xml.Linq;
@@ -146,7 +147,7 @@ namespace YSAI.Manage.Core.@base
                     {
                         case DaqType.DB:
 
-                            DBData.Basics? dBData = manage.InstanceParam as DBData.Basics;
+                            DBData.Basics? dBData = JsonTool.StringToJsonEntity<DBData.Basics>(manage.InstanceParam.ToString());
                             if (dBData != null)
                             {
                                 if (DBDaqObjArray.ContainsKey(dBData.SN))
@@ -187,7 +188,7 @@ namespace YSAI.Manage.Core.@base
                             break;
                         case DaqType.Modbus:
 
-                            ModbusClientData.Basics modbusClientData = manage.InstanceParam as ModbusClientData.Basics;
+                            ModbusClientData.Basics? modbusClientData = JsonTool.StringToJsonEntity<ModbusClientData.Basics>(manage.InstanceParam.ToString());
                             if (modbusClientData != null)
                             {
                                 if (ModbusDaqObjArray.ContainsKey(modbusClientData.SN))
@@ -238,7 +239,7 @@ namespace YSAI.Manage.Core.@base
                             break;
                         case DaqType.OpcUa:
 
-                            OpcUaClientData.Basics opcUaClientData = manage.InstanceParam as OpcUaClientData.Basics;
+                            OpcUaClientData.Basics? opcUaClientData = JsonTool.StringToJsonEntity<OpcUaClientData.Basics>(manage.InstanceParam.ToString());
                             if (opcUaClientData != null)
                             {
                                 if (OpcUaDaqObjArray.ContainsKey(opcUaClientData.SN))
@@ -288,7 +289,8 @@ namespace YSAI.Manage.Core.@base
                             break;
                         case DaqType.OpcDa:
 
-                            OpcDaClientData.Basics opcDaClientData = manage.InstanceParam as OpcDaClientData.Basics;
+                            OpcDaClientData.Basics? opcDaClientData = JsonTool.StringToJsonEntity<OpcDaClientData.Basics>(manage.InstanceParam.ToString());
+
                             if (opcDaClientData != null)
                             {
                                 if (OpcDaDaqObjArray.ContainsKey(opcDaClientData.SN))
@@ -309,18 +311,23 @@ namespace YSAI.Manage.Core.@base
                                         opcDaClientOperate.OnEvent -= delegate (object? sender, OpcDaClientData.EventParam e) { OpcDaClientOperate_OnEvent(sender, e, opcDaClientData.SN); };
                                         opcDaClientOperate.OnEvent += delegate (object? sender, OpcDaClientData.EventParam e) { OpcDaClientOperate_OnEvent(sender, e, opcDaClientData.SN); };
 
-
-                                        ConcurrentDictionary<string, List<AddressDetails>> sub = new ConcurrentDictionary<string, List<AddressDetails>>();
-                                        sub.TryAdd(opcDaClientData.SN, manage.AddressArray);
-                                        operateResult = opcDaClientOperate.AddNode(manage, opcDaClientData.SN, true);
-                                        if (!operateResult.State)
+                                        operateResult = opcDaClientOperate.AddGroup(opcDaClientData.SN);
+                                        if (operateResult.State)
                                         {
-                                            FaliMessage.Add($"[ {manage.DType.ToString()} ] [ {opcDaClientData.SN} ] {operateResult.Message}");
+                                            operateResult = opcDaClientOperate.AddNode(manage, opcDaClientData.SN, true);
+                                            if (!operateResult.State)
+                                            {
+                                                FaliMessage.Add($"[ {manage.DType.ToString()} ] [ {opcDaClientData.SN} ] {operateResult.Message}");
+                                            }
+                                            else
+                                            {
+                                                //把这个实例添加到集合中
+                                                OpcDaDaqObjArray.AddOrUpdate(opcDaClientData.SN, opcDaClientOperate, (k, v) => opcDaClientOperate);
+                                            }
                                         }
                                         else
                                         {
-                                            //把这个实例添加到集合中
-                                            OpcDaDaqObjArray.AddOrUpdate(opcDaClientData.SN, opcDaClientOperate, (k, v) => opcDaClientOperate);
+                                            FaliMessage.Add($"[ {manage.DType.ToString()} ] [ {opcDaClientData.SN} ] {operateResult.Message}");
                                         }
                                     }
                                     else
@@ -337,7 +344,7 @@ namespace YSAI.Manage.Core.@base
                             break;
                         case DaqType.OpcDaHttp:
 
-                            OpcDaHttpData.Basics opcDaHttpData = manage.InstanceParam as OpcDaHttpData.Basics;
+                            OpcDaHttpData.Basics? opcDaHttpData = JsonTool.StringToJsonEntity<OpcDaHttpData.Basics>(manage.InstanceParam.ToString());
                             if (opcDaHttpData != null)
                             {
                                 if (OpcDaHttpDaqObjArray.ContainsKey(opcDaHttpData.SN))
@@ -378,7 +385,7 @@ namespace YSAI.Manage.Core.@base
                             break;
                         case DaqType.S7:
 
-                            S7ClientData.Basics s7ClientData = manage.InstanceParam as S7ClientData.Basics;
+                            S7ClientData.Basics? s7ClientData = JsonTool.StringToJsonEntity<S7ClientData.Basics>(manage.InstanceParam.ToString());
                             if (s7ClientData != null)
                             {
                                 if (S7DaqObjArray.ContainsKey(s7ClientData.SN))
@@ -485,7 +492,7 @@ namespace YSAI.Manage.Core.@base
         /// <exception cref="NotImplementedException"></exception>
         private void OpcUaClientOperate_OnEvent(object? sender, OpcUaClientData.Event e, string SN)
         {
-            throw new NotImplementedException();
+            Debug.WriteLine( e.Message );
         }
         /// <summary>
         /// OPCUA客户端的订阅事件
@@ -496,7 +503,7 @@ namespace YSAI.Manage.Core.@base
         /// <exception cref="NotImplementedException"></exception>
         private void OpcUaClientOperate_OnEventParam(object? sender, OpcUaClientData.EventParam e, string SN)
         {
-            throw new NotImplementedException();
+            Debug.WriteLine(e.Message);
         }
         /// <summary>
         /// OPCDA客户端的订阅事件
@@ -507,7 +514,7 @@ namespace YSAI.Manage.Core.@base
         /// <exception cref="NotImplementedException"></exception>
         private void OpcDaClientOperate_OnEvent(object? sender, OpcDaClientData.EventParam e, string SN)
         {
-            throw new NotImplementedException();
+            Debug.WriteLine(e.Message);
         }
         /// <summary>
         /// 自定义订阅的事件
@@ -519,7 +526,7 @@ namespace YSAI.Manage.Core.@base
         /// <exception cref="NotImplementedException"></exception>
         private void SubscribeOperate_OnEvent(object? sender, SubscribeData.EventParam e,DaqType? DType, string SN)
         {
-            throw new NotImplementedException();
+            Debug.WriteLine(e.Message);
         }
         #endregion
 

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

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

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

@@ -36,7 +36,6 @@ namespace YSAI.Opc.da.client
             /// 接口版本
             /// </summary>
             [Description("接口版本")]
-            [JsonConverter(typeof(StringEnumConverter))]
             public Specification SpecificationVer { get; set; }
 
             /// <summary>

+ 19 - 13
src/YSAI.DAQ/YSAI.Opc/da/client/OpcDaClientOperate.cs

@@ -310,28 +310,34 @@ namespace YSAI.Opc.da.client
 
                         //设置节点
                         bool ItemState = false;
-                        Item[] items = new Item[address.AddressArray.Count];
-                        for (int i = 0; i < address.AddressArray.Count; i++)
+                        List<Item> items = new List<Item>();
+                        foreach (var item in address.AddressArray)
                         {
-                            if (keyValuePair.Value.Item2.Count > 0)
+                            if (item.AddressType == Core.@enum.AddressType.Reality)
                             {
-                                if (!keyValuePair.Value.Item2.Exists(c => c.ItemName.Equals(address.AddressArray[i].AddressName)))
+                                if (keyValuePair.Value.Item2.Count > 0)
                                 {
-                                    items[i] = new Item() { ItemName = address.AddressArray[i].AddressName };
+                                    if (!keyValuePair.Value.Item2.Exists(c => c.ItemName.Equals(item.AddressName)))
+                                    {
+                                        items.Add(new Item() { ItemName = item.AddressName });
+                                        ItemState = true;
+                                        AddAddressData(GroupName, item);
+                                    }
+                                }
+                                else
+                                {
+                                    items.Add(new Item() { ItemName = item.AddressName });
                                     ItemState = true;
-                                    AddAddressData(GroupName, address.AddressArray[i]);
+                                    AddAddressData(GroupName, item);
                                 }
                             }
-                            else
-                            {
-                                items[i] = new Item() { ItemName = address.AddressArray[i].AddressName };
-                                ItemState = true;
-                                AddAddressData(GroupName, address.AddressArray[i]);
-                            }
                         }
+
+
+                       
                         if (!ItemState) return Break("AddNode", false, "已存在节点地址");
                         //添加订阅
-                        ItemResult[] itemResults = keyValuePair.Value.Item1.AddItems(items);
+                        ItemResult[] itemResults = keyValuePair.Value.Item1.AddItems(items.ToArray());
                         //添加节点
                         keyValuePair.Value.Item2.AddRange(itemResults.ToArray());
                         //失败消息

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

@@ -1000,7 +1000,8 @@ namespace YSAI.Opc.ua.client
                 }
                 //初始化配置
                 AI.ApplicationType = ApplicationType.Client;
-                AI.ConfigSectionName = "Opc.Ua.Client";   //配置文件的名称
+                //配置文件的名称
+                AI.ConfigSectionName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Opc.Ua.Client");   
                 //加载应用程序配置
                 AC = AI.LoadApplicationConfiguration(false).Result;
                 AC.ApplicationName = opcUaData.Name;

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

@@ -225,7 +225,7 @@ namespace YSAI.Opc.ua.service
                 //设置类型
                 AI.ApplicationType = ApplicationType.Server;
                 //获取或设置包含应用程序配置文件路径的配置节的名称(也就是通过配置文件来进行配置)
-                AI.ConfigSectionName = "Opc.Ua.Service";
+                AI.ConfigSectionName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Opc.Ua.Service");
 
                 //加载应用程序配置
                 ApplicationConfiguration config = AI.LoadApplicationConfiguration(false).Result;

+ 340 - 0
src/YSAI.DAQ/YSAI.TestConsole/Program.cs

@@ -1,4 +1,5 @@
 using Google.Protobuf.WellKnownTypes;
+using OpcDaNetApi;
 using System.Collections.Concurrent;
 using System.Drawing;
 using System.Reflection;
@@ -11,6 +12,7 @@ using YSAI.Kafka;
 using YSAI.Log;
 using YSAI.Mqtt.client;
 using YSAI.Mqtt.service.websocket;
+using YSAI.Opc.da.client;
 using YSAI.Opc.ua.client;
 using YSAI.Opc.ua.service;
 using YSAI.RabbitMQ;
@@ -23,9 +25,347 @@ namespace YSAI.TestConsole
     {
         static void Main(string[] args)
         {
+            //创建一个采集配置
+            List<AddressManage> addressManages = new List<AddressManage>();
 
+            AddressManage addressManage = new AddressManage();
+            addressManage.DType = Core.@enum.DaqType.OpcDa;
+            addressManage.SN = "OPCDA采集";
+            addressManage.InstanceParam = new OpcDaClientData.Basics() { SN = "OPCDA采集", ServiceName = "Knight.OPC.Server.Demo", SpecificationVer = Specification.COM_DA_20 };
+            addressManage.AddressArray = new List<AddressDetails>()
+            {
+                new AddressDetails()
+                {
+                    AddressName = "a.a.a",
+                    AddressDataType = Core.@enum.DataType.Bool,
+                    AddressDescribe = "一个动态的布尔类型",
+                    AddressAnotherName = "test",
+                    AddressPropertyName = "aaa",
+                    AddressType = Core.@enum.AddressType.Reality,
+                    MqttRelay = new AddressRelay.MqttRelayParam()
+                    {
+                        QoSLevel = 0,
+                        Retain = true,
+                        Topic = "Test/aaa",
+                        ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                    }
+                },
+                new AddressDetails()
+                {
+                    AddressName = "a.a.h",
+                    AddressDataType = Core.@enum.DataType.String,
+                    AddressDescribe = "一个动态的字符串类型",
+                    AddressAnotherName = "test",
+                    AddressPropertyName = "aah",
+                    AddressType = Core.@enum.AddressType.Reality,
+                    AddressParseParam = new AddressParse()
+                    {
+                        ParseType = Core.@enum.ParseType.ScriptAnalysis,
+                        Script = new Core.script.ScriptData.Basics()
+                        {
+                            ScriptCode = @"function Convert(value) 
+                                            {
+                                                return '这是脚本测试,传入的参数是:' + value;
+                                            }",
+                            ScriptFunction = "Convert",
+                            ScriptType = Core.script.ScriptData.ScriptType.JavaScript
+                        }
+                    },
+                    MqttRelay = new AddressRelay.MqttRelayParam()
+                    {
+                        QoSLevel = 0,
+                        Retain = true,
+                        Topic = "Test/aah",
+                        ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                    }
+                },
+                new AddressDetails()
+                 {
+                     AddressName = "a.a.g",
+                     AddressDataType = Core.@enum.DataType.Double,
+                     AddressDescribe = "一个动态的浮点类型",
+                     AddressAnotherName = "test",
+                     AddressPropertyName = "aag",
+                     AddressType = Core.@enum.AddressType.Reality,
+                     AddressParseParam = new AddressParse()
+                     {
+                         ParseType = Core.@enum.ParseType.ScriptAnalysis,
+                         Script = new Core.script.ScriptData.Basics()
+                         {
+                             ScriptCode = @"function Convert(value) 
+                                            {
+                                                return value*1000;
+                                            }",
+                             ScriptFunction = "Convert",
+                             ScriptType = Core.script.ScriptData.ScriptType.JavaScript
+                         }
+                     },
+                     MqttRelay = new AddressRelay.MqttRelayParam()
+                     {
+                         QoSLevel = 0,
+                         Retain = true,
+                         Topic = "Test/aag",
+                         ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                     }
+                 },
+                new AddressDetails()
+                 {
+                     AddressName = "OPCDA_VirtualAddress",
+                     AddressDataType = Core.@enum.DataType.String,
+                     AddressDescribe = "虚拟地址",
+                     AddressAnotherName = "test",
+                     AddressPropertyName = "OPCDA_VirtualAddress",
+                     AddressType = Core.@enum.AddressType.Virtual,
+                    MqttRelay = new AddressRelay.MqttRelayParam()
+                    {
+                        QoSLevel = 0,
+                        Retain = true,
+                        Topic = "Test/OPCDA_VirtualAddress",
+                        ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                    }
+                 },
+                new AddressDetails()
+                  {
+                      AddressName = "OPCDA_VirtualDynamicAddress",
+                      AddressDataType = Core.@enum.DataType.String,
+                      AddressDescribe = "虚拟动态地址",
+                      AddressAnotherName = "test",
+                      AddressPropertyName = "OPCDA_VirtualDynamicAddress",
+                      AddressType = Core.@enum.AddressType.VirtualDynamic,
+                        MqttRelay = new AddressRelay.MqttRelayParam()
+                        {
+                            QoSLevel = 0,
+                            Retain = true,
+                            Topic = "Test/OPCDA_VirtualDynamicAddress",
+                            ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                        }
+                  }
+            };
+
+            addressManages.Add(addressManage);
+
+            addressManage = new AddressManage();
+            addressManage.DType = Core.@enum.DaqType.OpcUa;
+            addressManage.SN = "OPCUA采集";
+            addressManage.InstanceParam = new OpcUaClientData.Basics() { SN = "OPCUA采集", Name = "TEST", Password = "ysai", UserName = "ysai", ServerUrl = "opc.tcp://192.168.2.38:8866/Opc.Ua.Service", SamplingInterval = 100 };
+            addressManage.AddressArray = new List<AddressDetails>()
+            {
+                new AddressDetails()
+                {
+                    AddressName = "ns=2;s=Boolean_Dynamic",
+                    AddressDataType = Core.@enum.DataType.Bool,
+                    AddressDescribe = "一个动态的布尔类型",
+                    AddressAnotherName = "test",
+                    AddressPropertyName = "Boolean_Dynamic",
+                    AddressType = Core.@enum.AddressType.Reality,
+                    MqttRelay = new AddressRelay.MqttRelayParam()
+                    {
+                        QoSLevel = 0,
+                        Retain = true,
+                        Topic = "Test/Boolean_Dynamic",
+                        ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                    }
+                },
+                new AddressDetails()
+                {
+                    AddressName = "ns=2;s=String_Dynamic",
+                    AddressDataType = Core.@enum.DataType.String,
+                    AddressDescribe = "一个动态的字符串类型",
+                    AddressAnotherName = "test",
+                    AddressPropertyName = "String_Dynamic",
+                    AddressType = Core.@enum.AddressType.Reality,
+                    AddressParseParam = new AddressParse()
+                    {
+                        ParseType = Core.@enum.ParseType.ScriptAnalysis,
+                        Script = new Core.script.ScriptData.Basics()
+                        {
+                            ScriptCode = @"function Convert(value) 
+                                            {
+                                                return '这是脚本测试,传入的参数是:' + value;
+                                            }",
+                            ScriptFunction = "Convert",
+                            ScriptType = Core.script.ScriptData.ScriptType.JavaScript
+                        }
+                    },
+                    MqttRelay = new AddressRelay.MqttRelayParam()
+                    {
+                        QoSLevel = 0,
+                        Retain = true,
+                        Topic = "Test/String_Dynamic",
+                        ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                    }
+                },
+                new AddressDetails()
+                 {
+                     AddressName = "ns=2;s=Double_Dynamic",
+                     AddressDataType = Core.@enum.DataType.Double,
+                     AddressDescribe = "一个动态的浮点类型",
+                     AddressAnotherName = "test",
+                     AddressPropertyName = "Double_Dynamic",
+                     AddressType = Core.@enum.AddressType.Reality,
+                     AddressParseParam = new AddressParse()
+                     {
+                         ParseType = Core.@enum.ParseType.ScriptAnalysis,
+                         Script = new Core.script.ScriptData.Basics()
+                         {
+                             ScriptCode = @"function Convert(value) 
+                                            {
+                                                return value*1000;
+                                            }",
+                             ScriptFunction = "Convert",
+                             ScriptType = Core.script.ScriptData.ScriptType.JavaScript
+                         }
+                     },
+                     MqttRelay = new AddressRelay.MqttRelayParam()
+                     {
+                         QoSLevel = 0,
+                         Retain = true,
+                         Topic = "Test/Double_Dynamic",
+                         ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                     }
+                 },
+                new AddressDetails()
+                 {
+                     AddressName = "OPCUA_VirtualAddress",
+                     AddressDataType = Core.@enum.DataType.String,
+                     AddressDescribe = "虚拟地址",
+                     AddressAnotherName = "test",
+                     AddressPropertyName = "OPCUA_VirtualAddress",
+                     AddressType = Core.@enum.AddressType.Virtual,
+                        MqttRelay = new AddressRelay.MqttRelayParam()
+                        {
+                            QoSLevel = 0,
+                            Retain = true,
+                            Topic = "Test/OPCUA_VirtualAddress",
+                            ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                        }
+                 },
+                new AddressDetails()
+                  {
+                      AddressName = "OPCUA_VirtualDynamicAddress",
+                      AddressDataType = Core.@enum.DataType.String,
+                      AddressDescribe = "虚拟动态地址",
+                      AddressAnotherName = "test",
+                      AddressPropertyName = "OPCUA_VirtualDynamicAddress",
+                      AddressType = Core.@enum.AddressType.VirtualDynamic,
+                        MqttRelay = new AddressRelay.MqttRelayParam()
+                        {
+                            QoSLevel = 0,
+                            Retain = true,
+                            Topic = "Test/OPCUA_VirtualDynamicAddress",
+                            ReflectionSN = "YSAI.Mqtt.MqttClientOperate[Instance][PublishSubscribe]"
+                        }
+                  }
+            };
+
+            addressManages.Add(addressManage);
+
+            //生成文件
+            FileTool.StringToFile("config//DaqConfig.json", JsonTool.JsonEntityToString(addressManages).JsonFormatting());
 
 
+            List<AddressManage>? addresses = JsonTool.StringToJsonEntity<List<AddressManage>>(FileTool.FileToString("config//DaqConfig.json"));
+
+            OpcDaClientData.Basics? basics1=JsonTool.StringToJsonEntity<OpcDaClientData.Basics>(addresses[0].InstanceParam.ToString());
+
+
+
+            //创建一个转发配置
+            ReflectionData.Basics basics = new ReflectionData.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.service.websocket",
+                                ClassDatas=new List<Basics.DllData.NamespaceData.ClassData>()
+                                {
+                                    new Basics.DllData.NamespaceData.ClassData()
+                                    {
+                                        ClassName="MqttWebSocketServiceOperate",
+                                        ConstructorParam=new object[]{ new MqttWebSocketServiceData.Basics { LoginID="ysai",LoginPassword="ysai",Port= 11819, HttpPort= 11820, Uri="NB_CLASS" } },
+                                        SN="YSAI.Mqtt.MqttWebSocketServiceOperate[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()
+                            {
+                                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.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="Off",
+                                                SN="[Off]"
+                                            },
+                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
+                                            {
+                                                MethodName="PublishSubscribe",
+                                                SN="[PublishSubscribe]"
+                                            },
+                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
+                                            {
+                                                MethodName="AddSubscribe",
+                                                SN="[AddSubscribe]"
+                                            },
+                                            new Basics.DllData.NamespaceData.ClassData.MethodData()
+                                            {
+                                                MethodName="RemoveSubscribe",
+                                                SN="[RemoveSubscribe]"
+                                            }
+                                        },
+                                        EventDatas=new List<ClassData.EventData>()
+                                        {
+                                            new ClassData.EventData()
+                                            {
+                                                EventName="OnEvent",
+                                                SN="[OnEvent]"
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            };
+            //生成文件
+            FileTool.StringToFile(ReflectionOperate.ConfigFile, JsonTool.JsonEntityToString(basics).JsonFormatting());
+