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; } } }