| | |
| | | using Bro.Common.Base; |
| | | using Bro.Common.Helper; |
| | | using Bro.Common.Model.Helper; |
| | | using Bro.Common.Model; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Drawing.Design; |
| | | using System.Linq; |
| | | using System.Net; |
| | | using System.Runtime.InteropServices; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | | namespace Bro.Device.SeerAGV |
| | | { |
| | | [Device("SeerAGV", "SeerAGV", EnumHelper.DeviceAttributeType.InitialConfig)] |
| | | public class SeerAGVInitialConfig : InitialConfigBase |
| | | public class SeerAGVInitialConfig : InitialMonitorConfigBase |
| | | { |
| | | [Category("通信配置")] |
| | | [Description("AGVIP地址")] |
| | |
| | | [Description("导航端口")] |
| | | public int GuidePort { get; set; } = 19206; |
| | | |
| | | [Category("监听配置")] |
| | | [Description("监听间隔,单位ms")] |
| | | public int ScanInterval { get; set; } = 200; |
| | | //[Category("监听配置")] |
| | | //[Description("监听间隔,单位ms")] |
| | | //public int ScanInterval { get; set; } = 500; |
| | | |
| | | ////[Category("监听配置")] |
| | | ////[Description("监听的IO信息配置集合")] |
| | | ////[TypeConverter(typeof(CollectionCountConvert))] |
| | | ////[Editor(typeof(ComplexCollectionEditor<IODefinition>), typeof(UITypeEditor))] |
| | | ////public List<IODefinition> IOCollection { get; set; } = new List<IODefinition>(); |
| | | |
| | | //[Category("监听设置")] |
| | | //[Description("监听操作配置集合")] |
| | | //[TypeConverter(typeof(CollectionCountConvert))] |
| | | //[Editor(typeof(ComplexCollectionEditor<MonitorSet>), typeof(UITypeEditor))] |
| | | //public List<MonitorSet> MonitorSetCollection { get; set; } = new List<MonitorSet>(); |
| | | |
| | | [Category("监听配置")] |
| | | [Description("是否采用简单监听模式。true:简单模式,只获取任务状态;false:全部模式,获取任务所有信息")] |
| | | public bool IsSimpleMonitor { get; set; } = true; |
| | | |
| | | private float batteryLvlToCharge = 0.1f; |
| | | [Category("充电配置")] |
| | | [Description("充电电池容量,电池容量低于该值时需要充电")] |
| | | public float BatteryLvlToCharge |
| | | { |
| | | get => batteryLvlToCharge; |
| | | set |
| | | { |
| | | if (value >= 1 || value <= 0) |
| | | { |
| | | value = 0.1f; |
| | | } |
| | | batteryLvlToCharge = value; |
| | | } |
| | | } |
| | | |
| | | private float batteryLvlToCharge_Recommand = 0.3f; |
| | | [Category("充电配置")] |
| | | [Description("充电电池容量,电池容量低于该值时,设备空闲时建议充电")] |
| | | public float BatteryLvlToCharge_Recommand |
| | | { |
| | | get => batteryLvlToCharge_Recommand; |
| | | set |
| | | { |
| | | if (value >= 1 || value <= 0) |
| | | { |
| | | value = 0.3f; |
| | | } |
| | | batteryLvlToCharge_Recommand = value; |
| | | } |
| | | } |
| | | |
| | | private float batteryLvlChargeDone = 0.9f; |
| | | [Category("充电配置")] |
| | | [Description("充电完成电池容量,电池容量高于该值时确认充电完成")] |
| | | public float BatteryLvlChargeDone |
| | | { |
| | | get => batteryLvlChargeDone; |
| | | set |
| | | { |
| | | if (value >= 1 || value <= 0) |
| | | { |
| | | value = 0.9f; |
| | | } |
| | | batteryLvlChargeDone = value; |
| | | } |
| | | } |
| | | |
| | | [Category("动作设置")] |
| | | [Description("动作超时设置,单位min")] |
| | | public float OperationTimeout { get; set; } = 5; |
| | | } |
| | | |
| | | [Device("SeerAGV", "SeerAGV", EnumHelper.DeviceAttributeType.OperationConfig)] |
| | | public class SeerAGVOperationConfig : OperationConfigBase |
| | | { |
| | | [Category("导航配置")] |
| | | [Description("AGV行驶目的地")] |
| | | public string Location { get; set; } |
| | | |
| | | [Category("导航配置")] |
| | | [Description("是否等待完成信号")] |
| | | public bool IsWaitFinished { get; set; } = true; |
| | | } |
| | | |
| | | public class SeerMessage |
| | | public class SeerMessage : IComplexDisplay |
| | | { |
| | | private byte[] frame = null; |
| | | public byte[] Frame |
| | |
| | | |
| | | if (data.Length < 16 + msg.DataLength) |
| | | { |
| | | throw new ProcessException("数据长度错误", null); |
| | | throw new ProcessException("数据长度错误"); |
| | | } |
| | | |
| | | msg.JsonData = data.Skip(16).Take(msg.DataLength).ToArray(); |
| | | msg.JValues = JsonConvert.DeserializeObject<JObject>(System.Text.Encoding.ASCII.GetString(msg.JsonData)); |
| | | |
| | | return msg; |
| | | } |
| | | |
| | | public string GetDisplayText() |
| | | { |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | QueryPosition = 0x03EC, |
| | | QueryTaskStatus = 0x03FC, |
| | | QueryIO = 0x03F5, |
| | | |
| | | CancelTask = 0x0BBB, |
| | | PauseTask = 0x0BB9, |
| | | TaskOrder = 0x0BEB, |
| | | |
| | | QueryBattery = 0x03EF, |
| | | } |
| | | |
| | | public enum AGVTaskStatus |