using Aurora.Api;
using System;
using VisionCommon;
namespace VisionAligner {
///
/// 얼라인 리밋 체크
///
public class AlignLimitChecker {
private AlignRecipe _AlignRecipe;
private Logger _Logger;
///
/// 생성자
///
/// 얼라인 레시피
public AlignLimitChecker(AlignRecipe alignRecipe) {
_Logger = new Logger("AlignLimitChecker");
_AlignRecipe = alignRecipe;
}
///
/// 얼라인 리밋 활성 유무
///
/// 얼라인 리밋 활성 유무
public bool IsEnabled() {
return _AlignRecipe.AlignLimit.Enabled;
}
///
/// 얼라인 상태를 Get한다
///
/// 얼라인 보정량
/// 얼라인 상태
public AlignStatus GetAlignLimitStatus(AlignDelta alignDelta) {
bool isOver = IsOverAlignLimitX(alignDelta);
isOver |= IsOverAlignLimitY(alignDelta);
isOver |= IsOverAlignLimitT(alignDelta.T);
if (isOver) {
return AlignStatus.ALIGN_LIMIT_OVER;
}
return AlignStatus.OK;
}
///
/// 얼라인 X값의 리밋 초과 유무 확인
///
/// 얼라인 보정량
/// 얼라인 X값의 리밋 초과 유무
protected bool IsOverAlignLimitX(AlignDelta alignDelta) {
if (Math.Abs(alignDelta.X) > _AlignRecipe.AlignLimit.LimitX) {
_Logger.I($"Over Align-LimitX! [deltaX : {alignDelta.ToStringX()}, limitX : {_AlignRecipe.AlignLimit.LimitX} mm]");
return true;
}
return false;
}
///
/// 얼라인 Y값의 리밋 초과 유무 확인
///
/// 얼라인 보정량
/// 얼라인 Y값의 리밋 초과 유무
protected bool IsOverAlignLimitY(AlignDelta alignDelta) {
if (Math.Abs(alignDelta.Y) > _AlignRecipe.AlignLimit.LimitY) {
_Logger.I($"Over Align-LimitY! [deltaY : { alignDelta.ToStringY()}, limitY : {_AlignRecipe.AlignLimit.LimitY} mm)]");
return true;
}
return false;
}
///
/// 얼라인 T값의 리밋 초과 유무 확인
///
/// 얼라인 T보정량
/// 얼라인 T값의 리밋 초과 유무
protected bool IsOverAlignLimitT(Angle deltaT) {
if (Math.Abs(deltaT.Degree) > _AlignRecipe.AlignLimit.LimitT) {
_Logger.I($"Over Align-LimitT! [deltaT : {deltaT}, limitT : {_AlignRecipe.AlignLimit.LimitT}]");
return true;
}
return false;
}
}
}