90 lines
3.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|