src/Bro.Device.AuboRobot/AuboRobotConfig.cs
@@ -1,8 +1,11 @@
using Bro.Common.Base;
using Bro.Common.Helper;
using Bro.Common.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
namespace Bro.Device.AuboRobot
{
@@ -28,6 +31,16 @@
        [Category("通信设置")]
        [Description("协议内容分隔字符")]
        public string Seperator { get; set; } = ",";
        [Category("IO监听设置")]
        [Description("IO监听操作配置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<MonitorSet>), typeof(UITypeEditor))]
        public List<MonitorSet> MonitorSetCollection { get; set; } = new List<MonitorSet>();
        [Category("IO监听设置")]
        [Description("IO监听间隔,以ms为单位")]
        public int ScanInterval { get; set; } = 100;
    }
    [Device("AuboRobot", "奥博机器人", EnumHelper.DeviceAttributeType.OperationConfig)]
@@ -45,22 +58,44 @@
        public RobotMsgParas Para1 { get; set; } = RobotMsgParas.None;
        public List<string> Paras { get; set; } = new List<string>();
        public int Para2 { get; set; } = 0;
        /// <summary>
        /// Paras不包含Para1,Para2内容
        /// </summary>
        public List<string> Datas { get; set; } = new List<string>();
        public byte[] GetMsgBytes(string seperator, string endChar)
        {
            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(((int)Para1).ToString("D2"));
                list.Add(Para2.ToString("D2"));
                if (Datas == null)
                {
                    list.Add(Para1.ToString());
                    Datas = new List<string>();
                }
                list.AddRange(Paras);
                while (Datas.Count < 5)
                {
                    Datas.Add("0");
                }
                list.AddRange(Datas.ConvertAll(s =>
                {
                    string res = float.Parse(s).ToString("F7");
                    while (res.Length < 11)
                    {
                        res = "0" + res;
                    }
                    return res;
                }));
            }
            string msg = string.Join(seperator, list);
@@ -74,31 +109,17 @@
            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 = RobotMsgParas.None;
                msg.Para1 = (RobotMsgParas)int.Parse(datas[3]);
                msg.Para2 = int.Parse(datas[4]);
                    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]);
                    }
                }
                msg.Datas = datas.Skip(5).ToList();
            }
            return msg;
@@ -106,38 +127,36 @@
        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()}_{(Datas.Count > 0 ? ("_" + string.Join(",", Datas)) : "")}";
            return msg;
        }
    }
    public enum RobotMsgType
    {
        Send,
        Rec
        Send = 1,
        Rec = 2,
    }
    public enum RobotMsgAction
    {
        Move,
        State,
        Adjust,
        IO,
        Move = 1,
        Unload = 2,
        Load = 3,
        IO = 6,
        Calibration = 9,
        StandardPoint = 10,
    }
    public enum RobotMsgParas
    {
        None,
        LineSnap,
        Line,
        Robot,
        LoadEmptyTraySnap,
        LoadEmptyTrayDone,
        LoadFullTraySnap,
        LoadFullTrayDone,
        EmptyTrayReady,
        EmptyTrayEmpty,
        FullTrayFull,
        Query,
        None = 0,
        Home = 1,
        LineSnap = 2,
        EmptyTray = 3,
        FullTray = 4,
        UnloadEmptyTraySnap = 5,
        LoadFullTraySnap = 6,
        Query = 7,
    }
}