156 lines
5.9 KiB
C#
156 lines
5.9 KiB
C#
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
|
|
}
|
|
}
|