2026-01-26 18:56:53 +09:00

90 lines
3.2 KiB
C#

/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api;
using System;
using VisionCommon;
namespace VisionAligner {
/// <summary>
/// 얼라인 리밋 체크
/// </summary>
public class AlignLimitChecker {
private AlignRecipe _AlignRecipe;
private Logger _Logger;
/// <summary>
/// 생성자
/// </summary>
/// <param name="alignRecipe">얼라인 레시피</param>
public AlignLimitChecker(AlignRecipe alignRecipe) {
_Logger = new Logger("AlignLimitChecker");
_AlignRecipe = alignRecipe;
}
/// <summary>
/// 얼라인 리밋 활성 유무
/// </summary>
/// <returns>얼라인 리밋 활성 유무</returns>
public bool IsEnabled() {
return _AlignRecipe.AlignLimit.Enabled;
}
/// <summary>
/// 얼라인 상태를 Get한다
/// </summary>
/// <param name="alignDelta">얼라인 보정량</param>
/// <returns>얼라인 상태</returns>
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;
}
/// <summary>
/// 얼라인 X값의 리밋 초과 유무 확인
/// </summary>
/// <param name="alignDelta">얼라인 보정량</param>
/// <returns>얼라인 X값의 리밋 초과 유무</returns>
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;
}
/// <summary>
/// 얼라인 Y값의 리밋 초과 유무 확인
/// </summary>
/// <param name="alignDelta">얼라인 보정량</param>
/// <returns>얼라인 Y값의 리밋 초과 유무</returns>
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;
}
/// <summary>
/// 얼라인 T값의 리밋 초과 유무 확인
/// </summary>
/// <param name="deltaT">얼라인 T보정량</param>
/// <returns>얼라인 T값의 리밋 초과 유무</returns>
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;
}
}
}