From 1c4426810c71eead57084be8a18ade8d314dd8c4 Mon Sep 17 00:00:00 2001 From: patrick <patrick.xu@broconcentric.com> Date: 星期二, 10 十二月 2019 14:24:31 +0800 Subject: [PATCH] 1. 重构项目 --- src/Bro.Device.AuboRobot/AuboRobotConfig.cs | 234 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 181 insertions(+), 53 deletions(-) diff --git a/src/Bro.Device.AuboRobot/AuboRobotConfig.cs b/src/Bro.Device.AuboRobot/AuboRobotConfig.cs index 190ee8b..cfa159d 100644 --- a/src/Bro.Device.AuboRobot/AuboRobotConfig.cs +++ b/src/Bro.Device.AuboRobot/AuboRobotConfig.cs @@ -1,13 +1,16 @@ 锘縰sing Bro.Common.Base; using Bro.Common.Helper; -using System; +using Bro.Common.Model; +using Bro.Common.Model.Interface; using System.Collections.Generic; using System.ComponentModel; +using System.Drawing.Design; +using System.Linq; namespace Bro.Device.AuboRobot { [Device("AuboRobot", "濂ュ崥鏈哄櫒浜�", EnumHelper.DeviceAttributeType.InitialConfig)] - public class AuboRobotInitialConfig : InitialConfigBase + public class AuboRobotInitialConfig : InitialMonitorConfigBase { [Category("鏈哄櫒浜鸿缃�")] [Description("鏈哄櫒浜洪�氫俊IP")] @@ -22,17 +25,68 @@ public int ReplyTimeout { get; set; } = 1000; [Category("閫氫俊璁剧疆")] + [Description("鍙嶉瓒呮椂閲嶈瘯娆℃暟")] + public int TimeoutRetryTimes { get; set; } = 5; + + [Category("閫氫俊璁剧疆")] [Description("鍗忚鏂囨湰缁撴潫瀛楃")] public string EndChar { get; set; } = "#"; [Category("閫氫俊璁剧疆")] [Description("鍗忚鍐呭鍒嗛殧瀛楃")] public string Seperator { get; set; } = ","; + + [Category("鍔ㄤ綔璁剧疆")] + [Description("鍔ㄤ綔瓒呮椂璁剧疆锛屽崟浣峬in")] + public float OperationTimeout { get; set; } = 1; + + [Category("閫氫俊鎶ヨ閰嶇疆")] + [Description("閫氫俊杩囩▼涓弽棣堟姤璀︿唬鐮侀厤缃�")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor<RobotReplyWarningCode>), typeof(UITypeEditor))] + public List<RobotReplyWarningCode> RobotReplyWarnings { get; set; } = new List<RobotReplyWarningCode>(); + } + + public class RobotReplyWarningCode : IComplexDisplay + { + [Category("鍙嶉鎶ヨ閰嶇疆")] + [Description("鎶ヨ浠g爜")] + public int WarningCode { get; set; } + + [Category("鍙嶉鎶ヨ閰嶇疆")] + [Description("鎶ヨ浠g爜鎻忚堪")] + public string WarningDescription { get; set; } + + public string GetDisplayText() + { + return $"{WarningCode}-{WarningDescription}"; + } } [Device("AuboRobot", "濂ュ崥鏈哄櫒浜�", EnumHelper.DeviceAttributeType.OperationConfig)] public class AuboRobotOperationConfig : OperationConfigBase { + [Category("鍔ㄤ綔鎸囦护")] + [Description("鍔ㄤ綔鎸囦护")] + public RobotMsgAction Action { get; set; } = RobotMsgAction.Move; + + [Category("鍙傛暟")] + [Description("鍙傛暟1")] + public int Para1 { get; set; } = 0; + + [Category("鍙傛暟")] + [Description("鍙傛暟2")] + public int Para2 { get; set; } = 0; + + [Category("杩愬姩閰嶇疆")] + [Description("鏈哄櫒浜鸿繍鍔ㄧ偣浣�")] + [TypeConverter(typeof(ComplexObjectConvert))] + [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] + public RobotPoint Point { get; set; } = new RobotPoint(); + + [Category("鎿嶄綔閰嶇疆")] + [Description("鏄惁绛夊緟瀹屾垚淇″彿")] + public bool IsWaitFinished { get; set; } = true; } public class RobotMsg : IComplexDisplay @@ -43,29 +97,65 @@ public RobotMsgAction Action { get; set; } = RobotMsgAction.Move; - public RobotMsgParas Para1 { get; set; } = RobotMsgParas.None; + public int Para1 { get; set; } - public List<string> Paras { get; set; } = new List<string>(); + public int Para2 { get; set; } = 0; - public byte[] GetMsgBytes(string seperator, string endChar) + public RobotPoint Point { get; set; } = new RobotPoint(); + + public byte[] GetMsgBytes(string seperator, string endChar, out string msg) { - List<string> list = new List<string>() { Type.ToString(), ID.ToString() }; + List<string> list = new List<string>() { ((int)Type).ToString("D2"), ID.ToString("D2") }; if (Type == RobotMsgType.Send) { - list.Add(Action.ToString()); + list.Add(((int)Action).ToString("D2")); - if (Para1 != RobotMsgParas.None) - { - list.Add(Para1.ToString()); - } + list.Add(Para1.ToString("D2")); + list.Add(Para2.ToString("D2")); - list.AddRange(Paras); + list.Add(GetFormatString(Point.X)); + list.Add(GetFormatString(Point.Y)); + list.Add(GetFormatString(Point.Z)); + list.Add(GetFormatString_Angle(Point.A)); + list.Add(GetFormatString_Angle(Point.B)); + list.Add(GetFormatString_Angle(Point.C)); } - string msg = string.Join(seperator, list); + msg = string.Join(seperator, list) + seperator + endChar; - return System.Text.Encoding.ASCII.GetBytes(msg + endChar); + return System.Text.Encoding.ASCII.GetBytes(msg); + } + + private string GetFormatString(float x) + { + string s = x.ToString("f10"); + + s = s.TrimEnd(new char[] { '0' }); + + bool isNegative = x < 0; + + while (s.Length < 11) + { + s = s.Insert(isNegative ? 1 : 0, "0"); + } + + return s; + } + + /// <summary> + /// 灏嗚搴︽暟鍊艰浆鎹负11浣嶅瓧绗︿覆锛岃緭鍏ヨ搴﹀尯闂�0~360锛岃緭鍑鸿搴﹀尯闂�-180~+180 + /// </summary> + /// <param name="x"></param> + /// <returns></returns> + private string GetFormatString_Angle(float x) + { + if (x > 180) + { + x = x - 360; + } + + return GetFormatString(x); } public static RobotMsg GetRobotMsg(string data, string seperator) @@ -74,31 +164,29 @@ RobotMsg msg = new RobotMsg(); - msg.Type = (RobotMsgType)Enum.Parse(typeof(RobotMsgType), datas[0]); + msg.Type = (RobotMsgType)int.Parse(datas[0]); msg.ID = int.Parse(datas[1]); if (msg.Type == RobotMsgType.Send) { - msg.Action = (RobotMsgAction)Enum.Parse(typeof(RobotMsgAction), datas[2]); + msg.Action = (RobotMsgAction)int.Parse(datas[2]); - if (int.TryParse(datas[3], out int para1)) + msg.Para1 = int.Parse(datas[3]); + msg.Para2 = int.Parse(datas[4]); + + msg.Point = new RobotPoint() { - msg.Para1 = RobotMsgParas.None; - - for (int i = 3; i < datas.Length; i++) - { - msg.Paras.Add(datas[i]); - } - } - else - { - msg.Para1 = (RobotMsgParas)Enum.Parse(typeof(RobotMsgParas), datas[3]); - - for (int i = 4; i < datas.Length; i++) - { - msg.Paras.Add(datas[i]); - } - } + X = float.Parse(datas[5]), + Y = float.Parse(datas[6]), + Z = float.Parse(datas[7]), + A = float.Parse(datas[8]) < 0 ? float.Parse(datas[8]) + 360 : float.Parse(datas[8]), + B = float.Parse(datas[9]) < 0 ? float.Parse(datas[9]) + 360 : float.Parse(datas[9]), + C = float.Parse(datas[10]) < 0 ? float.Parse(datas[10]) + 360 : float.Parse(datas[10]), + }; + } + else + { + msg.Para1 = int.Parse(datas[2]); } return msg; @@ -106,38 +194,78 @@ public string GetDisplayText() { - string msg = $"搴忓彿锛歿ID},{Action.ToString()}_{Para1.ToString()}{(Paras.Count > 0 ? ("_" + string.Join(",", Paras)) : "")}"; + string msg = $"搴忓彿锛歿ID},{Action.ToString()}_{Para1.ToString()}_{Para2.ToString()}_{Point.GetDisplayText()}"; return msg; } } public enum RobotMsgType { - Send, - Rec + Send = 1, + Rec = 2, } public enum RobotMsgAction { - Move, - State, - Adjust, - IO, + Move = 1, + Unload = 2, + Load = 3, + GetPosition = 4, + /// <summary> + /// 鎸囧畾褰撳墠鐐逛綅涓哄熀鍑嗙偣 + /// </summary> + BasePoint = 5, + IOSet = 6, + IOQuery = 7, + Calibration = 9, + StandardPoint = 10, } - public enum RobotMsgParas + public enum MoveType { - None, - LineSnap, - Line, - Robot, - LoadEmptyTraySnap, - LoadEmptyTrayDone, - LoadFullTraySnap, - LoadFullTrayDone, - EmptyTrayReady, - EmptyTrayEmpty, - FullTrayFull, - Query, + [Description("缁濆杩愬姩")] + AbsoluteMove = 1, + [Description("鏈哄櫒浜哄潗鏍囩郴鐩稿杩愬姩")] + RobotRelativeMove = 2, + [Description("鐩稿鏌愪釜鍩哄噯鐐逛綅鐨勭浉瀵硅繍鍔�")] + BasedPointRelativeMove = 3, + [Description("鍥炲師鐐�")] + Origin = 4, + [Description("宸︿晶濮垮娍")] + LeftPose = 6, + [Description("鍙充晶濮垮娍")] + RightPose = 5, + [Description("鍓嶄晶濮垮娍")] + FrontPose = 7, + [Description("鐩告満鍧愭爣绯荤浉瀵硅繍鍔�")] + CameraRelativeMove = 12, } + + public enum TrayType + { + FullTray = 1, + EmptyTray = 2, + } + + //public enum RobotMsgAction + //{ + // Move = 1, + // Unload = 2, + // Load = 3, + // IO = 6, + // Calibration = 9, + // StandardPoint = 10, + //} + + //public enum RobotMsgParas + //{ + // None = 0, + // Home = 1, + // LineSnap = 2, + // EmptyTray = 3, + // FullTray = 4, + // UnloadEmptyTraySnap = 5, + // LoadFullTraySnap = 6, + // Query = 7, + //} } -- Gitblit v1.8.0