using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text.RegularExpressions; using MECF.Framework.RT.EquipmentLibrary.Core.Extensions; using MECF.Framework.RT.EquipmentLibrary.Core.Interfaces; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.HwinRobort.Errors { public class HiwinRobotAggregatedErrors : IBitTypeClass { #region Variables private const int BIT_WIDTH = 16; #endregion #region Constructors public HiwinRobotAggregatedErrors() { Input = new HiwinRobotInputErrors(); Sensor = new HiwinRobotSensorErrors(); AxisT = new HiwinRobotServoErrors(); AxisR = new HiwinRobotServoErrors(); AxisZ = new HiwinRobotServoErrors(); Controller = new HiwinRobotControllerErrors(); } public HiwinRobotAggregatedErrors(string response) { if(!IsErrResponse(response, out var rawErr)) throw new InvalidOperationException("the format of response string is incorrect."); Input = int.TryParse(rawErr[0], NumberStyles.HexNumber, null, out var input) ? input.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 Sensor = int.TryParse(rawErr[1], NumberStyles.HexNumber, null, out var sensor) ? sensor.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 AxisT = int.TryParse(rawErr[2], NumberStyles.HexNumber, null, out var axisT) ? axisT.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 AxisR = int.TryParse(rawErr[3], NumberStyles.HexNumber, null, out var axisR) ? axisR.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 AxisZ = int.TryParse(rawErr[4], NumberStyles.HexNumber, null, out var axisZ) ? axisZ.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 AxisW = int.TryParse(rawErr[5], NumberStyles.HexNumber, null, out var axisW) ? axisW.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 AxisH = int.TryParse(rawErr[6], NumberStyles.HexNumber, null, out var axisH) ? axisH.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 Controller = int.TryParse(rawErr[7], NumberStyles.HexNumber, null, out var cont) ? cont.ToBitTypeClass(BIT_WIDTH) : 0xffff.ToBitTypeClass(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆 } #endregion #region Properties /// /// 输入错误 /// public HiwinRobotInputErrors Input { get; } /// /// 传感器错误 /// public HiwinRobotSensorErrors Sensor { get; } /// /// T轴错误 /// public HiwinRobotServoErrors AxisT { get; } /// /// R轴错误 /// public HiwinRobotServoErrors AxisR { get; } /// /// Z轴错误 /// public HiwinRobotServoErrors AxisZ { get; } /// /// Z轴错误 /// public HiwinRobotServoErrors AxisW { get; } /// /// Z轴错误 /// public HiwinRobotServoErrors AxisH { get; } /// /// 控制器错误 /// public HiwinRobotControllerErrors Controller { get; } /// /// 返回整合的错误信息列表。 /// public List AggregateErrorMessages { get { var errs = new List(); errs.AddRange(Input.AggregateErrorMessages()); errs.AddRange(Sensor.AggregateErrorMessages()); // 伺服轴的错误输出文本中加入轴名称 errs.AddRange(AxisT.AggregateErrorMessages() .Select(x=>string.Concat($"[{nameof(AxisT)}]", x))); errs.AddRange(AxisR.AggregateErrorMessages() .Select(x => string.Concat($"[{nameof(AxisR)}]", x))); errs.AddRange(AxisZ.AggregateErrorMessages() .Select(x => string.Concat($"[{nameof(AxisZ)}]", x))); errs.AddRange(AxisW.AggregateErrorMessages() .Select(x => string.Concat($"[{nameof(AxisW)}]", x))); errs.AddRange(AxisH.AggregateErrorMessages() .Select(x => string.Concat($"[{nameof(AxisH)}]", x))); errs.AddRange(Controller.AggregateErrorMessages()); return errs; } } #endregion #region Methods public static bool IsErrResponse(string response, out string[] errArray) { errArray = response.Split(','); return errArray.Length == 8; } #endregion } }