Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/Robots/HwinRobort/Errors/HiwinRobotAggregatedErrors.cs

156 lines
5.9 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
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<HiwinRobotInputErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotInputErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
Sensor = int.TryParse(rawErr[1], NumberStyles.HexNumber, null, out var sensor)
? sensor.ToBitTypeClass<HiwinRobotSensorErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotSensorErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
AxisT = int.TryParse(rawErr[2], NumberStyles.HexNumber, null, out var axisT)
? axisT.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
AxisR = int.TryParse(rawErr[3], NumberStyles.HexNumber, null, out var axisR)
? axisR.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
AxisZ = int.TryParse(rawErr[4], NumberStyles.HexNumber, null, out var axisZ)
? axisZ.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
AxisW = int.TryParse(rawErr[5], NumberStyles.HexNumber, null, out var axisW)
? axisW.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
AxisH = int.TryParse(rawErr[6], NumberStyles.HexNumber, null, out var axisH)
? axisH.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotServoErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
Controller = int.TryParse(rawErr[7], NumberStyles.HexNumber, null, out var cont)
? cont.ToBitTypeClass<HiwinRobotControllerErrors>(BIT_WIDTH)
: 0xffff.ToBitTypeClass<HiwinRobotControllerErrors>(BIT_WIDTH); // 如果转换错误,全部置为错误,以防呆
}
#endregion
#region Properties
/// <summary>
/// 输入错误
/// </summary>
public HiwinRobotInputErrors Input { get; }
/// <summary>
/// 传感器错误
/// </summary>
public HiwinRobotSensorErrors Sensor { get; }
/// <summary>
/// T轴错误
/// </summary>
public HiwinRobotServoErrors AxisT { get; }
/// <summary>
/// R轴错误
/// </summary>
public HiwinRobotServoErrors AxisR { get; }
/// <summary>
/// Z轴错误
/// </summary>
public HiwinRobotServoErrors AxisZ { get; }
/// <summary>
/// Z轴错误
/// </summary>
public HiwinRobotServoErrors AxisW { get; }
/// <summary>
/// Z轴错误
/// </summary>
public HiwinRobotServoErrors AxisH { get; }
/// <summary>
/// 控制器错误
/// </summary>
public HiwinRobotControllerErrors Controller { get; }
/// <summary>
/// 返回整合的错误信息列表。
/// </summary>
public List<string> AggregateErrorMessages
{
get
{
var errs = new List<string>();
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
}
}