Răsfoiți Sursa

Merge branch 'master' of http://106.14.142.95:3000/oyq28/ccs_http_server

wang.sq@aliyun.com 1 an în urmă
părinte
comite
824a63eab8
71 a modificat fișierele cu 4546 adăugiri și 0 ștergeri
  1. 48 0
      Kede/Device/body/RequestBody.cs
  2. 58 0
      Kede/Device/body/ResponseBody.cs
  3. 465 0
      Kede/Extend/CommonAtrr.cs
  4. 79 0
      Kede/Extend/CommonExtend.cs
  5. 58 0
      Kede/Form1.Designer.cs
  6. 20 0
      Kede/Form1.cs
  7. 120 0
      Kede/Form1.resx
  8. 113 0
      Kede/Form_Main.Designer.cs
  9. 553 0
      Kede/Form_Main.cs
  10. 120 0
      Kede/Form_Main.resx
  11. 43 0
      Kede/Kede.csproj
  12. 8 0
      Kede/Kede.csproj.user
  13. 72 0
      Kede/Log/Log.cs
  14. 23 0
      Kede/Program.cs
  15. 86 0
      Kede/Utils/OpcUaUtils.cs
  16. 145 0
      Kede/Utils/SftpWinSCPUtils.cs
  17. BIN
      Kede/bin/Debug/net5.0-windows/BouncyCastle.Crypto.dll
  18. 1869 0
      Kede/bin/Debug/net5.0-windows/Kede.deps.json
  19. BIN
      Kede/bin/Debug/net5.0-windows/Kede.dll
  20. BIN
      Kede/bin/Debug/net5.0-windows/Kede.exe
  21. BIN
      Kede/bin/Debug/net5.0-windows/Kede.pdb
  22. 8 0
      Kede/bin/Debug/net5.0-windows/Kede.runtimeconfig.dev.json
  23. 9 0
      Kede/bin/Debug/net5.0-windows/Kede.runtimeconfig.json
  24. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Connections.Abstractions.dll
  25. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.Abstractions.dll
  26. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
  27. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.dll
  28. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Abstractions.dll
  29. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Extensions.dll
  30. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Features.dll
  31. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.dll
  32. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Core.dll
  33. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Https.dll
  34. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll
  35. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
  36. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.dll
  37. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.WebUtilities.dll
  38. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.Abstractions.dll
  39. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.Binder.dll
  40. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.EnvironmentVariables.dll
  41. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.FileExtensions.dll
  42. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.dll
  43. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  44. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.DependencyInjection.dll
  45. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileProviders.Abstractions.dll
  46. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileProviders.Physical.dll
  47. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileSystemGlobbing.dll
  48. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Hosting.Abstractions.dll
  49. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Logging.Abstractions.dll
  50. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Logging.dll
  51. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.ObjectPool.dll
  52. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Options.dll
  53. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Primitives.dll
  54. BIN
      Kede/bin/Debug/net5.0-windows/Microsoft.Net.Http.Headers.dll
  55. BIN
      Kede/bin/Debug/net5.0-windows/Newtonsoft.Json.dll
  56. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Bindings.Https.dll
  57. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Client.dll
  58. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Configuration.dll
  59. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Core.dll
  60. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Gds.Client.Common.dll
  61. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Gds.Server.Common.dll
  62. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Security.Certificates.dll
  63. BIN
      Kede/bin/Debug/net5.0-windows/Opc.Ua.Server.dll
  64. BIN
      Kede/bin/Debug/net5.0-windows/OpcUaHelper.dll
  65. BIN
      Kede/bin/Debug/net5.0-windows/System.IO.Pipelines.dll
  66. BIN
      Kede/bin/Debug/net5.0-windows/System.Private.ServiceModel.dll
  67. BIN
      Kede/bin/Debug/net5.0-windows/System.ServiceModel.Primitives.dll
  68. BIN
      Kede/bin/Debug/net5.0-windows/System.ServiceModel.dll
  69. BIN
      Kede/bin/Debug/net5.0-windows/WinSCP.exe
  70. BIN
      Kede/bin/Debug/net5.0-windows/WinSCPnet.dll
  71. 649 0
      Kede/bin/Debug/net5.0-windows/YGLog/2024-08-15.txt

+ 48 - 0
Kede/Device/body/RequestBody.cs

@@ -0,0 +1,48 @@
+using System.Collections.Generic;
+
+namespace Kede
+{
+    public class RequestBody
+    { 
+        public string UserName
+        { get; set; }
+
+        public string Password
+        { get; set; }
+
+        public string ServerUrl
+        { get; set; }
+
+        public string Type
+        { get; set; }
+
+        public string Path
+        { get; set; }
+
+        public List<string> Addresses
+        { get; set; } = new List<string>();
+
+        public List<string> Values
+        { get; set; }
+
+        public string LocalFilePath {  get; set; }
+        public string RemoteFilePath {  get; set; }
+        public string Port { get; set; }
+
+    }
+
+    /// <summary>
+    /// 类型名称
+    /// </summary>
+    public enum ActionTypeEnum
+    {
+        Connect,
+        Write,
+        Read,
+        ToolList,
+        Collect,
+        Upload,
+        SelectNc,
+        StartNcProgram
+    }
+ }

+ 58 - 0
Kede/Device/body/ResponseBody.cs

@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+
+namespace Kede
+{
+    public class ResponseBody
+    {
+        public int code
+        { get; set; }
+
+        public bool result
+        { get; set; } = true;
+
+        public string msg
+        { get; set; } = "调用成功";
+
+        public int statusCode { get; set; } = 200; 
+
+        public List<string> values
+        { get; set; }
+
+        public string toolsInfo { get; set; } = "";
+
+        public string errorsInfo { get; set; } = "";
+
+        public string runDatasInfo { get; set; } = "";
+    }
+
+    public class ToolsInfo
+    {
+        public string number { get; set; }
+
+        public string name { get; set; }
+
+        public string targetLife { get; set; }
+
+    }
+
+    public class RunDatasInfo
+    {
+        /// <summary>
+        /// 进给倍率
+        /// </summary>
+        public string feedRate { get; set; }
+        /// <summary>
+        /// 主轴倍率
+        /// </summary>
+        public string spindleMagnification { get; set; }
+        /// <summary>
+        /// 主轴转速
+        /// </summary>
+        public string spindleSpeed { get; set; }
+        /// <summary>
+        /// 主轴负载
+        /// </summary>
+        public string spindleLoad { get; set; }
+
+    }
+}

+ 465 - 0
Kede/Extend/CommonAtrr.cs

@@ -0,0 +1,465 @@
+using YG;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Threading.Tasks;
+using System.ComponentModel;
+using System.Net.NetworkInformation;
+
+namespace System.Text
+{
+
+    public class Notify : System.ComponentModel.INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+        public void NotifyProper(string name)
+        {
+            if (PropertyChanged != null)
+            {
+                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
+            }
+        }
+    }
+    public static class CommonAtrr
+    {
+
+        public static void ShowDialog(this System.Windows.Forms.Form fm, string msg, bool isthread = true)
+        {
+            if (isthread)
+            {
+                Task.Factory.StartNew(() =>
+                {
+                    System.Windows.Forms.MessageBox.Show(msg, "信息提示", Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Asterisk);
+                });
+            }
+            else
+            {
+                System.Windows.Forms.MessageBox.Show(msg, "信息提示", Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Asterisk);
+            }
+
+        }
+        /// <summary>
+        /// 判断text里边是否为空,如果为空那么弹出提示信息
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="showmsg"></param>
+        public static bool Text_Check_value_Empty(this System.Windows.Forms.TextBox text, string showmsg)
+        {
+            if (string.IsNullOrEmpty(text.Text))
+            {
+                Task.Factory.StartNew(() => { System.Windows.Forms.MessageBox.Show(showmsg, "信息提示", Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Asterisk); });
+                return false;
+            }
+            return true;
+        }
+        public static byte[] ReturnBtyesWtitString(this string value, int byteleng = 30)
+        {
+            byte[] bt = new byte[byteleng];
+            byte[] item = Encoding.ASCII.GetBytes(value.ToClone());
+            Array.Copy(item, bt, item.Length);
+            return bt;
+        }
+        public static bool Ping(this string ip)
+        {
+            Ping ping = new Ping();
+            PingReply pingReply = ping.Send(ip.ToClone());
+            if (pingReply.Status.Equals(IPStatus.Success))
+            {
+                return true;
+            }
+            return false;
+        }
+        /// <summary>
+        /// 判断当前路径是否存在, 如果不存在就创建,
+        /// </summary>
+        /// <param name="path"></param>
+        /// <returns>如果为false则表示当前路径不存在,true则表示当前路径存在</returns>
+        public static bool PathIsExist(this string path)
+        {
+            try
+            {
+                if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path.ToClone())))
+                {
+                    System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
+                }
+                if (!File.Exists(path))
+                {
+                    File.Create(path).Close();
+                    return false;
+                }
+
+            }
+            catch (Exception ex)
+            {
+                YG.Log.Instance.WriteLogAdd($"87-->{ex.Message}");
+                return false;
+            }
+            return true;
+
+        }
+        /// <summary>
+        /// 判断text里边是否为空,并且文本的长度是否小于当前参数,如果小于那么弹出提示信息
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="textleng"></param>
+        /// <param name="showmsg"></param>
+        public static bool Text_Check_valueLeng_Empty(this System.Windows.Forms.TextBox text, int textleng, string showmsg)
+        {
+            if (string.IsNullOrEmpty(text.Text) && text.Text.Length < textleng)
+            {
+                Task.Factory.StartNew(() => { System.Windows.Forms.MessageBox.Show(showmsg); });
+                return false;
+            }
+            return true;
+        }
+        /// <summary>
+        /// 把字符转换为int
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static int StringToInt(this string value)
+        {
+            try { return Convert.ToInt32(value.ToClone()); }
+            catch
+            {
+                Log.Instance.WriteLogAdd(value + "在进行类型转换StringToInt时出现异常", null);
+                return 0;
+            }
+        }
+        /// <summary>
+        /// 把字符转换为int
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static bool StringToBool(this string value)
+        {
+            try { return Convert.ToBoolean(value.StringToInt()); }
+            catch
+            {
+                Log.Instance.WriteLogAdd(value + "在进行类型转换StringToBool时出现异常", null);
+                return false;
+            }
+        }
+        /// <summary>
+        /// 拷贝
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="List">The list.</param>
+        /// <returns>List{``0}.</returns>
+        public static System.ComponentModel.BindingList<T> Clone<T>(this System.ComponentModel.BindingList<T> List)
+        {
+            using (Stream objectStream = new MemoryStream())
+            {
+                IFormatter formatter = new BinaryFormatter();
+                formatter.Serialize(objectStream, List);
+                objectStream.Seek(0, SeekOrigin.Begin);
+                return formatter.Deserialize(objectStream) as System.ComponentModel.BindingList<T>;
+            }
+        }
+        public static List<T> Clone<T>(this List<T> List)
+        {
+            using (Stream objectStream = new MemoryStream())
+            {
+                IFormatter formatter = new BinaryFormatter();
+                formatter.Serialize(objectStream, List);
+                objectStream.Seek(0, SeekOrigin.Begin);
+                return formatter.Deserialize(objectStream) as List<T>;
+            }
+        }
+        public static float StringToFloat(this string value)
+        {
+            try { return Convert.ToSingle(value.ToClone()); }
+            catch
+            {
+                Log.Instance.WriteLogAdd(value + "在进行类型转换StringToFloat时出现异常", null);
+                return 0;
+            }
+        }
+        /// <summary>
+        /// 把字符转换为double类型 
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static double StringToDouble(this string value)
+        {
+            try { return Convert.ToDouble(value.ToClone()); }
+            catch
+            {
+                Log.Instance.WriteLogAdd(value + "在进行类型转换StringToDouble时出现异常");
+                return 0;
+            }
+        }
+        /// <summary>
+        /// 把噢bject类型转换为int类型
+        /// </summary>
+        /// <param name="ob"></param>
+        /// <returns></returns>
+        public static int ObjectToInt(this object ob)
+        {
+            return ob.ToString().StringToInt();
+        }
+        public static short ObjectToShort(this object ob)
+        {
+            return short.Parse(ob.ToString());
+
+        }
+        public static byte ObjectToByte(this object ob)
+        {
+            return byte.Parse(ob.ToString());
+
+        }
+        /// <summary>
+        /// 把噢bject类型转换为double类型
+        /// </summary>
+        /// <param name="ob"></param>
+        /// <returns></returns>
+        public static double ObjectToDouble(this object ob)
+        {
+            return ob.ToString().StringToDouble();
+        }
+        public static string ObjectToString(this object ob)
+        {
+            try { if (ob != null) return ob.ToString(); else Log.Instance.WriteLogAdd("转换object为string类型时出现哦bject为空的情况默认返回空字符串"); return ""; }
+            catch(Exception ex) { YG.Log.Instance.WriteLogAdd($"216-->{ex.Message}"); return ""; }
+        }
+        public static void DataGridViewColor(this System.Windows.Forms.DataGridView dv)
+        {
+            dv.RowsDefaultCellStyle.BackColor = Drawing.Color.AliceBlue;
+            dv.AlternatingRowsDefaultCellStyle.BackColor = Drawing.Color.Aquamarine;
+        }
+        /// <summary>
+        /// 判断当前的FirstOrDefaul是否为空,如果为空,那么不执行参数函数
+        /// </summary>
+        /// <typeparam name="TSource"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="action"></param>
+        public static bool FirstOrDefaultYG<TSource>(this TSource source, Action<TSource> action)
+        {
+            if (source != null)
+            {
+                try
+                {
+                    action(source);
+                    return true;
+                }
+                catch
+                {
+                    Log.Instance.WriteLogAdd("执行FirstOrDefaultYG函数时出现异常情况");
+                    return false;
+                }
+            }
+            return false;
+        }
+        public static bool Foreach<TSource>(this IEnumerable<TSource> source, Action<TSource> action)
+        {
+            if (source != null)
+            {
+                try
+                {
+                    foreach (var c in source)
+                    {
+                        action(c);
+                    }
+                    return true;
+                }
+                catch
+                {
+                    Log.Instance.WriteLogAdd("执行Foreach函数时出现异常情况");
+                    return false;
+                }
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 把对象转换为字符串
+        /// </summary>
+        /// <param name="ob"></param>
+        /// <returns></returns>
+        public static string Json_SerializeObject(this object ob)
+        {
+            return Newtonsoft.Json.JsonConvert.SerializeObject(ob);
+        }
+        /// <summary>
+        /// 把字符串转换为对象
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static T Json_DeserializeObject<T>(this string value)
+        {
+            try
+            {
+                return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(value);
+            }
+            catch
+            {
+                Log.Instance.WriteLogAdd(string.Format("转换类型时出现异常{0}-->{1}", typeof(T), value));
+                return default(T);
+            }
+        }
+
+        /// <summary>
+        /// 如果字符串为空, 那么返回true
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        public static bool StringIsEmpty(this string msg)
+        {
+            if (string.IsNullOrEmpty(msg))
+            {
+                return true;
+            }
+            return false;
+
+        }
+
+
+        /// <summary>
+        /// 通用summary
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="t"></param>
+        /// <param name="sw"></param>
+        /// <param name="ishead"></param>
+        /// <returns></returns>
+        private static bool ObjectWriteCVS<T>(this T t, StreamWriter sw, bool ishead)
+        {
+            try
+            {
+                System.Reflection.PropertyInfo[] minfo = t.GetType().GetProperties();
+                if (minfo.Length > 0)
+                {
+                    foreach (System.Reflection.PropertyInfo mi in minfo)
+                    {
+
+                        if (mi.PropertyType.IsGenericType)
+                        {
+                            object ob = mi.GetValue(t, null);
+
+                            int count = (int)ob.GetType().GetProperty("Count").GetValue(ob);//.GetValue(t);
+                            for (int i = 0; i < count; i++)
+                            {
+                                object item = ob.GetType().GetProperty("Item").GetValue(ob, new object[] { i });
+                                if (item.GetType().GetProperties().Where(m => m.Name.Equals("Item_type") && m.GetValue(item).Equals("Elect")).Count() > 0)
+                                {
+                                    break;
+                                }
+                                item.ObjectWriteCVS(sw, ishead);
+
+                            }
+                        }
+                        else
+                        {
+                            //if (mi.Name.Equals("Item_type") && mi.GetValue(t).Equals("Elect"))
+                            //{
+                            //    break;
+                            //}
+                            object[] atrti = mi.GetCustomAttributes(false);
+                            if (atrti != null && atrti.Count() > 0)
+                            {
+                                YGAttribute YGa = mi.GetCustomAttributes(false)[0] as YGAttribute;
+                                if (YGa != null && YGa.IsWrite)
+                                {
+                                    if (ishead)
+                                    {
+                                        sw.Write(mi.Name);
+                                        sw.Write("\t");
+                                    }
+                                    else
+                                    {
+                                        sw.Write(mi.GetValue(t).ToString().Replace("\r", " ").Replace("\n", " ").Replace("\t", " "));
+                                        sw.Write("\t");
+                                    }
+                                    //   sw.Write("\t");
+                                }
+                            }
+                        }
+                    }
+                }
+                return true;
+            }
+            catch (Exception ex)
+            {
+                YG.Log.Instance.WriteLogAdd($"377-->{ex.Message}");
+                return false;
+            }
+
+        }
+
+
+        /// <summary>
+        /// 把对象写入到cvs表格里便
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="t"></param>
+        /// <param name="path"></param>
+        public static bool ObjectWriteCVS<T>(this T t, string path)
+        {
+            try
+            {
+                System.IO.FileStream fs = new FileStream(path, System.IO.FileMode.Append, System.IO.FileAccess.Write);
+                StreamWriter sw = new StreamWriter(fs, new System.Text.UnicodeEncoding());
+                System.Reflection.PropertyInfo[] minfo = t.GetType().GetProperties();
+
+                if (minfo.Length > 0)
+                {
+                    foreach (System.Reflection.PropertyInfo mi in minfo)
+                    {
+                        if (mi.PropertyType.IsGenericType)
+                        {
+                            object ob = mi.GetValue(t, null);
+
+                            int count = (int)ob.GetType().GetProperty("Count").GetValue(ob);//.GetValue(t);
+                            for (int i = 0; i < count; i++)
+                            {
+                                object item = ob.GetType().GetProperty("Item").GetValue(ob, new object[] { i });
+                                foreach (var pro in item.GetType().GetProperties())
+                                {
+
+                                    object[] atrti = pro.GetCustomAttributes(false);
+                                    if (atrti != null && atrti.Count() > 0)
+                                    {
+                                        YGAttribute YGa = pro.GetCustomAttributes(false)[0] as YGAttribute;
+                                        if (YGa != null && YGa.IsWrite)
+                                        {
+                                            sw.Write(pro.GetValue(item));
+                                            sw.Write("\t");
+                                        }
+                                    }
+
+                                }
+                            }
+
+                        }
+
+                    }
+                }
+                sw.WriteLine("");
+                sw.Flush();
+                sw.Close();
+                return true;
+            }
+            catch (Exception ex)
+            {
+                YG.Log.Instance.WriteLogAdd(ex.Message);
+                return false;
+            }
+        }
+
+    }
+    /// <summary>
+    /// 是否写入CVS
+    /// </summary>
+    public class YGAttribute : Attribute
+    {
+        /// <summary>
+        /// 是否写入CVS
+        /// </summary>
+        public bool IsWrite { get; set; } = true;
+    }
+}

+ 79 - 0
Kede/Extend/CommonExtend.cs

@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace System.Text
+{
+    public static class CommonExtend
+    {
+        public static string EnumToString<T>(this Enum @enum)
+        {
+            return Enum.GetName(typeof(T), @enum);
+        }
+        public static T GetEnum<T>(this string value)
+        {
+            return value.StringIsEmpty() ? default(T) : (T)Enum.Parse(typeof(T), value);
+
+        }
+
+        public static short GetShort(this byte[] bt, int index)
+        {
+            int itemnumber = 0;
+            itemnumber = bt[index];
+            itemnumber <<= 8;
+            itemnumber = bt[index+1] | itemnumber;
+            return (short)itemnumber; 
+        }
+        public static string ToClone(this string value)
+        {
+            return value.Clone().ToString();
+        }
+        public static bool SaveXml<T>(this T t, string path)
+        {
+
+            try
+            {
+                if (t == null)
+                {
+                    return false;
+                }
+                System.Xml.Serialization.XmlSerializer xmlSerializer = new Xml.Serialization.XmlSerializer(t.GetType());
+                System.IO.StreamWriter fileStream = new IO.StreamWriter(path, false);
+                xmlSerializer.Serialize(fileStream, t);
+                fileStream.Close();
+                //  YG.Log.Instance.WriteLogAdd(string.Format("序列化对象:{0}成功 并写入文件:{1}", t.GetType(), path));
+
+                return true;
+            }
+            catch (Exception ex)
+            {
+                YG.Log.Instance.WriteLogAdd(string.Format("序列化对象:{0}失败:{1}", t.GetType(), ex.Message));
+                return false;
+            }
+        }
+        public static T OpenXml<T>(this T t, string path)
+        {
+            try
+            {
+
+                System.Xml.Serialization.XmlSerializer xmlSerializer = new Xml.Serialization.XmlSerializer(t.GetType());
+                System.IO.StreamReader fileStream = new IO.StreamReader(path);
+
+                //   YG.Log.Instance.WriteLogAdd(string.Format("反序列化对象:{0}成功 并写入文件:{1}", t.GetType(), path));
+                t = (T)xmlSerializer.Deserialize(fileStream);
+
+                fileStream.Close();
+                return t;
+
+            }
+            catch (Exception ex)
+            {
+                YG.Log.Instance.WriteLogAdd(string.Format("反序列化对象:{0}失败:{1}", t.GetType(), ex.Message));
+                return default(T);
+            }
+
+        }
+    }
+}

+ 58 - 0
Kede/Form1.Designer.cs

@@ -0,0 +1,58 @@
+namespace Kede
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            listView1 = new System.Windows.Forms.ListView();
+            SuspendLayout();
+            // 
+            // listView1
+            // 
+            listView1.HideSelection = false;
+            listView1.Location = new System.Drawing.Point(12, 25);
+            listView1.Name = "listView1";
+            listView1.Size = new System.Drawing.Size(767, 413);
+            listView1.TabIndex = 0;
+            listView1.UseCompatibleStateImageBehavior = false;
+            // 
+            // Form1
+            // 
+            AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+            AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            ClientSize = new System.Drawing.Size(800, 450);
+            Controls.Add(listView1);
+            Name = "Form1";
+            Text = "Form1";
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ListView listView1;
+    }
+}

+ 20 - 0
Kede/Form1.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Kede
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 120 - 0
Kede/Form1.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 113 - 0
Kede/Form_Main.Designer.cs

@@ -0,0 +1,113 @@
+
+namespace IMCS
+{
+    partial class Form_Main
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.listView1 = new System.Windows.Forms.ListView();
+            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.label1 = new System.Windows.Forms.Label();
+            this.SuspendLayout();
+            // 
+            // listView1
+            // 
+            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1,
+            this.columnHeader2,
+            this.columnHeader3,
+            this.columnHeader4});
+            this.listView1.GridLines = true;
+            this.listView1.Location = new System.Drawing.Point(0, 62);
+            this.listView1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.listView1.Name = "listView1";
+            this.listView1.Size = new System.Drawing.Size(1339, 858);
+            this.listView1.TabIndex = 0;
+            this.listView1.UseCompatibleStateImageBehavior = false;
+            this.listView1.View = System.Windows.Forms.View.Details;
+            // 
+            // columnHeader1
+            // 
+            this.columnHeader1.Text = "请求时间";
+            this.columnHeader1.Width = 126;
+            // 
+            // columnHeader2
+            // 
+            this.columnHeader2.Text = "请求方式";
+            // 
+            // columnHeader3
+            // 
+            this.columnHeader3.Text = "请求Url";
+            this.columnHeader3.Width = 547;
+            // 
+            // columnHeader4
+            // 
+            this.columnHeader4.Text = "返回";
+            this.columnHeader4.Width = 236;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Font = new System.Drawing.Font("宋体", 15F);
+            this.label1.ForeColor = System.Drawing.Color.Red;
+            this.label1.Location = new System.Drawing.Point(16, 11);
+            this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(25, 25);
+            this.label1.TabIndex = 2;
+            this.label1.Text = "-";
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1348, 936);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.listView1);
+            this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.Name = "Form1";
+            this.Text = "HttpServer服务——Simens";
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ListView listView1;
+        private System.Windows.Forms.ColumnHeader columnHeader1;
+        private System.Windows.Forms.ColumnHeader columnHeader2;
+        private System.Windows.Forms.ColumnHeader columnHeader3;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.ColumnHeader columnHeader4;
+    }
+}
+

+ 553 - 0
Kede/Form_Main.cs

@@ -0,0 +1,553 @@
+
+using Newtonsoft.Json;
+using Opc.Ua;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+using Kede;
+using TestAgreement.utils;
+
+namespace IMCS
+{
+    public partial class Form_Main : Form
+    {
+        public string UPLOAD_NC_PATH = "Sinumerik/FileSystem/NCExtend/";
+        public string CHANNEL_NO = "1";
+        public string TEMP_NC_NAME = "7999.MPF";
+        private uint currentToolArea = 1;
+        
+        
+
+        public Form_Main()
+        {
+            InitializeComponent(); 
+        } 
+        private void Form1_Load(object sender, EventArgs e)
+        {
+          
+            HttpListener httpListenner;
+            httpListenner = new HttpListener();
+            httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
+            httpListenner.Prefixes.Add("http://127.0.0.1:8020/opcua/");
+            httpListenner.Start();
+            label1.Text = "HttpServer已开启:http://127.0.0.1:8020/opcua/";
+            new Thread(new ThreadStart(delegate
+            {
+                try
+                {
+                    loop(httpListenner);
+
+                }
+                catch (Exception ex)
+                {  
+                    string ss = ex.ToString();
+                    httpListenner.Stop();
+
+                  /*  Application.ExitThread();
+                    Application.Exit();
+                    Application.Restart();
+                    Process.GetCurrentProcess().Kill();*/
+                }
+            })).Start();
+
+        }
+
+        private void loop(HttpListener httpListenner)
+        {
+
+            while (true)
+            {
+                HttpListenerContext context = httpListenner.GetContext();
+                context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
+                HttpListenerRequest request = context.Request;
+                HttpListenerResponse response = context.Response;
+                Servlet servlet = new MyServlet();
+                servlet.onCreate();
+                if (request.HttpMethod == "POST")
+                {
+                    Stream stream = context.Request.InputStream;
+                    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
+                    string body = reader.ReadToEnd();
+
+                    YG.Log.Instance.WriteLogAdd(">>>===收到POST数据 : >>>>===" + body);
+                    ResponseBody responseBody = new ResponseBody();
+
+                    RequestBody opcBody = JsonConvert.DeserializeObject<RequestBody>(body);
+                    AddList(DateTime.Now.ToString(), "POST", opcBody.ServerUrl + opcBody.Type, "OK");
+                    switch (opcBody.Type)
+                    {
+                        case "1"://数据采集
+                            responseBody = OpcUaUtils.OpcCaiji(opcBody.ServerUrl, opcBody.UserName, opcBody.Password, opcBody.Values);
+                            break;
+                        case "2":
+                            responseBody = SftpWinSCPUtils.sftpUpload(opcBody.LocalFilePath, opcBody.RemoteFilePath, opcBody.ServerUrl, opcBody.UserName, opcBody.Password, opcBody.Port);
+                            break;
+                    }
+
+                    response.ContentType = "application/json;charset=UTF-8";
+                    response.ContentEncoding = Encoding.UTF8;
+                    response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
+                    string retJsonData = JsonConvert.SerializeObject(responseBody);
+
+
+                    using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
+                    {
+                        YG.Log.Instance.WriteLogAdd($"WMS--->>{responseBody.Json_SerializeObject()}--->>{body}\r\n");
+
+                        writer.Write(responseBody.Json_SerializeObject());
+                        writer.Close();
+                        response.Close();
+                    }
+
+
+
+                }
+            }
+        }
+
+/*        private void loop(HttpListener httpListenner)
+        {
+
+            while (true)
+            {
+                HttpListenerContext context = httpListenner.GetContext();
+                context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
+                HttpListenerRequest request = context.Request;
+                HttpListenerResponse response = context.Response;
+                Servlet servlet = new MyServlet();
+                servlet.onCreate();
+                if (request.HttpMethod == "POST")
+                {
+                    if (!request.Url.ToString().Contains("favicon"))
+                    {
+                        try
+                        {
+                            Stream stream = context.Request.InputStream;
+                            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
+                            string body = reader.ReadToEnd();
+
+                            YG.Log.Instance.WriteLogAdd(">>>===收到POST数据 : >>>>===" + body);
+                            ResponseBody responseBody = new ResponseBody();
+
+                            RequestBody opcBody = JsonConvert.DeserializeObject<RequestBody>(body);
+
+                            AddList(DateTime.Now.ToString(), "POST", opcBody.ServerUrl + opcBody.Type, "OK");
+
+                            if (deviceList == null || (deviceList.Where(m => m.Key.Equals(opcBody.ServerUrl)).Count() == 0))
+                            {
+                                opcServer = DeviceOPCUat.OpcUa_Connection1(opcBody.ServerUrl, opcBody.UserName, opcBody.Password);
+                                if(opcServer.Session != null)
+                                {
+                                    deviceList.Add(opcBody.ServerUrl, opcServer);
+                                } 
+                            }
+                            else
+                            {
+                                opcServer = deviceList.Where(m => m.Key.Equals(opcBody.ServerUrl)).FirstOrDefault().Value;
+                            }
+                            if (opcServer == null || !opcServer.Session.Connected)
+                            {
+                                opcServer = DeviceOPCUat.OpcUa_Connection1(opcBody.ServerUrl, opcBody.UserName, opcBody.Password);
+                            }
+                            //else
+                            //{
+                            //    opcServer.Session.Reconnect();
+                            //}
+
+                            if (opcServer.Session.Connected)
+                            {
+                                if (opcBody.Type == ActionTypeEnum.Connect.ToString()) //连接状态
+                                {
+                                    responseBody.result = true;
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.Collect.ToString()) //采集
+                                {
+                                    //ETH_S7Simens s7 = new ETH_S7Simens("192.168.11.164");
+
+                                    //responseBody.runDatasInfo = JsonConvert.SerializeObject(s7.deviceInfo);
+
+                                    //string s = responseBody.runDatasInfo;
+                                    opcBody.Addresses.Add("ns=2;s=/Channel/GeometricAxis/actFeedRate"); //进给倍率
+                                    opcBody.Addresses.Add("ns=2;s=/Channel/Spindle/speedOvr");//主轴倍率
+                                    opcBody.Addresses.Add("ns=2;s=/Channel/Spindle/actSpeed");//主轴实际速度
+                                    opcBody.Addresses.Add("ns=2;s=/Channel/Spindle/driveLoad");//主轴负载
+                                    List<string> values = opcServer.ReadValues(opcBody.Addresses);
+                                    RunDatasInfo runDatasInfo = new RunDatasInfo();
+                                    for (int i = 0; i < values.Count; i++)
+                                    {
+                                        if(i == 0)
+                                        {
+                                            runDatasInfo.feedRate = values[i];
+                                        }else if (i == 1)
+                                        {
+                                            runDatasInfo.spindleMagnification = values[i];
+                                        }
+                                        else if(i == 2)
+                                        {
+                                            runDatasInfo.spindleSpeed = values[i];
+                                        }
+                                        else if(i == 3)
+                                        {
+                                            runDatasInfo.spindleLoad = values[i];
+                                        }
+                                    }
+                                    responseBody.runDatasInfo = JsonConvert.SerializeObject(runDatasInfo);
+
+                                    //报警 
+                                    SinumerikOpcUaAPI.FilterDefinition m_filter = new SinumerikOpcUaAPI.FilterDefinition();
+                                    m_filter.AreaId = new NodeId("Sinumerik", (ushort)2);
+                                    m_filter.Severity = EventSeverity.Min;
+                                    m_filter.IgnoreSuppressedOrShelved = true;
+                                    m_filter.EventTypes = (IList<NodeId>)new NodeId[1]
+                                    {
+                                     ObjectTypeIds.ConditionType
+                                    };
+                                    m_filter.SelectClauses = m_filter.ConstructSelectClauses(opcServer.Session, ObjectTypeIds.ConditionType);
+                                    for (int index = 0; index < m_filter.SelectClauses.Count<SimpleAttributeOperand>(); ++index) 
+                                    {
+                                        responseBody.errorsInfo += m_filter.SelectClauses[index].ToString() + (object)index + " "; 
+                                    } 
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.ToolList.ToString())
+                                {
+                                    List<ToolsInfo> toolInfoList = new List<ToolsInfo>();
+                                    int index = 1;
+                                    List<string> stringList = this.readVariables(opcServer,new string[6]
+                                       {
+                                          "/Tool/Catalogue/toolNo[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString()),
+                                          "/Tool/Catalogue/toolIdent[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString()),
+                                          "/Tool/Catalogue/toolInMag[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString()),
+                                          "/Tool/Catalogue/toolInPlace[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString()),
+                                          "/Tool/Catalogue/nrDuplo[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString()),
+                                          "/Tool/Catalogue/numCuttEdges[u<Area index>, <Row index>]".Replace("<Area index>", this.currentToolArea.ToString()).Replace("<Row index>", index.ToString())
+                                       }
+                                       );
+                                    ToolsInfo toolInfo = new ToolsInfo();
+                                    toolInfo.number = Convert.ToUInt16(stringList[0]) +"";
+                                    //toolInfo.toolIdent = stringList[1];
+                                    //toolInfo.toolInMag = Convert.ToUInt16(stringList[2]);
+                                    //toolInfo.toolInPlace = Convert.ToUInt16(stringList[3]);
+                                    //toolInfo.nrDuplo = Convert.ToUInt16(stringList[4]);
+                                    //toolInfo.numCuttEdges = Convert.ToUInt16(stringList[5]);
+                                    toolInfoList.Add(toolInfo);
+                                    responseBody.toolsInfo = JsonConvert.SerializeObject(toolInfoList);
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.Read.ToString()) 
+                                {
+                                    responseBody.values = opcServer.ReadValues(opcBody.Addresses);
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.Write.ToString())
+                                {
+                                    opcServer.WriteValues(opcBody.Values, opcBody.Addresses);
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.SelectNc.ToString())
+                                {
+                                    string sSelectedFileName = Path.GetFileName(opcBody.Path);
+                                    string status = opcServer.MethodCallSelectProgram(UPLOAD_NC_PATH + sSelectedFileName, Convert.ToUInt32(CHANNEL_NO)).status;
+                                    if (status == "Good")
+                                    {
+                                        responseBody.msg = "选择成功";
+                                    }
+                                    else
+                                    {
+                                        responseBody.msg = "选择失败";
+                                    }
+                                }
+                                else if (opcBody.Type == ActionTypeEnum.Upload.ToString())
+                                {
+                                    string file = opcBody.Path;
+                                    //选择临时文件
+                                    string status = opcServer.MethodCallSelectProgram(UPLOAD_NC_PATH + TEMP_NC_NAME, Convert.ToUInt32(CHANNEL_NO)).status; 
+                                    try
+                                    { 
+                                        string extension = Path.GetExtension(file);
+                                        if (string.IsNullOrWhiteSpace(extension))
+                                        {
+                                            responseBody.msg = "文件名不合法";
+                                        }
+                                        try
+                                        {
+                                            //opcServer.MethodCallCreateNewFile(UPLOAD_NC_PATH, Path.GetFileName(file), true);
+                                            byte[] data = opcServer.ReadFile(file);
+                                            //int copylen = 10000;
+                                            //bool isover = true;
+                                            //byte[] bt = new byte[copylen];
+                                            //if (data.Length > copylen)
+                                            //{
+
+                                            //    int runcount = data.Length / copylen;
+                                            //    for (int i = 0; i < runcount; i++)
+                                            //    {
+                                            //        Array.Copy(data, i * copylen, bt, 0, copylen);
+                                            //        if (i > 0)
+                                            //        {
+                                            //            isover = false;
+                                            //        }
+                                            //        var cc = opcServer.MethodCallCopyFileToServer("/Methods/CopyFileToServer", UPLOAD_NC_PATH +  Path.GetFileName(file), bt, isover);
+                                            //        System.Console.WriteLine($"当前循环到的位置:{i}-->>{cc.status}");
+                                            //    }
+                                            //    int lastleng = data.Length % copylen;
+                                            //    bt = new byte[lastleng];
+                                            //    Array.Copy(data, runcount * copylen, bt, 0, lastleng);
+                                            //    Server.MethodCallResult methodCallResult = opcServer.MethodCallCopyFileToServer("/Methods/CopyFileToServer", UPLOAD_NC_PATH + Path.GetFileName(file), bt, isover);
+
+                                            //    if (methodCallResult.status.ToUpper().Equals("GOOD"))
+                                            //    {
+                                            //        responseBody.msg = "上传文件成功";
+                                            //        YG.Log.Instance.WriteLogAdd(file + "上传文件成功");
+                                            //    }
+                                            //    else
+                                            //    {
+                                            //        responseBody.msg = "上传文件失败";
+                                            //        YG.Log.Instance.WriteLogAdd(file + "上传文件失败");
+                                            //    }
+                                            //}
+                                            //else
+                                            //{
+                                                Server.MethodCallResult methodCallResult = opcServer.MethodCallCopyFileToServer("/Methods/CopyFileToServer", UPLOAD_NC_PATH + Path.GetFileName(file), data, true);
+
+                                                if (methodCallResult.status.ToUpper().Equals("GOOD"))
+                                                {
+                                                    responseBody.msg = "上传文件成功";
+                                                    YG.Log.Instance.WriteLogAdd(file + "上传文件成功");
+                                                }
+                                                else
+                                                {
+                                                    responseBody.msg = "上传文件失败";
+                                                    YG.Log.Instance.WriteLogAdd(file + "上传文件失败");
+                                                }
+                                           // } 
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            responseBody.msg = "上传文件失败===>"+ ex.Message;
+                                            YG.Log.Instance.WriteLogAdd($"{ex.Message}"); 
+                                        }
+                                       
+
+                                    }
+                                    catch (Exception ex)
+                                    {
+                                        responseBody.msg = "上传文件失败===>" + ex.Message;
+                                        YG.Log.Instance.WriteLogAdd($"493-->{ex.Message}");
+                                    }
+                                    //设位主程序
+                                    status = opcServer.MethodCallSelectProgram(UPLOAD_NC_PATH + Path.GetFileName(file), Convert.ToUInt32(CHANNEL_NO)).status;
+                                }
+
+                            }
+                            else
+                            {
+                                responseBody.code = 0;
+                                responseBody.msg = "服务器离线,连不上opcUa";
+                                responseBody.result = false;
+                            }
+                            response.ContentType = "application/json;charset=UTF-8";
+                            response.ContentEncoding = Encoding.UTF8;
+                            response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
+                            string retJsonData = JsonConvert.SerializeObject(responseBody);
+
+
+                            using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
+                            {
+                                YG.Log.Instance.WriteLogAdd($"WMS--->>{responseBody.Json_SerializeObject()}--->>{body}\r\n");
+
+                                writer.Write(responseBody.Json_SerializeObject());
+                                writer.Close();
+                                response.Close();
+                            }
+
+                        }
+                        catch (Exception opcex)
+                        {
+                            AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), opcex.Message); 
+                        }
+                    }
+                }
+                else if (request.HttpMethod == "GET")
+                {
+                    if (!request.Url.ToString().Contains("favicon"))
+                    {
+                        string ip = request.QueryString["ip"];
+                        string port = request.QueryString["port"];
+                        string fun = request.QueryString["fun"];
+
+                        AddList(DateTime.Now.ToString(), "GET", ip + port + fun, "OK"); 
+                       
+                    }
+                }
+                response.Close();
+            }
+
+
+        }
+        private List<string> readVariables(Server server,string[] variables)
+        {
+            List<string> nodeIdStrings = new List<string>();
+            foreach (string variable in variables)
+            {
+                NodeId nodeId = new NodeId(variable, (ushort)2);
+                nodeIdStrings.Add(nodeId.ToString());
+            }
+            return server.ReadValues(nodeIdStrings);
+        }*/
+        public class DeviceInfo
+        {
+            public string ConnectMsg
+            { get; set; }
+            public string ConnectErrorMsg
+            { get; set; }
+            public string CncSoftVersion
+            { get; set; }
+            public string CncType
+            { get; set; }
+            public string CncId
+            { get; set; }
+            public string CncMode
+            { get; set; }
+            public string RunStatus
+            { get; set; }
+            public string Products
+            { get; set; }
+            public string CycleTime
+            { get; set; }
+            public string RemainTime
+            { get; set; }
+            public string MainProg
+            { get; set; }
+            public string SetFeedSpeed
+            { get; set; }
+            public string ActFeedSpeed
+            { get; set; }
+            public string SetSpSpeed
+            { get; set; }
+
+            public string ActSpSpeed
+            { get; set; }
+            public string AxisName
+            { get; set; }
+            public string FeedRate
+            { get; set; }
+            public string SpRate
+            { get; set; }
+            public string MaxPos1
+            { get; set; }
+            public string MaxPos2
+            { get; set; }
+            public string MaxPos3
+            { get; set; }
+            public string RelPos1
+            { get; set; }
+            public string RelPos2
+            { get; set; }
+            public string RelPos3
+            { get; set; }
+            public string RemainPos1
+            { get; set; }
+            public string RemainPos2
+            { get; set; }
+            public string RemainPos3
+            { get; set; }
+            public string ToolNo
+            { get; set; }
+            public string LenthX
+            { get; set; }
+            public string LenthZ
+            { get; set; }
+            public string RadiusCompenNum
+            { get; set; }
+            public string LengthCompenNum
+            { get; set; }
+            public string ToolAbradeRadius
+            { get; set; }
+            public string ToolEdgePos
+            { get; set; }
+            public string IsAlarm
+            { get; set; }
+            public List<AlmInfo> AlmMsg { get; set; } = new List<AlmInfo>();  
+ 
+            public string ToolLife
+            { get; set; }
+
+
+        }
+        public class AlmInfo
+        {
+            public string no { get; set; }
+            public string msg { get; set; }
+
+        }
+        public class Servlet 
+        {
+            public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response, string info) { }
+            public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }
+
+            public virtual void onCreate()
+            {
+
+            }
+        }
+
+
+        public void AddList(string dtime, string type, string url, string res)
+        {
+            this.Invoke(new Action(delegate ()
+            {
+                listView1.BeginUpdate();   //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
+                ListViewItem lvi = new ListViewItem();
+                lvi.Text = dtime;
+                lvi.SubItems.Add(type);
+                lvi.SubItems.Add(url);
+                lvi.SubItems.Add(res);
+                this.listView1.Items.Insert(0, lvi);
+                if (this.listView1.Items.Count > 100)
+                {
+                    this.listView1.Items.Clear();
+                }
+
+                this.listView1.EndUpdate();  //结束数据处理,UI界面一次性绘制。}
+
+            }));
+
+        }
+
+
+        public class MyServlet : Servlet
+        {
+            public override void onCreate()
+            {
+                base.onCreate();
+            }
+
+            public override void onGet(HttpListenerRequest request, HttpListenerResponse response, string info)
+            {
+                Console.WriteLine("GET:" + request.Url);
+
+
+                byte[] buffer = Encoding.UTF8.GetBytes(info);
+                //string sss = request.QueryString["ty"];
+                System.IO.Stream output = response.OutputStream;
+                output.Write(buffer, 0, buffer.Length);
+                // You must close the output stream.
+                output.Close();
+                //listener.Stop();
+            }
+
+            public override void onPost(HttpListenerRequest request, HttpListenerResponse response)
+            {
+                Console.WriteLine("POST:" + request.Url);
+                byte[] res = Encoding.UTF8.GetBytes("OK");
+                response.OutputStream.Write(res, 0, res.Length);
+            }
+        }
+
+    }
+}

+ 120 - 0
Kede/Form_Main.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 43 - 0
Kede/Kede.csproj

@@ -0,0 +1,43 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net5.0-windows</TargetFramework>
+    <Nullable>enable</Nullable>
+    <UseWindowsForms>true</UseWindowsForms>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
+    <PackageReference Include="OpcUaHelper" Version="2.1.3" />
+    <PackageReference Include="WinSCP" Version="6.3.4" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Reference Include="HslCommunication">
+      <HintPath>dll\HslCommunication.dll</HintPath>
+    </Reference>
+    <Reference Include="Opc.Ua.Client">
+      <HintPath>dll\Opc.Ua.Client.dll</HintPath>
+    </Reference>
+    <Reference Include="Opc.Ua.Core">
+      <HintPath>dll\Opc.Ua.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Siemens.OpcUA">
+      <HintPath>dll\Siemens.OpcUA.dll</HintPath>
+    </Reference>
+    <Reference Include="SinumerikOpcUaAPI">
+      <HintPath>dll\SinumerikOpcUaAPI.dll</HintPath>
+    </Reference>
+    <Reference Include="UAClientHelperAPI">
+      <HintPath>dll\UAClientHelperAPI.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Update="Form_Main.cs">
+      <SubType>Form</SubType>
+    </Compile>
+  </ItemGroup>
+
+</Project>

+ 8 - 0
Kede/Kede.csproj.user

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Compile Update="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+  </ItemGroup>
+</Project>

+ 72 - 0
Kede/Log/Log.cs

@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace YG
+{
+    public class Log
+    {
+        private static Log _log = new Log();
+        public static Log Instance { get { return _log; } }
+        LogDefaultList item = new LogDefaultList();
+        string Path = AppDomain.CurrentDomain.BaseDirectory+"YGLog";
+        ConcurrentQueue<LogDefaultList> qs = new ConcurrentQueue<LogDefaultList>();
+        System.IO.StreamWriter streamWriter;
+   
+        public Log()
+        {
+            if (!System.IO.Directory.Exists(Path))
+            {
+                Directory.CreateDirectory(Path);
+            }
+            ThreadWrite();
+        }
+        public void WriteLogAdd(string msg, string path=null)
+        {
+            qs.Enqueue(new LogDefaultList() { msg = msg, path = path });
+        }
+        public delegate void DelShowLog(string msg);
+        public event DelShowLog EveShowLog;
+        private void WriteLog(string msg, string path)
+        {
+            if (string.IsNullOrEmpty(path))
+            {
+                path = DateTime.Now.ToString("yyyy-MM-dd");
+            }
+            streamWriter = new System.IO.StreamWriter(Path + "\\" + path + ".txt", true);
+            streamWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "-->>>" + msg);
+            streamWriter.Close();
+            this.EveShowLog?.Invoke(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "-->>>" + msg);
+        }
+        private void ThreadWrite()
+        {
+            Task.Factory.StartNew(() =>
+            {
+
+                while (true)
+                {
+                    System.Threading.Thread.Sleep(20);
+                    if (qs.Count > 0)
+                    {
+                        if (qs.TryDequeue(out item))
+                        {
+                            WriteLog(item.msg, item.path);
+                        }
+                    }
+                }
+            });
+        }
+
+    }
+
+    public class LogDefaultList
+    {
+        public string path { get; set; }
+      
+        public string msg { get; set; }
+    }
+}

+ 23 - 0
Kede/Program.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace IMCS
+{
+    internal static class Program
+    {
+        /// <summary>
+        ///  The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.SetHighDpiMode(HighDpiMode.SystemAware);
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form_Main());
+        }
+    }
+}

+ 86 - 0
Kede/Utils/OpcUaUtils.cs

@@ -0,0 +1,86 @@
+using Newtonsoft.Json;
+using Opc.Ua;
+using OpcUaHelper;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Kede;
+using Newtonsoft.Json.Linq;
+namespace TestAgreement.utils
+{
+    internal class OpcUaUtils
+    {
+
+
+
+
+        public static ResponseBody OpcCaiji(string url,string userName,string password,List<string> list)
+        {
+
+            Console.WriteLine("===============科德机床OPCUa数据采集start================");
+            ResponseBody responseBody = new ResponseBody();
+            responseBody.code = 1;
+            try
+            {
+                /*string url = "opc.tcp://192.168.11.63:12686";
+                string userName = "";
+                string password = "";*/
+                OpcUaClient opcUaClient = new OpcUaClient();
+            
+            // 创建连接
+            if (!string.IsNullOrEmpty(url) && string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(password))
+            {
+               
+                    opcUaClient.ConnectServer(url);
+                
+            }
+            else if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
+            {
+               
+                    opcUaClient.UserIdentity = new UserIdentity(userName, password);
+                    opcUaClient.ConnectServer(url);
+                
+
+            }
+
+
+
+                // 批量获取值
+                List<NodeId> nodeIdList = new List<NodeId>();
+                list.ForEach(vo =>
+                {
+                    nodeIdList.Add(vo);
+                });
+
+                //nodeIdList.Add("ns=2;s=cncVariablesInfo/variables-var1");//主轴负载
+                //nodeIdList.Add("ns=2;s=cncVariablesInfo/variables-var1");//进给倍率
+                List<DataValue> values = opcUaClient.ReadNodes(nodeIdList.ToArray());
+                
+               
+                List<string> valuesList = new List<string>();
+                for (int i = 0; i < values.Count; i++)
+                {
+                    valuesList.Add(values[i].ToString());
+                   
+                }
+                responseBody.values = valuesList;
+                // 关闭连接
+                if (opcUaClient != null)
+                {
+                    opcUaClient.Disconnect();
+                }
+
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("连接失败报错:" + ex);
+                responseBody.code=0;
+                responseBody.msg = ex.Message;
+            }
+            return responseBody;
+        }
+    }
+}

+ 145 - 0
Kede/Utils/SftpWinSCPUtils.cs

@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceModel;
+using System;
+using System.Net;
+using System.Collections;
+using WinSCP;
+using Kede;
+using System.Text;
+using System.IO;
+
+namespace TestAgreement.utils
+{
+    internal class SftpWinSCPUtils
+    {
+
+        // 上传
+        public static ResponseBody sftpUpload(string localFilePath,string remoteFilePath,string ServerUrl, string UserName, string Password,string PortNumber) {
+
+            // 本地文件
+              //localFilePath = @"D:\X.nc";
+            ResponseBody responseBody = new ResponseBody();
+            if (!File.Exists(localFilePath))
+            {
+                responseBody.code = 0;
+                responseBody.msg = $"File '{localFilePath}' does not exist.";
+                return responseBody;
+            }
+            //localFilePath =localFilePath.Replace(@"\\",@"\");
+            // 远程文件地址
+             //remoteFilePath = "/testNc/X.nc";
+            //remoteFilePath = remoteFilePath;
+
+
+            responseBody.code = 1;
+            // 设定 SFTP 连接选项
+            SessionOptions sessionOptions = new SessionOptions
+            {
+                Protocol = Protocol.Sftp,
+                HostName = ServerUrl, // SFTP 服务器地址
+                UserName = UserName,     // 用户名
+                Password = Password,     // 密码
+                PortNumber = PortNumber.StringToInt(),
+            };
+
+            // 使用 WinSCP 会话
+            using (Session session = new Session())
+            {
+                // 连接到 SFTP 服务器
+                try
+                {
+                    // 设置不用公私钥的一定要设置这句话
+                    sessionOptions.GiveUpSecurityAndAcceptAnySshHostKey = true;
+                    // 不用公私钥的要这一句
+                    sessionOptions.FtpSecure = FtpSecure.None;
+                    Console.WriteLine("scp =======================");
+                    session.Open(sessionOptions);
+                    Console.WriteLine("scp end =======================");
+
+                    // 执行上传
+                    TransferOperationResult transferResult;
+                    transferResult = session.PutFiles(localFilePath, remoteFilePath, false);
+
+                    // 检查传输结果
+                    transferResult.Check();
+
+                    // 输出上传的文件名
+                    foreach (TransferEventArgs transfer in transferResult.Transfers)
+                    {
+                        Console.WriteLine("Uploaded: " + transfer.FileName);
+                    }
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine("Error: " + e.Message);
+                    responseBody.code = 0;
+                    responseBody.msg = e.Message;
+                }
+                finally
+                {
+                    // 断开连接
+                    session.Dispose();
+                }
+                return responseBody;
+            }
+
+        }
+
+
+        /*
+          下载nc程序
+         */
+        public void SftpDownload()
+        {
+            Console.WriteLine("====================sftp文件下载=========================");
+            // 远程文件路径
+            string localFilePath = @"C:\Users\Lenovo\Desktop\temp\testNcQ.nc";
+            // 本地文件路径
+            string remoteFilePath = "/testNc/testNcQ.nc";
+
+            // 设定 SFTP 连接选项
+            SessionOptions sessionOptions = new SessionOptions
+            {
+                Protocol = Protocol.Sftp,
+                HostName = "192.168.11.39", // SFTP 服务器地址
+                UserName = "root",     // 用户名l
+                Password = "root",     // 密码
+                PortNumber = 8081,
+            };
+
+            // 使用 WinSCP 会话
+            using (Session session = new Session())
+            {
+                try
+                {
+                    // 连接到 SFTP 服务器
+                    session.Open(sessionOptions);
+                    Console.WriteLine("Connected to SFTP server.");
+
+                    // 执行下载
+                    TransferOperationResult transferResult = session.GetFiles(remoteFilePath, localFilePath, false);
+                    transferResult.Check(); // 检查传输结果
+
+                    // 输出下载的文件名
+                    foreach (TransferEventArgs transfer in transferResult.Transfers)
+                    {
+                        Console.WriteLine("Downloaded: " + transfer.FileName);
+                    }
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine("Error: " + e.Message);
+                }
+                finally
+                {
+                    // 断开连接
+                    session.Dispose();
+                }
+            }
+
+
+        }
+    }
+}

BIN
Kede/bin/Debug/net5.0-windows/BouncyCastle.Crypto.dll


+ 1869 - 0
Kede/bin/Debug/net5.0-windows/Kede.deps.json

@@ -0,0 +1,1869 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v5.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v5.0": {
+      "Kede/1.0.0": {
+        "dependencies": {
+          "Newtonsoft.Json": "13.0.3",
+          "OpcUaHelper": "2.1.3",
+          "WinSCP": "6.3.4"
+        },
+        "runtime": {
+          "Kede.dll": {}
+        }
+      },
+      "Microsoft.AspNetCore.Connections.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Features": "2.2.0",
+          "System.IO.Pipelines": "4.5.2"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Connections.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Hosting/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.Http": "2.2.0",
+          "Microsoft.AspNetCore.Http.Extensions": "2.2.0",
+          "Microsoft.Extensions.Configuration": "2.2.0",
+          "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.2.0",
+          "Microsoft.Extensions.Configuration.FileExtensions": "2.2.0",
+          "Microsoft.Extensions.DependencyInjection": "2.2.0",
+          "Microsoft.Extensions.FileProviders.Physical": "2.2.0",
+          "Microsoft.Extensions.Hosting.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Logging": "2.2.0",
+          "Microsoft.Extensions.Options": "2.2.0",
+          "System.Diagnostics.DiagnosticSource": "4.5.0",
+          "System.Reflection.Metadata": "1.6.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Hosting.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Hosting.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Hosting.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Hosting.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Hosting.Server.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Features": "2.2.0",
+          "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Http/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.WebUtilities": "2.2.0",
+          "Microsoft.Extensions.ObjectPool": "2.2.0",
+          "Microsoft.Extensions.Options": "2.2.0",
+          "Microsoft.Net.Http.Headers": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Http.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Http.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Features": "2.2.0",
+          "System.Text.Encodings.Web": "4.5.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Http.Extensions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+          "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0",
+          "Microsoft.Net.Http.Headers": "2.2.0",
+          "System.Buffers": "4.5.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Http.Extensions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Http.Features/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Http.Features.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Server.Kestrel/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Hosting": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Core": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Https": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "2.2.1"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Server.Kestrel.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Server.Kestrel.Core/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.Http": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.WebUtilities": "2.2.0",
+          "Microsoft.Extensions.Configuration.Binder": "2.2.0",
+          "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Options": "2.2.0",
+          "Microsoft.Net.Http.Headers": "2.2.0",
+          "System.Memory": "4.5.1",
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.1",
+          "System.Security.Cryptography.Cng": "4.7.0",
+          "System.Threading.Tasks.Extensions": "4.5.1"
+        },
+        "runtime": {
+          "lib/netcoreapp2.1/Microsoft.AspNetCore.Server.Kestrel.Core.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Server.Kestrel.Https/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Core": "2.2.0"
+        },
+        "runtime": {
+          "lib/netcoreapp2.1/Microsoft.AspNetCore.Server.Kestrel.Https.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Connections.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets/2.2.1": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Options": "2.2.0"
+        },
+        "runtime": {
+          "lib/netcoreapp2.1/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll": {
+            "assemblyVersion": "2.2.1.0",
+            "fileVersion": "2.2.1.18346"
+          }
+        }
+      },
+      "Microsoft.AspNetCore.WebUtilities/2.2.0": {
+        "dependencies": {
+          "Microsoft.Net.Http.Headers": "2.2.0",
+          "System.Text.Encodings.Web": "4.5.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Binder/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "2.2.0",
+          "Microsoft.Extensions.FileProviders.Physical": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": {
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Physical/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0",
+          "Microsoft.Extensions.FileSystemGlobbing": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileSystemGlobbing/2.2.0": {
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Hosting.Abstractions/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Abstractions": "2.2.0",
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+          "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Logging.Abstractions": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Binder": "2.2.0",
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Options": "2.2.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Logging.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Logging.Abstractions/2.2.0": {
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.ObjectPool/2.2.0": {
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.ObjectPool.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Options/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+          "Microsoft.Extensions.Primitives": "2.2.0",
+          "System.ComponentModel.Annotations": "4.5.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Options.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Extensions.Primitives/2.2.0": {
+        "dependencies": {
+          "System.Memory": "4.5.1",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.1"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18315"
+          }
+        }
+      },
+      "Microsoft.Net.Http.Headers/2.2.0": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "2.2.0",
+          "System.Buffers": "4.5.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/Microsoft.Net.Http.Headers.dll": {
+            "assemblyVersion": "2.2.0.0",
+            "fileVersion": "2.2.0.18316"
+          }
+        }
+      },
+      "Microsoft.NETCore.Platforms/3.1.0": {},
+      "Microsoft.NETCore.Targets/1.1.0": {},
+      "Microsoft.Win32.SystemEvents/4.7.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0"
+        }
+      },
+      "Newtonsoft.Json/13.0.3": {
+        "runtime": {
+          "lib/netstandard2.0/Newtonsoft.Json.dll": {
+            "assemblyVersion": "13.0.0.0",
+            "fileVersion": "13.0.3.27908"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Bindings.Https": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Client": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Configuration": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Gds.Client.Common": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Gds.Server.Common": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Server": "1.4.365.23"
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Bindings.Https/1.4.365.23": {
+        "dependencies": {
+          "Microsoft.AspNetCore.Server.Kestrel": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Https": "2.2.0",
+          "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "2.2.1",
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23",
+          "System.Net.Http": "4.3.4"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Bindings.Https.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Client/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Client.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Configuration/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Configuration.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Core/1.4.365.23": {
+        "dependencies": {
+          "Newtonsoft.Json": "13.0.3",
+          "OPCFoundation.NetStandard.Opc.Ua.Security.Certificates": "1.4.365.23",
+          "System.Data.Common": "4.3.0",
+          "System.Net.NameResolution": "4.3.0",
+          "System.ServiceModel.Primitives": "4.8.0"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Core.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Gds.Client.Common/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Client": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Configuration": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Gds.Client.Common.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Gds.Server.Common/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23",
+          "OPCFoundation.NetStandard.Opc.Ua.Server": "1.4.365.23",
+          "Portable.BouncyCastle": "1.8.9"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Gds.Server.Common.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Security.Certificates/1.4.365.23": {
+        "dependencies": {
+          "System.Formats.Asn1": "5.0.0"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Security.Certificates.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OPCFoundation.NetStandard.Opc.Ua.Server/1.4.365.23": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua.Core": "1.4.365.23"
+        },
+        "runtime": {
+          "lib/netstandard2.1/Opc.Ua.Server.dll": {
+            "assemblyVersion": "1.4.365.0",
+            "fileVersion": "1.4.365.23"
+          }
+        }
+      },
+      "OpcUaHelper/2.1.3": {
+        "dependencies": {
+          "OPCFoundation.NetStandard.Opc.Ua": "1.4.365.23"
+        },
+        "runtime": {
+          "lib/netstandard2.1/OpcUaHelper.dll": {
+            "assemblyVersion": "2.1.3.0",
+            "fileVersion": "2.1.3.0"
+          }
+        }
+      },
+      "Portable.BouncyCastle/1.8.9": {
+        "runtime": {
+          "lib/netstandard2.0/BouncyCastle.Crypto.dll": {
+            "assemblyVersion": "1.8.9.0",
+            "fileVersion": "1.8.9.1"
+          }
+        }
+      },
+      "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.native.System/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0"
+        }
+      },
+      "runtime.native.System.Net.Http/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0"
+        }
+      },
+      "runtime.native.System.Security.Cryptography.Apple/4.3.0": {
+        "dependencies": {
+          "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
+        }
+      },
+      "runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+        "dependencies": {
+          "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+          "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {},
+      "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {},
+      "System.Buffers/4.5.0": {},
+      "System.Collections/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Collections.Concurrent/4.3.0": {
+        "dependencies": {
+          "System.Collections": "4.3.0",
+          "System.Diagnostics.Debug": "4.3.0",
+          "System.Diagnostics.Tracing": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.Reflection": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Threading": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.ComponentModel.Annotations/4.5.0": {},
+      "System.Data.Common/4.3.0": {
+        "dependencies": {
+          "System.Collections": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Text.RegularExpressions": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.Diagnostics.Debug/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/4.5.0": {},
+      "System.Diagnostics.Tracing/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Drawing.Common/4.7.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.Win32.SystemEvents": "4.7.0"
+        }
+      },
+      "System.Formats.Asn1/5.0.0": {},
+      "System.Globalization/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Globalization.Calendars/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Globalization": "4.3.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Globalization.Extensions/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Globalization": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0"
+        }
+      },
+      "System.IO/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.IO.FileSystem/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.IO": "4.3.0",
+          "System.IO.FileSystem.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.3.0": {
+        "dependencies": {
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.IO.Pipelines/4.5.2": {
+        "runtime": {
+          "lib/netcoreapp2.1/System.IO.Pipelines.dll": {
+            "assemblyVersion": "4.0.0.1",
+            "fileVersion": "4.6.26919.2"
+          }
+        }
+      },
+      "System.Linq/4.3.0": {
+        "dependencies": {
+          "System.Collections": "4.3.0",
+          "System.Diagnostics.Debug": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0"
+        }
+      },
+      "System.Memory/4.5.1": {},
+      "System.Net.Http/4.3.4": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Collections": "4.3.0",
+          "System.Diagnostics.Debug": "4.3.0",
+          "System.Diagnostics.DiagnosticSource": "4.5.0",
+          "System.Diagnostics.Tracing": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.Globalization.Extensions": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.IO.FileSystem": "4.3.0",
+          "System.Net.Primitives": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Security.Cryptography.Algorithms": "4.3.0",
+          "System.Security.Cryptography.Encoding": "4.3.0",
+          "System.Security.Cryptography.OpenSsl": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Security.Cryptography.X509Certificates": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading": "4.3.0",
+          "System.Threading.Tasks": "4.3.0",
+          "runtime.native.System": "4.3.0",
+          "runtime.native.System.Net.Http": "4.3.0",
+          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "System.Net.NameResolution/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Collections": "4.3.0",
+          "System.Diagnostics.Tracing": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.Net.Primitives": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Security.Principal.Windows": "4.7.0",
+          "System.Threading": "4.3.0",
+          "System.Threading.Tasks": "4.3.0",
+          "runtime.native.System": "4.3.0"
+        }
+      },
+      "System.Net.Primitives/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Handles": "4.3.0"
+        }
+      },
+      "System.Numerics.Vectors/4.5.0": {},
+      "System.Private.ServiceModel/4.8.0": {
+        "dependencies": {
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Reflection.DispatchProxy": "4.7.1",
+          "System.Security.Cryptography.Xml": "4.7.0",
+          "System.Security.Principal.Windows": "4.7.0"
+        },
+        "runtime": {
+          "lib/netstandard2.0/System.Private.ServiceModel.dll": {
+            "assemblyVersion": "4.8.0.0",
+            "fileVersion": "4.800.20.51907"
+          }
+        }
+      },
+      "System.Reflection/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.IO": "4.3.0",
+          "System.Reflection.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Reflection.DispatchProxy/4.7.1": {},
+      "System.Reflection.Metadata/1.6.0": {},
+      "System.Reflection.Primitives/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Resources.ResourceManager/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Globalization": "4.3.0",
+          "System.Reflection": "4.3.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Runtime/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0"
+        }
+      },
+      "System.Runtime.CompilerServices.Unsafe/4.5.1": {},
+      "System.Runtime.Extensions/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Runtime.Handles/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Runtime.InteropServices/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Reflection": "4.3.0",
+          "System.Reflection.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Handles": "4.3.0"
+        }
+      },
+      "System.Runtime.Numerics/4.3.0": {
+        "dependencies": {
+          "System.Globalization": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0"
+        }
+      },
+      "System.Security.AccessControl/4.7.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Security.Principal.Windows": "4.7.0"
+        }
+      },
+      "System.Security.Cryptography.Algorithms/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Collections": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Runtime.Numerics": "4.3.0",
+          "System.Security.Cryptography.Encoding": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "runtime.native.System.Security.Cryptography.Apple": "4.3.0",
+          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "System.Security.Cryptography.Cng/4.7.0": {},
+      "System.Security.Cryptography.Csp/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.IO": "4.3.0",
+          "System.Reflection": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Security.Cryptography.Algorithms": "4.3.0",
+          "System.Security.Cryptography.Encoding": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading": "4.3.0"
+        }
+      },
+      "System.Security.Cryptography.Encoding/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Collections": "4.3.0",
+          "System.Collections.Concurrent": "4.3.0",
+          "System.Linq": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "System.Security.Cryptography.OpenSsl/4.3.0": {
+        "dependencies": {
+          "System.Collections": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Runtime.Numerics": "4.3.0",
+          "System.Security.Cryptography.Algorithms": "4.3.0",
+          "System.Security.Cryptography.Encoding": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "System.Security.Cryptography.Pkcs/4.7.0": {
+        "dependencies": {
+          "System.Security.Cryptography.Cng": "4.7.0"
+        }
+      },
+      "System.Security.Cryptography.Primitives/4.3.0": {
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Threading": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.Security.Cryptography.X509Certificates/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "System.Collections": "4.3.0",
+          "System.Diagnostics.Debug": "4.3.0",
+          "System.Globalization": "4.3.0",
+          "System.Globalization.Calendars": "4.3.0",
+          "System.IO": "4.3.0",
+          "System.IO.FileSystem": "4.3.0",
+          "System.IO.FileSystem.Primitives": "4.3.0",
+          "System.Resources.ResourceManager": "4.3.0",
+          "System.Runtime": "4.3.0",
+          "System.Runtime.Extensions": "4.3.0",
+          "System.Runtime.Handles": "4.3.0",
+          "System.Runtime.InteropServices": "4.3.0",
+          "System.Runtime.Numerics": "4.3.0",
+          "System.Security.Cryptography.Algorithms": "4.3.0",
+          "System.Security.Cryptography.Cng": "4.7.0",
+          "System.Security.Cryptography.Csp": "4.3.0",
+          "System.Security.Cryptography.Encoding": "4.3.0",
+          "System.Security.Cryptography.OpenSsl": "4.3.0",
+          "System.Security.Cryptography.Primitives": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading": "4.3.0",
+          "runtime.native.System": "4.3.0",
+          "runtime.native.System.Net.Http": "4.3.0",
+          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+        }
+      },
+      "System.Security.Cryptography.Xml/4.7.0": {
+        "dependencies": {
+          "System.Security.Cryptography.Pkcs": "4.7.0",
+          "System.Security.Permissions": "4.7.0"
+        }
+      },
+      "System.Security.Permissions/4.7.0": {
+        "dependencies": {
+          "System.Security.AccessControl": "4.7.0",
+          "System.Windows.Extensions": "4.7.0"
+        }
+      },
+      "System.Security.Principal.Windows/4.7.0": {},
+      "System.ServiceModel.Primitives/4.8.0": {
+        "dependencies": {
+          "System.Private.ServiceModel": "4.8.0"
+        },
+        "runtime": {
+          "lib/netcoreapp2.1/System.ServiceModel.Primitives.dll": {
+            "assemblyVersion": "4.8.0.0",
+            "fileVersion": "4.800.20.51907"
+          },
+          "lib/netcoreapp2.1/System.ServiceModel.dll": {
+            "assemblyVersion": "4.0.0.0",
+            "fileVersion": "4.800.20.51907"
+          }
+        }
+      },
+      "System.Text.Encoding/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Text.Encodings.Web/4.5.0": {},
+      "System.Text.RegularExpressions/4.3.0": {
+        "dependencies": {
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Threading/4.3.0": {
+        "dependencies": {
+          "System.Runtime": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        }
+      },
+      "System.Threading.Tasks/4.3.0": {
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "3.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        }
+      },
+      "System.Threading.Tasks.Extensions/4.5.1": {},
+      "System.Windows.Extensions/4.7.0": {
+        "dependencies": {
+          "System.Drawing.Common": "4.7.0"
+        }
+      },
+      "WinSCP/6.3.4": {
+        "runtime": {
+          "lib/netstandard2.0/WinSCPnet.dll": {
+            "assemblyVersion": "1.15.0.14955",
+            "fileVersion": "1.15.0.14955"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Kede/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "Microsoft.AspNetCore.Connections.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Aqr/16Cu5XmGv7mLKJvXRxhhd05UJ7cTTSaUV4MZ3ynAzfgWjsAdpIU8FWuxwAjmVdmI8oOWuVDrbs+sRkhKnA==",
+      "path": "microsoft.aspnetcore.connections.abstractions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.connections.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Hosting/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7t4RbUGugpHtQmzAkc9fpDdYJg6t/jcB2VVnjensVYbZFnLDU8pNrG0hrekk1DQG7P2UzpSqKLzDsFF0/lkkbw==",
+      "path": "microsoft.aspnetcore.hosting/2.2.0",
+      "hashPath": "microsoft.aspnetcore.hosting.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Hosting.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ubycklv+ZY7Kutdwuy1W4upWcZ6VFR8WUXU7l7B2+mvbDBBPAcfpi+E+Y5GFe+Q157YfA3C49D2GCjAZc7Mobw==",
+      "path": "microsoft.aspnetcore.hosting.abstractions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.hosting.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Hosting.Server.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1PMijw8RMtuQF60SsD/JlKtVfvh4NORAhF4wjysdABhlhTrYmtgssqyncR0Stq5vqtjplZcj6kbT4LRTglt9IQ==",
+      "path": "microsoft.aspnetcore.hosting.server.abstractions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.hosting.server.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Http/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-YogBSMotWPAS/X5967pZ+yyWPQkThxhmzAwyCHCSSldzYBkW5W5d6oPfBaPqQOnSHYTpSOSOkpZoAce0vwb6+A==",
+      "path": "microsoft.aspnetcore.http/2.2.0",
+      "hashPath": "microsoft.aspnetcore.http.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Http.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==",
+      "path": "microsoft.aspnetcore.http.abstractions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.http.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Http.Extensions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==",
+      "path": "microsoft.aspnetcore.http.extensions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.http.extensions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Http.Features/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==",
+      "path": "microsoft.aspnetcore.http.features/2.2.0",
+      "hashPath": "microsoft.aspnetcore.http.features.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Server.Kestrel/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-D0vGB8Tp0UNMiAhT+pwAVeqDDx2OFrfpu/plwm0WhA+1DZvTLc99eDwGISL6LAY8x7a12lhl9w7/m+VdoyDu8Q==",
+      "path": "microsoft.aspnetcore.server.kestrel/2.2.0",
+      "hashPath": "microsoft.aspnetcore.server.kestrel.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Server.Kestrel.Core/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-F6/Vesd3ODq/ISbHfcvfRf7IzRtTvrNX8VA36Knm5e7bteJhoRA2GKQUVQ+neoO1njLvaQKnjcA3rdCZ6AF6cg==",
+      "path": "microsoft.aspnetcore.server.kestrel.core/2.2.0",
+      "hashPath": "microsoft.aspnetcore.server.kestrel.core.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Server.Kestrel.Https/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-nEH5mU6idUYS3/+9BKw2stMOM25ZdGwIH4P4kyj6PVkMPgQUTkBQ7l/ScPkepdhejcOlPa+g3+M4dYsSYPUJ8g==",
+      "path": "microsoft.aspnetcore.server.kestrel.https/2.2.0",
+      "hashPath": "microsoft.aspnetcore.server.kestrel.https.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-j1ai2CG8BGp4mYf2TWSFjjy1pRgW9XbqhdR4EOVvrlFVbcpEPfXNIPEdjkcgK+txWCupGzkFnFF8oZsASMtmyw==",
+      "path": "microsoft.aspnetcore.server.kestrel.transport.abstractions/2.2.0",
+      "hashPath": "microsoft.aspnetcore.server.kestrel.transport.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets/2.2.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-tzRdyQ0qrMJ5YS0qsXfmhVd/kr25IzLpayoIAvU1yi27wqsqxXVPADDEv0S9PaS7xn6bpMFit8kZw92IICDSWg==",
+      "path": "microsoft.aspnetcore.server.kestrel.transport.sockets/2.2.1",
+      "hashPath": "microsoft.aspnetcore.server.kestrel.transport.sockets.2.2.1.nupkg.sha512"
+    },
+    "Microsoft.AspNetCore.WebUtilities/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==",
+      "path": "microsoft.aspnetcore.webutilities/2.2.0",
+      "hashPath": "microsoft.aspnetcore.webutilities.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
+      "path": "microsoft.extensions.configuration/2.2.0",
+      "hashPath": "microsoft.extensions.configuration.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
+      "path": "microsoft.extensions.configuration.abstractions/2.2.0",
+      "hashPath": "microsoft.extensions.configuration.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Binder/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
+      "path": "microsoft.extensions.configuration.binder/2.2.0",
+      "hashPath": "microsoft.extensions.configuration.binder.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.EnvironmentVariables/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-gIqt9PkKO01hZ0zmHnWrZ1E45MDreZTVoyDbL1kMWKtDgxxWTJpYtESTEcgpvR1uB1iex1zKGYzJpOMgmuP5TQ==",
+      "path": "microsoft.extensions.configuration.environmentvariables/2.2.0",
+      "hashPath": "microsoft.extensions.configuration.environmentvariables.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.FileExtensions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-H1qCpWBC8Ed4tguTR/qYkbb3F6DI5Su3t8xyFo3/5MzAd8PwPpHzgX8X04KbBxKmk173Pb64x7xMHarczVFQUA==",
+      "path": "microsoft.extensions.configuration.fileextensions/2.2.0",
+      "hashPath": "microsoft.extensions.configuration.fileextensions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.DependencyInjection/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+      "path": "microsoft.extensions.dependencyinjection/2.2.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.DependencyInjection.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==",
+      "path": "microsoft.extensions.dependencyinjection.abstractions/2.2.0",
+      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==",
+      "path": "microsoft.extensions.fileproviders.abstractions/2.2.0",
+      "hashPath": "microsoft.extensions.fileproviders.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Physical/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-tbDHZnBJkjYd9NjlRZ9ondDiv1Te3KYCTW2RWpR1B0e1Z8+EnFRo7qNnHkkSCixLdlPZzhjlX24d/PixQ7w2dA==",
+      "path": "microsoft.extensions.fileproviders.physical/2.2.0",
+      "hashPath": "microsoft.extensions.fileproviders.physical.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileSystemGlobbing/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ZSsHZp3PyW6vk37tDEdypjgGlNtpJ0EixBMOfUod2Thx7GtwfFSAQXUQx8a8BN8vfWKGGMbp7jPWdoHx/At4wQ==",
+      "path": "microsoft.extensions.filesystemglobbing/2.2.0",
+      "hashPath": "microsoft.extensions.filesystemglobbing.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Hosting.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==",
+      "path": "microsoft.extensions.hosting.abstractions/2.2.0",
+      "hashPath": "microsoft.extensions.hosting.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
+      "path": "microsoft.extensions.logging/2.2.0",
+      "hashPath": "microsoft.extensions.logging.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Logging.Abstractions/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==",
+      "path": "microsoft.extensions.logging.abstractions/2.2.0",
+      "hashPath": "microsoft.extensions.logging.abstractions.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.ObjectPool/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-gA8H7uQOnM5gb+L0uTNjViHYr+hRDqCdfugheGo/MxQnuHzmhhzCBTIPm19qL1z1Xe0NEMabfcOBGv9QghlZ8g==",
+      "path": "microsoft.extensions.objectpool/2.2.0",
+      "hashPath": "microsoft.extensions.objectpool.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Options/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
+      "path": "microsoft.extensions.options/2.2.0",
+      "hashPath": "microsoft.extensions.options.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Primitives/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
+      "path": "microsoft.extensions.primitives/2.2.0",
+      "hashPath": "microsoft.extensions.primitives.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.Net.Http.Headers/2.2.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==",
+      "path": "microsoft.net.http.headers/2.2.0",
+      "hashPath": "microsoft.net.http.headers.2.2.0.nupkg.sha512"
+    },
+    "Microsoft.NETCore.Platforms/3.1.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
+      "path": "microsoft.netcore.platforms/3.1.0",
+      "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
+    },
+    "Microsoft.NETCore.Targets/1.1.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
+      "path": "microsoft.netcore.targets/1.1.0",
+      "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
+    },
+    "Microsoft.Win32.SystemEvents/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==",
+      "path": "microsoft.win32.systemevents/4.7.0",
+      "hashPath": "microsoft.win32.systemevents.4.7.0.nupkg.sha512"
+    },
+    "Newtonsoft.Json/13.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
+      "path": "newtonsoft.json/13.0.3",
+      "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-u2S/kqNIHgNYEXPGiWBBK2uDCYFomD4/dK9c9foJfA/BdsQxb9TTdTOmY7XooX0oqCCVXuIx4a9O27l+cgloyA==",
+      "path": "opcfoundation.netstandard.opc.ua/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Bindings.Https/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-eCco3efhkljI6Jd9qUfZM4qR+JnbvKPZftO9pK52hCv4yaY6rKxw5EXOtYFB9b/i1BzPH9QLG2KaM/jlhfyCbA==",
+      "path": "opcfoundation.netstandard.opc.ua.bindings.https/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.bindings.https.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Client/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-tTN54ams2MoSMz9bPLU7OX5ntNkmAPk73yW4RNcreNo6YWI5XkbJ0GFwvqETkls0EiH9ApbP328qLdQ8t3iEwA==",
+      "path": "opcfoundation.netstandard.opc.ua.client/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.client.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Configuration/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-oEBnnCe1SVytFnXdGEx7P5aoeBj2Z1OwunV0CgpjNGawNL3InA2LZ06BUSC/DW/S0zC4khgLSSOmLe9e/xtUyQ==",
+      "path": "opcfoundation.netstandard.opc.ua.configuration/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.configuration.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Core/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-XYYxQfW7trMTO/BWzoanC7nF4sczbUJ58736Ju4g6kLttDf8utIGlYBLA56GE8H54tFOadJya4Y8RYUZHaSiWw==",
+      "path": "opcfoundation.netstandard.opc.ua.core/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.core.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Gds.Client.Common/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-YtIk+FuS2TmbSvLecf8X1jli7xEjmY3SsDo/TxkQ3I3PYDmpL23oiTf3XzEZ48SgjHRjUMUVYcDrqgxEFeF+dg==",
+      "path": "opcfoundation.netstandard.opc.ua.gds.client.common/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.gds.client.common.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Gds.Server.Common/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-zqk3xgl6PAXuduVHWfCvMpKiejc1zi0NYyVkXAX/cVfDh/8TLiomH81aI+HJZLVmcbzE/IT5CZrcFbdsXVrwzQ==",
+      "path": "opcfoundation.netstandard.opc.ua.gds.server.common/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.gds.server.common.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Security.Certificates/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-0Ojm89Lmm7as2XRB6dIQrLPdio7duhsz5gjc/Q/8qttifotEl6CtwX+jnzdqWqi81QLQAxSImiiHLDX5iMw9MQ==",
+      "path": "opcfoundation.netstandard.opc.ua.security.certificates/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.security.certificates.1.4.365.23.nupkg.sha512"
+    },
+    "OPCFoundation.NetStandard.Opc.Ua.Server/1.4.365.23": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-N7yYLi98apfXqEuQe66Y91RZ2IyGABHVgkHULy/DMPGruKUSS4HmcTX59XBLhXefJfpbx5c6R7slXqxcxrMtlQ==",
+      "path": "opcfoundation.netstandard.opc.ua.server/1.4.365.23",
+      "hashPath": "opcfoundation.netstandard.opc.ua.server.1.4.365.23.nupkg.sha512"
+    },
+    "OpcUaHelper/2.1.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-77ZLMMXRW+cjjoD6OeVQHPXEIwtUjYEcp2OlP6ND3VC6O2SmsQ2Al8wzqYe2fBZJqvT/wxicP6q/DRwvF8VKrw==",
+      "path": "opcuahelper/2.1.3",
+      "hashPath": "opcuahelper.2.1.3.nupkg.sha512"
+    },
+    "Portable.BouncyCastle/1.8.9": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-wlJo8aFoeyl+W93iFXTK5ShzDYk5WBqoUPjTNEM0Xv9kn1H+4hmuCjF0/n8HLm9Nnp1aY6KNndWqQTNk+NGgRQ==",
+      "path": "portable.bouncycastle/1.8.9",
+      "hashPath": "portable.bouncycastle.1.8.9.nupkg.sha512"
+    },
+    "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7VSGO0URRKoMEAq0Sc9cRz8mb6zbyx/BZDEWhgPdzzpmFhkam3fJ1DAGWFXBI4nGlma+uPKpfuMQP5LXRnOH5g==",
+      "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-0oAaTAm6e2oVH+/Zttt0cuhGaePQYKII1dY8iaqP7CvOpVKgLybKRFvQjXR2LtxXOXTVPNv14j0ot8uV+HrUmw==",
+      "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-G24ibsCNi5Kbz0oXWynBoRgtGvsw5ZSVEWjv13/KiCAM8C6wz9zzcCniMeQFIkJ2tasjo2kXlvlBZhplL51kGg==",
+      "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.native.System/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
+      "path": "runtime.native.system/4.3.0",
+      "hashPath": "runtime.native.system.4.3.0.nupkg.sha512"
+    },
+    "runtime.native.System.Net.Http/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
+      "path": "runtime.native.system.net.http/4.3.0",
+      "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512"
+    },
+    "runtime.native.System.Security.Cryptography.Apple/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
+      "path": "runtime.native.system.security.cryptography.apple/4.3.0",
+      "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
+    },
+    "runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-QR1OwtwehHxSeQvZKXe+iSd+d3XZNkEcuWMFYa2i0aG1l+lR739HPicKMlTbJst3spmeekDVBUS7SeS26s4U/g==",
+      "path": "runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-I+GNKGg2xCHueRd1m9PzeEW7WLbNNLznmTuEi8/vZX71HudUbx1UTwlGkiwMri7JLl8hGaIAWnA/GONhu+LOyQ==",
+      "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1Z3TAq1ytS1IBRtPXJvEUZdVsfWfeNEhBkbiOCGEl9wwAfsjP2lz3ZFDx5tq8p60/EqbS0HItG5piHuB71RjoA==",
+      "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==",
+      "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0",
+      "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
+    },
+    "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-6mU/cVmmHtQiDXhnzUImxIcDL48GbTk+TsptXyJA+MIOG9LRjPoAQC/qBFB7X+UNyK86bmvGwC8t+M66wsYC8w==",
+      "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-vjwG0GGcTW/PPg6KVud8F9GLWYuAV1rrw1BKAqY0oh4jcUqg15oYF1+qkGR2x2ZHM4DQnWKQ7cJgYbfncz/lYg==",
+      "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7KMFpTkHC/zoExs+PwP8jDCWcrK9H6L7soowT80CUx3e+nxP/AFnq0AQAW5W76z2WYbLAYCRyPfwYFG6zkvQRw==",
+      "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-xrlmRCnKZJLHxyyLIqkZjNXqgxnKdZxfItrPkjI+6pkRo5lHX8YvSZlWrSI5AVwLMi4HbNWP7064hcAWeZKp5w==",
+      "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-leXiwfiIkW7Gmn7cgnNcdtNAU70SjmKW3jxGj1iKHOvdn0zRWsgv/l2OJUO5zdGdiv2VRFnAsxxhDgMzofPdWg==",
+      "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.2",
+      "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.2.nupkg.sha512"
+    },
+    "System.Buffers/4.5.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A==",
+      "path": "system.buffers/4.5.0",
+      "hashPath": "system.buffers.4.5.0.nupkg.sha512"
+    },
+    "System.Collections/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
+      "path": "system.collections/4.3.0",
+      "hashPath": "system.collections.4.3.0.nupkg.sha512"
+    },
+    "System.Collections.Concurrent/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
+      "path": "system.collections.concurrent/4.3.0",
+      "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512"
+    },
+    "System.ComponentModel.Annotations/4.5.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==",
+      "path": "system.componentmodel.annotations/4.5.0",
+      "hashPath": "system.componentmodel.annotations.4.5.0.nupkg.sha512"
+    },
+    "System.Data.Common/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-lm6E3T5u7BOuEH0u18JpbJHxBfOJPuCyl4Kg1RH10ktYLp5uEEE1xKrHW56/We4SnZpGAuCc9N0MJpSDhTHZGQ==",
+      "path": "system.data.common/4.3.0",
+      "hashPath": "system.data.common.4.3.0.nupkg.sha512"
+    },
+    "System.Diagnostics.Debug/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
+      "path": "system.diagnostics.debug/4.3.0",
+      "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
+    },
+    "System.Diagnostics.DiagnosticSource/4.5.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-eIHRELiYDQvsMToML81QFkXEEYXUSUT2F28t1SGrevWqP+epFdw80SyAXIKTXOHrIEXReFOEnEr7XlGiC2GgOg==",
+      "path": "system.diagnostics.diagnosticsource/4.5.0",
+      "hashPath": "system.diagnostics.diagnosticsource.4.5.0.nupkg.sha512"
+    },
+    "System.Diagnostics.Tracing/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
+      "path": "system.diagnostics.tracing/4.3.0",
+      "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512"
+    },
+    "System.Drawing.Common/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==",
+      "path": "system.drawing.common/4.7.0",
+      "hashPath": "system.drawing.common.4.7.0.nupkg.sha512"
+    },
+    "System.Formats.Asn1/5.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w==",
+      "path": "system.formats.asn1/5.0.0",
+      "hashPath": "system.formats.asn1.5.0.0.nupkg.sha512"
+    },
+    "System.Globalization/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
+      "path": "system.globalization/4.3.0",
+      "hashPath": "system.globalization.4.3.0.nupkg.sha512"
+    },
+    "System.Globalization.Calendars/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
+      "path": "system.globalization.calendars/4.3.0",
+      "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512"
+    },
+    "System.Globalization.Extensions/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
+      "path": "system.globalization.extensions/4.3.0",
+      "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
+    },
+    "System.IO/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
+      "path": "system.io/4.3.0",
+      "hashPath": "system.io.4.3.0.nupkg.sha512"
+    },
+    "System.IO.FileSystem/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
+      "path": "system.io.filesystem/4.3.0",
+      "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
+    },
+    "System.IO.FileSystem.Primitives/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
+      "path": "system.io.filesystem.primitives/4.3.0",
+      "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
+    },
+    "System.IO.Pipelines/4.5.2": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-NOC/SO4gSX6t0tB25xxDPqPEzkksuzW7NVFBTQGAkjXXUPQl7ZtyE83T7tUCP2huFBbPombfCKvq1Ox1aG8D9w==",
+      "path": "system.io.pipelines/4.5.2",
+      "hashPath": "system.io.pipelines.4.5.2.nupkg.sha512"
+    },
+    "System.Linq/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
+      "path": "system.linq/4.3.0",
+      "hashPath": "system.linq.4.3.0.nupkg.sha512"
+    },
+    "System.Memory/4.5.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-sDJYJpGtTgx+23Ayu5euxG5mAXWdkDb4+b0rD0Cab0M1oQS9H0HXGPriKcqpXuiJDTV7fTp/d+fMDJmnr6sNvA==",
+      "path": "system.memory/4.5.1",
+      "hashPath": "system.memory.4.5.1.nupkg.sha512"
+    },
+    "System.Net.Http/4.3.4": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==",
+      "path": "system.net.http/4.3.4",
+      "hashPath": "system.net.http.4.3.4.nupkg.sha512"
+    },
+    "System.Net.NameResolution/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==",
+      "path": "system.net.nameresolution/4.3.0",
+      "hashPath": "system.net.nameresolution.4.3.0.nupkg.sha512"
+    },
+    "System.Net.Primitives/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
+      "path": "system.net.primitives/4.3.0",
+      "hashPath": "system.net.primitives.4.3.0.nupkg.sha512"
+    },
+    "System.Numerics.Vectors/4.5.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==",
+      "path": "system.numerics.vectors/4.5.0",
+      "hashPath": "system.numerics.vectors.4.5.0.nupkg.sha512"
+    },
+    "System.Private.ServiceModel/4.8.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-V21eCo3u2GOzq/BOSD3hxlJQCOp71RHXI0TxzbFp8k5Gtnu/X2bBYETpiRFUsUojJz5MwUNjtW8BdwdUnwP05g==",
+      "path": "system.private.servicemodel/4.8.0",
+      "hashPath": "system.private.servicemodel.4.8.0.nupkg.sha512"
+    },
+    "System.Reflection/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
+      "path": "system.reflection/4.3.0",
+      "hashPath": "system.reflection.4.3.0.nupkg.sha512"
+    },
+    "System.Reflection.DispatchProxy/4.7.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-C1sMLwIG6ILQ2bmOT4gh62V6oJlyF4BlHcVMrOoor49p0Ji2tA8QAoqyMcIhAdH6OHKJ8m7BU+r4LK2CUEOKqw==",
+      "path": "system.reflection.dispatchproxy/4.7.1",
+      "hashPath": "system.reflection.dispatchproxy.4.7.1.nupkg.sha512"
+    },
+    "System.Reflection.Metadata/1.6.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==",
+      "path": "system.reflection.metadata/1.6.0",
+      "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512"
+    },
+    "System.Reflection.Primitives/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
+      "path": "system.reflection.primitives/4.3.0",
+      "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
+    },
+    "System.Resources.ResourceManager/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
+      "path": "system.resources.resourcemanager/4.3.0",
+      "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
+    },
+    "System.Runtime/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
+      "path": "system.runtime/4.3.0",
+      "hashPath": "system.runtime.4.3.0.nupkg.sha512"
+    },
+    "System.Runtime.CompilerServices.Unsafe/4.5.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==",
+      "path": "system.runtime.compilerservices.unsafe/4.5.1",
+      "hashPath": "system.runtime.compilerservices.unsafe.4.5.1.nupkg.sha512"
+    },
+    "System.Runtime.Extensions/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
+      "path": "system.runtime.extensions/4.3.0",
+      "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
+    },
+    "System.Runtime.Handles/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
+      "path": "system.runtime.handles/4.3.0",
+      "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
+    },
+    "System.Runtime.InteropServices/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
+      "path": "system.runtime.interopservices/4.3.0",
+      "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
+    },
+    "System.Runtime.Numerics/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
+      "path": "system.runtime.numerics/4.3.0",
+      "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512"
+    },
+    "System.Security.AccessControl/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
+      "path": "system.security.accesscontrol/4.7.0",
+      "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Algorithms/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
+      "path": "system.security.cryptography.algorithms/4.3.0",
+      "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Cng/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-4WQjFuypWtxb/bl/YwEE7LYGn4fgpsikFfBU6xwEm4YBYiRAhXAEJ62lILBu2JJSFbClIAntFTGfDZafn8yZTg==",
+      "path": "system.security.cryptography.cng/4.7.0",
+      "hashPath": "system.security.cryptography.cng.4.7.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Csp/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
+      "path": "system.security.cryptography.csp/4.3.0",
+      "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Encoding/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
+      "path": "system.security.cryptography.encoding/4.3.0",
+      "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.OpenSsl/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
+      "path": "system.security.cryptography.openssl/4.3.0",
+      "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Pkcs/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-0Srzh6YlhjuMxaqMyeCCdZs22cucaUAG6SKDd3gNHBJmre0VZ71ekzWu9rvLD4YXPetyNdPvV6Qst+8C++9v3Q==",
+      "path": "system.security.cryptography.pkcs/4.7.0",
+      "hashPath": "system.security.cryptography.pkcs.4.7.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Primitives/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
+      "path": "system.security.cryptography.primitives/4.3.0",
+      "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.X509Certificates/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
+      "path": "system.security.cryptography.x509certificates/4.3.0",
+      "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512"
+    },
+    "System.Security.Cryptography.Xml/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-B6pAyxMvXGbZemb+ER877KSr6OKis+qAdxhhKKK36I6sgj2js8mbcEVviZEHYV8XRTWjbKsAq8Z/zoaegA30dA==",
+      "path": "system.security.cryptography.xml/4.7.0",
+      "hashPath": "system.security.cryptography.xml.4.7.0.nupkg.sha512"
+    },
+    "System.Security.Permissions/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==",
+      "path": "system.security.permissions/4.7.0",
+      "hashPath": "system.security.permissions.4.7.0.nupkg.sha512"
+    },
+    "System.Security.Principal.Windows/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
+      "path": "system.security.principal.windows/4.7.0",
+      "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
+    },
+    "System.ServiceModel.Primitives/4.8.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-akJiBb0EcWTXQ/dgp1a27O7UynZbqQ84M17OY/ssxfb32x5wtQ5zRw6ExsQaPOUQgia4Wl2jy4FWZddQRLLnaA==",
+      "path": "system.servicemodel.primitives/4.8.0",
+      "hashPath": "system.servicemodel.primitives.4.8.0.nupkg.sha512"
+    },
+    "System.Text.Encoding/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
+      "path": "system.text.encoding/4.3.0",
+      "hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
+    },
+    "System.Text.Encodings.Web/4.5.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-Xg4G4Indi4dqP1iuAiMSwpiWS54ZghzR644OtsRCm/m/lBMG8dUBhLVN7hLm8NNrNTR+iGbshCPTwrvxZPlm4g==",
+      "path": "system.text.encodings.web/4.5.0",
+      "hashPath": "system.text.encodings.web.4.5.0.nupkg.sha512"
+    },
+    "System.Text.RegularExpressions/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
+      "path": "system.text.regularexpressions/4.3.0",
+      "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
+    },
+    "System.Threading/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
+      "path": "system.threading/4.3.0",
+      "hashPath": "system.threading.4.3.0.nupkg.sha512"
+    },
+    "System.Threading.Tasks/4.3.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
+      "path": "system.threading.tasks/4.3.0",
+      "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
+    },
+    "System.Threading.Tasks.Extensions/4.5.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-WSKUTtLhPR8gllzIWO2x6l4lmAIfbyMAiTlyXAis4QBDonXK4b4S6F8zGARX4/P8wH3DH+sLdhamCiHn+fTU1A==",
+      "path": "system.threading.tasks.extensions/4.5.1",
+      "hashPath": "system.threading.tasks.extensions.4.5.1.nupkg.sha512"
+    },
+    "System.Windows.Extensions/4.7.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==",
+      "path": "system.windows.extensions/4.7.0",
+      "hashPath": "system.windows.extensions.4.7.0.nupkg.sha512"
+    },
+    "WinSCP/6.3.4": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-QruTYLecwjwjzz+txdszwfWTT42Yue7XC091DVgN1GkFyNEqtqUBlygX2FYctw0q3ICvFhXFCIBIpXLO1mMLEg==",
+      "path": "winscp/6.3.4",
+      "hashPath": "winscp.6.3.4.nupkg.sha512"
+    }
+  }
+}

BIN
Kede/bin/Debug/net5.0-windows/Kede.dll


BIN
Kede/bin/Debug/net5.0-windows/Kede.exe


BIN
Kede/bin/Debug/net5.0-windows/Kede.pdb


+ 8 - 0
Kede/bin/Debug/net5.0-windows/Kede.runtimeconfig.dev.json

@@ -0,0 +1,8 @@
+{
+  "runtimeOptions": {
+    "additionalProbingPaths": [
+      "C:\\Users\\admin\\.dotnet\\store\\|arch|\\|tfm|",
+      "C:\\Users\\admin\\.nuget\\packages"
+    ]
+  }
+}

+ 9 - 0
Kede/bin/Debug/net5.0-windows/Kede.runtimeconfig.json

@@ -0,0 +1,9 @@
+{
+  "runtimeOptions": {
+    "tfm": "net5.0",
+    "framework": {
+      "name": "Microsoft.WindowsDesktop.App",
+      "version": "5.0.0"
+    }
+  }
+}

BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Connections.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Hosting.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Extensions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.Features.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Http.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Core.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Https.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.Server.Kestrel.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.AspNetCore.WebUtilities.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.Binder.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.EnvironmentVariables.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.FileExtensions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Configuration.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.DependencyInjection.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.DependencyInjection.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileProviders.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileProviders.Physical.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.FileSystemGlobbing.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Hosting.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Logging.Abstractions.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Logging.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.ObjectPool.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Options.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Extensions.Primitives.dll


BIN
Kede/bin/Debug/net5.0-windows/Microsoft.Net.Http.Headers.dll


BIN
Kede/bin/Debug/net5.0-windows/Newtonsoft.Json.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Bindings.Https.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Client.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Configuration.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Core.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Gds.Client.Common.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Gds.Server.Common.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Security.Certificates.dll


BIN
Kede/bin/Debug/net5.0-windows/Opc.Ua.Server.dll


BIN
Kede/bin/Debug/net5.0-windows/OpcUaHelper.dll


BIN
Kede/bin/Debug/net5.0-windows/System.IO.Pipelines.dll


BIN
Kede/bin/Debug/net5.0-windows/System.Private.ServiceModel.dll


BIN
Kede/bin/Debug/net5.0-windows/System.ServiceModel.Primitives.dll


BIN
Kede/bin/Debug/net5.0-windows/System.ServiceModel.dll


BIN
Kede/bin/Debug/net5.0-windows/WinSCP.exe


BIN
Kede/bin/Debug/net5.0-windows/WinSCPnet.dll


+ 649 - 0
Kede/bin/Debug/net5.0-windows/YGLog/2024-08-15.txt

@@ -0,0 +1,649 @@
+2024-08-15 10:57:02 414-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+2024-08-15 10:57:03 098-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+
+2024-08-15 10:57:25 365-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+2024-08-15 10:57:38 947-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+
+2024-08-15 10:58:40 618-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+2024-08-15 10:59:02 452-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":"{\"feedRate\":null,\"spindleMagnification\":null,\"spindleSpeed\":null,\"spindleLoad\":\"1\"}"}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1"
+}
+
+2024-08-15 11:16:06 389-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+2024-08-15 11:16:27 587-->>>WMS--->>{"code":0,"result":true,"msg":"Object reference not set to an instance of an object.","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+
+2024-08-15 11:17:29 390-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+2024-08-15 11:18:18 155-->>>WMS--->>{"code":0,"result":true,"msg":"Object reference not set to an instance of an object.","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+
+2024-08-15 11:21:30 587-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+2024-08-15 11:21:33 903-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":["25","50","100","0","0"],"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+
+2024-08-15 14:29:53 780-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:30:09 539-->>>WMS--->>{"code":0,"result":true,"msg":"Network error: Connection to \"192.168.11.39\" refused.","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:31:58 329-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:32:02 836-->>>WMS--->>{"code":0,"result":true,"msg":"File or folder '@D:\\X.nc' does not exist.\r\nSystem Error.  Code: 123.\n文件名、目录名或卷标语法不正确。","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:32:40 845-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:32:48 998-->>>WMS--->>{"code":0,"result":true,"msg":"File or folder '@D:\\X.nc' does not exist.\r\nSystem Error.  Code: 123.\n文件名、目录名或卷标语法不正确。","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:41:11 220-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:41:15 844-->>>WMS--->>{"code":0,"result":true,"msg":"File or folder '@D:\\X.nc' does not exist.\r\nSystem Error.  Code: 123.\n文件名、目录名或卷标语法不正确。","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:41:31 433-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:42:58 122-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:43:06 110-->>>WMS--->>{"code":0,"result":true,"msg":"File or folder '@D:\\X.nc' does not exist.\r\nSystem Error.  Code: 123.\n文件名、目录名或卷标语法不正确。","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:50:21 889-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:50:26 187-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:51:11 601-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:51:13 071-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:54:43 622-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:54:44 817-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '//textNc//X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:54:51 984-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:54:53 448-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:55:00 163-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:55:01 211-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:55:21 141-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:55:22 623-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '//textNc//X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:55:31 355-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:55:32 423-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 14:56:32 741-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 14:56:34 115-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"\\textNc\\",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:00:19 069-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:00:32 867-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:00:55 365-->>>WMS--->>{"code":0,"result":true,"msg":"Network error: Connection to \"192.168.11.39\" timed out.","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:02:16 634-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+2024-08-15 15:02:17 173-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":["25","50","100","0","3"],"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"opc.tcp://192.168.11.63:12686",
+    "type":"1",
+    "values":[
+        "ns=2;s=cncFeedInfo/feed-overf0",
+        "ns=2;s=cncFeedInfo/feed-over",
+        "ns=2;s=cncSpindleInfo/spindle-over1",
+        "ns=2;s=cncSpindleInfo/spindle-act1",
+        "ns=2;s=cncVariablesInfo/variables-var1"
+        ]
+}
+
+2024-08-15 15:02:28 765-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:02:30 333-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:02:52 717-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:03:03 838-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:03:11 999-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:03:18 107-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:03:26 164-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:03:28 711-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '//textNc//X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"//textNc//X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:03:38 087-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:03:39 175-->>>WMS--->>{"code":0,"result":true,"msg":"Cannot create remote file '/textNc/X.nc'.\r\nNo such file or directory.\nError code: 2\nError message from server: No such file or directory","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:05:42 913-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:05:44 023-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:05:57 592-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:05:58 699-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:06:29 900-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:07:41 733-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:07:49 341-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:09:37 164-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/textNc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:13:53 654-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:14:04 225-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:14:24 173-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:14:25 262-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:15:01 287-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:15:02 694-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+
+2024-08-15 15:15:10 237-->>>>>>===收到POST数据 : >>>>==={
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+2024-08-15 15:15:11 409-->>>WMS--->>{"code":1,"result":true,"msg":"调用成功","statusCode":200,"values":null,"toolsInfo":"","errorsInfo":"","runDatasInfo":""}--->>{
+    "serverUrl":"192.168.11.39",
+    "type":"2",
+    "localFilePath":"D:\\X.nc",
+    "remoteFilePath":"/testNc/X.nc",
+    "userName":"root",
+    "password":"root",
+    "port":"8081"
+}
+