120 lines
4.8 KiB
C#
120 lines
4.8 KiB
C#
using Aurora.Api;
|
|
using System.Collections.Generic;
|
|
using VisionCommon;
|
|
|
|
namespace WeldingCommon.Vision.Device {
|
|
/// <summary>
|
|
/// 각 서브 시스템마다 SeqAdapter를 설정한다.
|
|
/// </summary>
|
|
public class EquipSeqManager : MachineSeqManager {
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
public EquipSeqManager() {
|
|
SetAdapters();
|
|
}
|
|
|
|
// 장비 환경에 맞게 수정해야 한다.
|
|
private void SetAdapters() {
|
|
// 각 서브 시스템에 맞는 SeqAdapter를 설정한다.
|
|
var subSysInfoPreAlign = VisionRecipeManager.GetSubSysInfo(eUnitId.Unit1, eSubSysId.SubSys2);
|
|
SetAdapter(subSysInfoPreAlign, new MainAlignSeqAdapter());
|
|
|
|
// 위에서 이미 설정된 서브시스템의 SeqAdapter는 Skip 된다.
|
|
// 공통으로 적용할 SeqAdapter를 일괄적으로 설정할 때 사용한다.
|
|
foreach (var unitId in VisionRecipeManager.GetUnitIds()) {
|
|
foreach (var subSysInfo in VisionRecipeManager.GetSubSysInfos(unitId)) {
|
|
SetAdapter(subSysInfo, new PreAlignSeqAdapter());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 장비 시퀀스 어댑터 정의를 위한 베이스 클래스
|
|
/// 각 서브 시스템 별로 사용되는 Action, Decision 노드를 정의한다.
|
|
/// AuroraVision 고정부에서 노드 탐색을 위한 맵을 구성한다.
|
|
/// </summary>
|
|
public abstract class MachineSeqAdapter : SeqAdapter {
|
|
/// <summary>
|
|
/// MachineSeqAdapter 생성자
|
|
/// </summary>
|
|
/// <param name="logTag">log Tag</param>
|
|
public MachineSeqAdapter(string logTag) : base(logTag) {
|
|
// 장비마다 사용될 노드의 개수가 다르기 때문에 맵을 작성해야 한다.
|
|
// AuroraVision 고정부에서 Action 노드 탐색을 위한 맵 구성
|
|
SetActionNode("TestActionNode", TestActionNode);
|
|
SetActionNode("NgTestActionNode", NgTestActionNode);
|
|
|
|
// AuroraVision 고정부에서 Decision 노드 탐색을 위한 맵 구성
|
|
SetDeicisionNode("TestDecisionNode", TestDecisionNode);
|
|
}
|
|
|
|
#region Action 노드 정의
|
|
public abstract SequenceActionResult TestActionNode(
|
|
SequenceContext context, string id, SequenceActionResult param);
|
|
public abstract SequenceActionResult NgTestActionNode(
|
|
SequenceContext context, string id, SequenceActionResult param);
|
|
#endregion
|
|
|
|
#region Decision 노드 정의
|
|
public abstract string TestDecisionNode(
|
|
SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param);
|
|
#endregion
|
|
}
|
|
|
|
#region 샘플 시퀀스 어댑터
|
|
// 서브 시스템 별로 SeqAdapter를 정의하여 동작을 다르게 구성한다.
|
|
// 모든 서브 시스템의 동작이 동일하다면 1개의 SeqAdapter만 사용할 수 있다.
|
|
/// <summary>
|
|
/// 샘풀 - 프리얼라인 시퀀스 어댑터
|
|
/// </summary>
|
|
public class PreAlignSeqAdapter : MachineSeqAdapter {
|
|
public PreAlignSeqAdapter() : base(typeof(PreAlignSeqAdapter).Name) {
|
|
}
|
|
|
|
public override SequenceActionResult TestActionNode(SequenceContext context, string id, SequenceActionResult param) {
|
|
_logger.I("Test Action");
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
public override SequenceActionResult NgTestActionNode(SequenceContext context, string id, SequenceActionResult param) {
|
|
_logger.I("Ng Test Action");
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
public override string TestDecisionNode(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param) {
|
|
_logger.I("Test Decision");
|
|
|
|
// 조건에 따라 SEQ_ID 분기
|
|
return "SEQ_ID_NEXT";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 샘풀 - 메인얼라인 시퀀스 어댑터
|
|
/// </summary>
|
|
public class MainAlignSeqAdapter : MachineSeqAdapter {
|
|
public MainAlignSeqAdapter() : base(typeof(MainAlignSeqAdapter).Name) {
|
|
}
|
|
|
|
public override SequenceActionResult TestActionNode(SequenceContext context, string id, SequenceActionResult param) {
|
|
_logger.I("Test Action");
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
public override SequenceActionResult NgTestActionNode(SequenceContext context, string id, SequenceActionResult param) {
|
|
_logger.I("Ng Test Action");
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
public override string TestDecisionNode(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param) {
|
|
_logger.I("Test Decision");
|
|
|
|
// 조건에 따라 SEQ_ID 분기
|
|
return "SEQ_ID_NEXT";
|
|
}
|
|
}
|
|
#endregion
|
|
}
|