2026-06-05 13:44:39 +09:00

99 lines
3.8 KiB
C#

using Aurora;
using Aurora.Api;
using VisionCommon;
using System;
using System.Collections.Generic;
using Aurora.Api.Devices;
namespace VisionSequence.Aligner {
/// <summary>
/// 모든 얼라인 시퀀스들을 사전에 등록하여 사용한다.
/// </summary>
public class AlignProcSeqManager {
private static Logger _Logger = new Logger("AlignProcSeqManager");
/// <summary>
/// 얼라인 공정 시퀀스를 생성하고 등록한다.
/// </summary>
/// <param name="auroraEnv">Aurora 환경 변수</param>
/// <param name="register">Aurora의 SequenceRegister</param>
public static void RegisterSeq(IAuroraEnvironment auroraEnv, SequenceRegister register) {
try {
bool isUsed_PN_AN = false;
foreach (var alignInfo in VisionRecipeManager.GetAlignInfos()) {
var alignRecipe = VisionRecipeManager.GetAlignRecipe(alignInfo);
SequenceBuilder seqBuilder = GetSeqBuilder(alignInfo);
if (seqBuilder != null) {
var seqName = GetSeqName(alignInfo);
register(seqName, seqBuilder);
}
var procFovType = alignRecipe.ProcParams.ProcFovType;
if ((procFovType == eProcFovType.C1_F1_AP2_A2 || procFovType == eProcFovType.C1_F1_SPN_AN) && !isUsed_PN_AN) {
isUsed_PN_AN = true;
}
}
if (isUsed_PN_AN) {
register(VisionKeys.AlignProcSeqKey_PN_AN, new AlignProcSeq_PN_AN().Builder(VisionKeys.AlignProcSeqKey_PN_AN));
}
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
}
/// <summary>
/// 시퀀스빌더를 얻어온다.
/// </summary>
/// <param name="alignInfo">얼라인 키 정보</param>
/// <returns>시퀀스빌더</returns>
public static SequenceBuilder GetSeqBuilder(AlignInfo alignInfo) {
try {
var seqName = GetSeqName(alignInfo);
SubSeqBase procSeq = new AlignProcSeq(seqName, alignInfo);
return procSeq.Builder(seqName);
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
return null;
}
/// <summary>
/// 얼라인 시퀀스를 얻어온다.
/// </summary>
/// <param name="alignInfo">얼라인 키 정보</param>
/// <returns>시퀀스</returns>
public static ISequence GetSeq(AlignInfo alignInfo) {
var seqName = GetSeqName(alignInfo);
return VisionEnv.AuroraEnv.SequenceEntry[seqName];
}
/// <summary>
/// 얼라인 시퀀스 파라미터를 얻어온다.
/// </summary>
/// <param name="alignInfo">얼라인 키 정보</param>
/// <param name="fovPositions">FOV별로 이동시킬 절대위치. null일 경우, 자동으로 Adapter에 정의된 티칭위치로 이동</param>
/// <returns>얼라인 공정 시퀀스 파라미터</returns>
public static AlignProcSeqParams GetAlignProcSeqParams(
AlignInfo alignInfo,
Dictionary<eFovId, Position> fovPositions = null,
eDisplayType displayType = eDisplayType.Main_1) {
return new AlignProcSeqParams(alignInfo, fovPositions, displayType);
}
/// <summary>
/// 시퀀스 이름을 얻어온다.
/// </summary>
/// <param name="alignInfo">얼라인 키 정보</param>
/// <returns>시퀀스 이름</returns>
public static string GetSeqName(AlignInfo alignInfo) {
return VisionKeys.AlignProcSeqKey + "_" + alignInfo.GetKey();
}
}
}