浏览代码

细节优化

Shun 2 年之前
父节点
当前提交
1bd4bbce3e

+ 2 - 2
src/YSAI.DAQ/YSAI.Core/YSAI.Core.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.0.63</Version>
+    <Version>1.0.0.64</Version>
     <Authors>Shun</Authors>
     <Company>YSAI</Company>
     <Product>SCADA</Product>
@@ -17,7 +17,7 @@
 		<PackageReference Include="Microsoft.ClearScript" Version="7.4.4" />
 		<PackageReference Include="System.IO.Ports" Version="7.0.0" />
 		<PackageReference Include="YSAI.Log" Version="1.0.0.9" />
-		<PackageReference Include="YSAI.Unility" Version="1.0.0.20" />
+		<PackageReference Include="YSAI.Unility" Version="1.0.0.22" />
 	</ItemGroup>
 
 </Project>

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

@@ -11,7 +11,7 @@ namespace YSAI.Core.data
         public OperateResult()
         {
         }
-        public OperateResult(bool State, string Message, double RunTime, object? RData = null, ResultType RType = ResultType.Null) : base(State, Message, RData, RType)
+        public OperateResult(bool State, string Message, int RunTime, object? RData = null, ResultType RType = ResultType.Null) : base(State, Message, RData, RType)
         {
             this.State = State;
             this.Message = Message;
@@ -22,6 +22,6 @@ namespace YSAI.Core.data
         /// <summary>
         /// 次函数的运行时间
         /// </summary>
-        public double RunTime { get; set; }
+        public int RunTime { get; set; }
     }
 }

+ 1 - 1
src/YSAI.DAQ/YSAI.Core/handler/ParseHandler.cs

@@ -39,7 +39,7 @@ namespace YSAI.Core.handler
                             NewValue = reflectionOperate.ExecuteMethod(addressDetails.AddressParseParam.ReflectionSN, new object[] { value })?.ToString();
                             break;
                         case ParseType.ScriptAnalysis:
-                            using (ScriptOperate scriptOperate = new ScriptOperate(addressDetails.AddressParseParam.Script))  //通过脚本解析
+                            using (ScriptOperate scriptOperate = ScriptOperate.Instance(addressDetails.AddressParseParam.Script))  //通过脚本解析
                             {
                                 OperateResult operateResult = scriptOperate.Execute(addressDetails.AddressParseParam.Script.ScriptType, addressDetails.AddressParseParam.Script.ScriptCode, addressDetails.AddressParseParam.Script.ScriptFunction, value);
                                 if (operateResult.State)

+ 17 - 17
src/YSAI.DAQ/YSAI.Core/handler/RelayHandler.cs

@@ -1,4 +1,5 @@
 using YSAI.Core.data;
+using YSAI.Core.@interface;
 using YSAI.Core.reflection;
 
 namespace YSAI.Core.handler
@@ -8,7 +9,6 @@ namespace YSAI.Core.handler
     /// </summary>
     public class RelayHandler
     {
-
         /// <summary>
         /// 反射操作
         /// </summary>
@@ -36,12 +36,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
         /// <summary>
@@ -66,12 +66,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
 
@@ -98,12 +98,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
 
@@ -168,12 +168,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
         /// <summary>
@@ -197,12 +197,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
         /// <summary>
@@ -226,12 +226,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
         /// <summary>
@@ -255,12 +255,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
         /// <summary>
@@ -283,12 +283,12 @@ namespace YSAI.Core.handler
                 }
                 else
                 {
-                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 0.1);
+                    return new OperateResult(false, $"反射状态 {reflectionOperate.ReflectionState} 不做此操作", 1);
                 }
             }
             catch (Exception ex)
             {
-                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
+                return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 1);
             }
         }
     }

+ 2 - 2
src/YSAI.DAQ/YSAI.Core/interface/IOrAbstract.cs

@@ -78,9 +78,9 @@ namespace YSAI.Core.@interface
         protected OperateResult Break(string MethodName, bool State, string? Message = null, object? RData = null, ResultType RType = ResultType.Null, Exception? Exception = null)
         {
             //返回运行时间(毫秒)
-            double runTime = TimeTool.Instance($"{TAG}.{MethodName}").StopRecord().milliseconds;
+            int runTime = TimeTool.Instance($"{TAG}.{MethodName}").StopRecord().milliseconds;
             //消息数据组织
-            string message = $"[ {TAG} ]( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? "" : $" : {Message}")}";
+            string message = $"[ {TAG} ]( {MethodName} {(State ? "成功" : "异常")} ){(string.IsNullOrEmpty(Message) ? string.Empty : $" : {Message}")}";
             //异常则输出日志
             if (!State) { LogHelper.Error(message, $"{TAG}{MethodName}.log", Exception); }
             //返回状态

+ 1 - 1
src/YSAI.DAQ/YSAI.Core/redis/RedisOperate.cs

@@ -82,7 +82,7 @@ namespace YSAI.Core.redis
         /// <summary>
         /// 连接的Redis对象
         /// </summary>
-        private static IConnectionMultiplexer _ConnMultiplexer;
+        private IConnectionMultiplexer _ConnMultiplexer;
 
         /// <summary>
         /// 锁

+ 19 - 19
src/YSAI.DAQ/YSAI.Netty/service/NettyServiceOperate.cs

@@ -5,20 +5,11 @@ using DotNetty.Transport.Bootstrapping;
 using DotNetty.Transport.Channels;
 using DotNetty.Transport.Channels.Groups;
 using DotNetty.Transport.Channels.Sockets;
-using System;
 using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics.Metrics;
-using System.Linq;
 using System.Net;
-using System.Net.NetworkInformation;
 using System.Security.Cryptography.X509Certificates;
-using System.Text;
-using System.Threading.Channels;
-using System.Threading.Tasks;
 using YSAI.Core.data;
 using YSAI.Core.@interface;
-using YSAI.Netty.client;
 using YSAI.Unility;
 
 namespace YSAI.Netty.service
@@ -227,7 +218,7 @@ namespace YSAI.Netty.service
             /// <param name="Data">数据</param>
             /// <param name="IpPort">IP端口</param>
             /// <returns></returns>
-            public static OperateResult Send(string Data, string? IpPort = null)
+            public static OperateResult Send(string Data, string[]? IpPort = null)
             {
                 try
                 {
@@ -235,15 +226,24 @@ namespace YSAI.Netty.service
                     {
                         if (IpPort != null)
                         {
-                            if (ClientIoc.ContainsKey(IpPort))
+                            List<string> FailMessage=new List<string>();
+                            foreach (var ip in IpPort) 
                             {
-                                ClientIoc[IpPort].WriteAndFlushAsync(string.Format("{0}\n", Data));
-                                return new OperateResult(true, string.Empty, 1);
+                                if (ClientIoc.ContainsKey(ip))
+                                {
+                                    ClientIoc[ip].WriteAndFlushAsync(string.Format("{0}\n", Data));
+                                }
+                                else
+                                {
+                                    FailMessage.Add($"{IpPort} 终端不存在");
+                                   
+                                }
                             }
-                            else
+                            if (FailMessage.Count > 0)
                             {
-                                return new OperateResult(false, $"{IpPort} 终端不存在", 1);
+                                return new OperateResult(false, FailMessage.ToJson(), IpPort.Length);
                             }
+                            return new OperateResult(true, string.Empty, IpPort.Length);
                         }
                         else
                         {
@@ -393,7 +393,7 @@ namespace YSAI.Netty.service
         /// <param name="Data">数据</param>
         /// <param name="IpPort">IP端口</param>
         /// <returns></returns>
-        public OperateResult Send(string Data, string? IpPort = null)
+        public OperateResult Send(string Data, string[]? IpPort = null)
         {
             Depart("Send");
             try
@@ -417,7 +417,7 @@ namespace YSAI.Netty.service
         /// <param name="Data">数据</param>
         /// <param name="IpPort">IP端口</param>
         /// <returns></returns>
-        public Task<OperateResult> SendAsync(string Data, string? IpPort = null)
+        public Task<OperateResult> SendAsync(string Data, string[]? IpPort = null)
         {
             return Task.Run(() => Send(Data, IpPort));
         }
@@ -429,7 +429,7 @@ namespace YSAI.Netty.service
         /// <param name="Content">内容</param>
         /// <param name="IpPort">IP端口</param>
         /// <returns></returns>
-        public OperateResult Send(string Topic, string Content, string? IpPort = null)
+        public OperateResult Send(string Topic, string Content, string[]? IpPort = null)
         {
             Depart("Send");
             try
@@ -466,7 +466,7 @@ namespace YSAI.Netty.service
         /// <param name="Content">内容</param>
         /// <param name="IpPort">IP端口</param>
         /// <returns></returns>
-        public Task<OperateResult> SendAsync(string Topic, string Content, string? IpPort = null)
+        public Task<OperateResult> SendAsync(string Topic, string Content, string[]? IpPort = null)
         {
             return Task.Run(() => Send(Topic, Content, IpPort));
         }

+ 109 - 72
src/YSAI.DAQ/YSAI.Test.All/Program.cs

@@ -1,8 +1,45 @@
 
 
+using System.Diagnostics;
+using YSAI.Unility;
 
+/// <summary>
+/// 开关
+/// </summary>
+Stopwatch stopwatch=null;
+/// <summary>
+/// 开始记录
+/// </summary>
+void StartRecord()
+{
+    if (stopwatch == null)
+    {
+        stopwatch = new Stopwatch();
+    }
+    stopwatch.Start(); //  开始监视代码运行时间
+}
+/// <summary>
+/// 停止记录
+/// </summary>
+/// <returns>时,分,秒,毫秒</returns>
+(int hours, int minutes, int seconds, int milliseconds) StopRecord()
+{
+    stopwatch.Stop(); //  停止监视
+    TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
+    int hours = timespan.Hours; // 总小时
+    int minutes = timespan.Minutes;  // 总分钟
+    int seconds = timespan.Seconds;  //  总秒数
+    int milliseconds = timespan.Milliseconds;  //  总毫秒数
+    stopwatch.Restart();//复位
+    return (hours, minutes, seconds, milliseconds);
+}
 
-
+while (true)
+{
+    StartRecord();
+    Console.ReadLine();
+    Console.WriteLine(StopRecord().ToJson());
+}
 
 
 
@@ -440,84 +477,84 @@
 
 
 
-using System.Collections.Concurrent;
-using YSAI.Core.data;
-using YSAI.Log;
-using YSAI.Opc.ua.client;
-using YSAI.Unility;
+//using System.Collections.Concurrent;
+//using YSAI.Core.data;
+//using YSAI.Log;
+//using YSAI.Opc.ua.client;
+//using YSAI.Unility;
 
-/// <summary>
-/// 读取Csv,返回行集合
-/// </summary>
-/// <param name="path"></param>
-/// <param name="hasTitle"></param>
-/// <returns></returns>
- List<string> ReadCsv(string path, bool hasTitle)
-{
-    if (!File.Exists(path))
-        return new List<string>();
+///// <summary>
+///// 读取Csv,返回行集合
+///// </summary>
+///// <param name="path"></param>
+///// <param name="hasTitle"></param>
+///// <returns></returns>
+// List<string> ReadCsv(string path, bool hasTitle)
+//{
+//    if (!File.Exists(path))
+//        return new List<string>();
 
-    var lines = File.ReadAllLines(path).ToList();
-    if (hasTitle)
-    {
-        lines.RemoveAt(0);
-    }
-    return lines;
-}
+//    var lines = File.ReadAllLines(path).ToList();
+//    if (hasTitle)
+//    {
+//        lines.RemoveAt(0);
+//    }
+//    return lines;
+//}
 
-//Address address = JsonTool.StringToJsonEntity<Address>(FileTool.FileToString("C:\\Users\\Shun\\Desktop\\[6032]Node_Address 202310120854271486.json"));
+////Address address = JsonTool.StringToJsonEntity<Address>(FileTool.FileToString("C:\\Users\\Shun\\Desktop\\[6032]Node_Address 202310120854271486.json"));
 
-Address address = new Address();
-address.SN = Guid.NewGuid().ToString();
-address.CreationTime = DateTime.Now;
-address.AddressArray = new List<AddressDetails>();
-List<string> strings = ReadCsv("C:\\Users\\Shun\\Desktop\\6022.csv", true);
-foreach (var item in strings)
-{
-    string[] str = item.Split(",");
-    string addressD = str[0].Replace("\"", "");
-    address.AddressArray.Add(new AddressDetails()
-    {
-        AddressName = $"ns=2;s=6022.6022.{addressD}",
-        SN = Guid.NewGuid().ToString()
-    });
-}
+//Address address = new Address();
+//address.SN = Guid.NewGuid().ToString();
+//address.CreationTime = DateTime.Now;
+//address.AddressArray = new List<AddressDetails>();
+//List<string> strings = ReadCsv("C:\\Users\\Shun\\Desktop\\6022.csv", true);
+//foreach (var item in strings)
+//{
+//    string[] str = item.Split(",");
+//    string addressD = str[0].Replace("\"", "");
+//    address.AddressArray.Add(new AddressDetails()
+//    {
+//        AddressName = $"ns=2;s=6022.6022.{addressD}",
+//        SN = Guid.NewGuid().ToString()
+//    });
+//}
 
- OpcUaClientOperate opcUaClientOperate = OpcUaClientOperate.Instance(new OpcUaClientData.Basics
-{
-    ServerUrl = "opc.tcp://192.168.2.220:49320",
-    CustomName = "YSAI 性能测试",
-    TaskNumber=10,
-    TaskHandleInterval=1
-});
-Console.WriteLine(opcUaClientOperate.On().ToJson().JsonFormatting());
-opcUaClientOperate.OnEvent += OpcUaClientOperate_OnEvent;
+// OpcUaClientOperate opcUaClientOperate = OpcUaClientOperate.Instance(new OpcUaClientData.Basics
+//{
+//    ServerUrl = "opc.tcp://192.168.2.220:49320",
+//    CustomName = "YSAI 性能测试",
+//    TaskNumber=10,
+//    TaskHandleInterval=1
+//});
+//Console.WriteLine(opcUaClientOperate.On().ToJson().JsonFormatting());
+//opcUaClientOperate.OnEvent += OpcUaClientOperate_OnEvent;
 
-while (true)
-{
-    Console.ReadLine();
-    OperateResult operateResult = opcUaClientOperate.Subscribe(address);
-    Console.WriteLine(operateResult.ToJson().JsonFormatting());
-}
+//while (true)
+//{
+//    Console.ReadLine();
+//    OperateResult operateResult = opcUaClientOperate.Subscribe(address);
+//    Console.WriteLine(operateResult.ToJson().JsonFormatting());
+//}
 
-void OpcUaClientOperate_OnEvent(object? sender, EventResult e)
-{
-    switch (e.RType)
-    {
-        case YSAI.Core.@enum.ResultType.KeyValue:
-            ConcurrentDictionary<string, AddressValue> pairs = e.RData as ConcurrentDictionary<string, AddressValue>;
-            foreach (var item in pairs)
-            {
-                String str = String.Format("{0,-100}{1,-100}", item.Key, item.Value.Value);
-
-                LogHelper.Verbose(str);
-            }
-            break;
-        default:
-            Console.WriteLine(e.Message);
-            break;
-    }
-}
+//void OpcUaClientOperate_OnEvent(object? sender, EventResult e)
+//{
+//    switch (e.RType)
+//    {
+//        case YSAI.Core.@enum.ResultType.KeyValue:
+//            ConcurrentDictionary<string, AddressValue> pairs = e.RData as ConcurrentDictionary<string, AddressValue>;
+//            foreach (var item in pairs)
+//            {
+//                String str = String.Format("{0,-100}{1,-100}", item.Key, item.Value.Value);
+
+//                LogHelper.Verbose(str);
+//            }
+//            break;
+//        default:
+//            Console.WriteLine(e.Message);
+//            break;
+//    }
+//}
 
 
 

+ 27 - 0
src/YSAI.DAQ/YSAI.Unility/ExtensionTool.cs

@@ -1,5 +1,6 @@
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using System.Diagnostics;
 using System.Net;
 using System.Security.Cryptography;
 using System.Text;
@@ -12,6 +13,32 @@ namespace YSAI.Unility
     /// </summary>
     public static class ExtensionTool
     {
+        /// <summary>
+        ///  微秒延时
+        /// </summary>
+        /// <param name="time">延时时间,单位:ms</param>
+        /// <returns></returns>
+        public static void DelayUs(this double time)
+        {
+            Stopwatch stopTime = new Stopwatch();
+            stopTime.Start();
+            while (stopTime.Elapsed.TotalMilliseconds < time) { }
+            stopTime.Stop();
+        }
+
+        /// <summary>
+        ///  微秒延时
+        /// </summary>
+        /// <param name="time">延时时间,单位:ms</param>
+        /// <returns></returns>
+        public static void DelayUs(this int time)
+        {
+            Stopwatch stopTime = new Stopwatch();
+            stopTime.Start();
+            while (stopTime.Elapsed.TotalMilliseconds < time) { }
+            stopTime.Stop();
+        }
+
         /// <summary>
         /// 对象比对器
         /// </summary>

+ 18 - 14
src/YSAI.DAQ/YSAI.Unility/RunTimeTool.cs

@@ -10,10 +10,10 @@ namespace YSAI.Unility
         /// <summary>
         /// 标识符
         /// </summary>
-        private string ID { get; set; }
-        public TimeTool(string ID)
+        private string SN { get; set; }
+        public TimeTool(string SN)
         {
-            this.ID = ID;
+            this.SN = SN;
         }
 
         private static readonly object Lock = new object();  //锁
@@ -22,22 +22,22 @@ namespace YSAI.Unility
         /// 单例模式
         /// </summary>
         /// <returns></returns>
-        public static TimeTool Instance(string ID)
+        public static TimeTool Instance(string SN)
         {
             lock (ThisObjList)
             {
-                TimeTool? exp = ThisObjList.FirstOrDefault(c => c.ID.Equals(ID));
+                TimeTool? exp = ThisObjList.FirstOrDefault(c => c.SN.Equals(SN));
                 if (exp == null)
                 {
                     lock (Lock)
                     {
-                        if (ThisObjList.Count(c => c.ID.Equals(ID)) > 0)
+                        if (ThisObjList.Count(c => c.SN.Equals(SN)) > 0)
                         {
-                            return ThisObjList.First(c => c.ID.Equals(ID));
+                            return ThisObjList.First(c => c.SN.Equals(SN));
                         }
                         else
                         {
-                            TimeTool exp2 = new TimeTool(ID);
+                            TimeTool exp2 = new TimeTool(SN);
                             ThisObjList.Add(exp2);
                             return exp2;
                         }
@@ -56,21 +56,25 @@ namespace YSAI.Unility
         /// </summary>
         public void StartRecord()
         {
-            stopwatch = new Stopwatch();
+            if (stopwatch == null)
+            {
+                stopwatch = new Stopwatch();
+            }
             stopwatch.Start(); //  开始监视代码运行时间
         }
         /// <summary>
         /// 停止记录
         /// </summary>
         /// <returns>时,分,秒,毫秒</returns>
-        public (double hours, double minutes, double seconds, double milliseconds) StopRecord()
+        public (int hours, int minutes, int seconds, int milliseconds) StopRecord()
         {
             stopwatch.Stop(); //  停止监视
             TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
-            double hours = timespan.Hours; // 总小时
-            double minutes = timespan.Minutes;  // 总分钟
-            double seconds = timespan.Seconds;  //  总秒数
-            double milliseconds = timespan.Milliseconds;  //  总毫秒数
+            int hours = timespan.Hours; // 总小时
+            int minutes = timespan.Minutes;  // 总分钟
+            int seconds = timespan.Seconds;  //  总秒数
+            int milliseconds = timespan.Milliseconds;  //  总毫秒数
+            stopwatch.Restart();//复位
             return (hours, minutes, seconds, milliseconds);
         }
 

+ 1 - 1
src/YSAI.DAQ/YSAI.Unility/YSAI.Unility.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.20</Version>
+		<Version>1.0.0.22</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>