LGES-OC5-PtoP-Welder/Machines/ILSOS_PrismaticGun/Process/SequenceManagerForMainWelder.cs
2026-06-05 13:44:39 +09:00

128 lines
5.3 KiB
C#

using Aurora;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeldingCommon.Devices;
using WeldingCommon;
using Aurora.Api;
using WeldingCommon.Sequences;
using ILSOS_PrismaticGun.Sequences;
using ILSOS_PrismaticGun.Sequences.SubSequence;
using ILSOS_PrismaticGun.Sequences.Monitoring;
using ILSOS_PrismaticGun.Sequences.SubSequence.PLCInterface;
using ILSOS_PrismaticGun.Sequences.SubSequence.StageA;
using ILSOS_PrismaticGun.Sequences.SubSequence.StageB;
using System.Threading;
namespace ILSOS_PrismaticGun.Process
{
// 비동기 시퀀스를 사용하기 때문에... 클래스 객체가 여러개 필요함
public class SequenceManagerForMainWelder
{
private static SequenceManagerForMainWelder _Instance;
public static SequenceManagerForMainWelder Instance {
get {
if (_Instance is null) {
_Instance = new SequenceManagerForMainWelder();
}
return _Instance;
}
}
private IAuroraEnvironment _env;
//public SeqTeachingPosMove TeachingPosSequenceA { get; private set; }
//public SeqTeachingPosMove TeachingPosSequenceB { get; private set; }
//public SeqAutoRunPrismaticGun MainSequence { get; private set; }
//public SeqLoadCell LoadCellSequence { get; private set; }
//public SeqLoadCell LoadCellSequenceB { get; private set; }
//public SeqWeldingCell WeldingCellSequenceA{ get; private set; }
//public SeqWeldingCell WeldingCellSequenceB{ get; private set; }
//public SeqUnloadCell UnloadingCellSequenceA { get; private set; }
//public SeqUnloadCell UnloadingCellSequenceB { get; private set; }
//public SeqAutoRunPrismaticGunType MainSequenceTest { get; private set; }
public void Init(IAuroraEnvironment env)
{
_env = env;
//TeachingPosSequenceA = new SeqTeachingPosMove();
//TeachingPosSequenceB = new SeqTeachingPosMove();
//MainSequence = new SeqAutoRunPrismaticGun();
//LoadCellSequence = new SeqLoadCell();
//LoadCellSequenceB = new SeqLoadCell();
//WeldingCellSequenceA = new SeqWeldingCell();
//WeldingCellSequenceB = new SeqWeldingCell();
//UnloadingCellSequenceA = new SeqUnloadCell();
//UnloadingCellSequenceB = new SeqUnloadCell();
//MainSequenceTest = new SeqAutoRunPrismaticGunType();
}
public void RegisterSequence(IAuroraEnvironment aurora, SequenceRegister register)
{
register(SequenceIds.TargetMoveSequenceStageA, SeqTargetPosMoveStageA.Builder());
register(SequenceIds.TargetMoveSequenceStageB, SeqTargetPosMoveStageB.Builder());
// Main Sequence는 하나만 사용
register(SequenceIds.TeachingMoveSequenceStageA, SeqTeachingPosMoveStageA.Builder());
register(SequenceIds.TeachingMoveSequenceStageB, SeqTeachingPosMoveStageB.Builder());
//Process Sequence
register(SequenceIds.SeqAutoRunPrismaticGunStageA, SeqAutoRunPrismaticGunStageA.Builder());
register(SequenceIds.SeqAutoRunPrismaticGunStageB, SeqAutoRunPrismaticGunStageB.Builder());
//register(SequenceIds.SeqLoadCellStageA, SeqLoadCellStageA.Builder());
//register(SequenceIds.SeqLoadCellStageB, SeqLoadCellStageB.Builder());
register(SequenceIds.SeqWeldingCellStageA, SeqWeldingCellStageA.Builder());
register(SequenceIds.SeqWeldingCellStageB, SeqWeldingCellStageB.Builder());
//register(SequenceIds.SeqUnloadCellStageA, SeqUnloadCellStageA.Builder());
//register(SequenceIds.SeqUnloadCellStageB, SeqUnloadCellStageB.Builder());
register(SequenceIds.PLCRequest, SeqAutoStart.Builder());
//Monitoring
register(CommonSequenceIds.AlarmMonitor, SeqAlarmMonitor.Builder());
register(SequenceIds.StatusMonitor, SeqStatusMonitor.Builder());
register(CommonSequenceIds.PLCMonitor, PLCMonitor.Builder());
// Manual or Maint
register(SequenceIds.OneShot, SeqOneShot.Builder());
register(SequenceIds.SplitLine, SeqSplitLine.Builder());
register(SequenceIds.MotorInit, SeqMotorInit.Builder());
}
public bool CanExcuteLaserSequence()
{
if (_env.SequenceEntry[SequenceIds.OneShot].RunState != SequenceRunState.Idle)
return false;
else if (_env.SequenceEntry[SequenceIds.SplitLine].RunState != SequenceRunState.Idle)
return false;
else if (_env.SequenceEntry[SequenceIds.SeqAutoRunPrismaticGunStageA].RunState != SequenceRunState.Idle)
return false;
else if (_env.SequenceEntry[SequenceIds.SeqAutoRunPrismaticGunStageB].RunState != SequenceRunState.Idle)
return false;
return true;
}
public bool Terminate()
{
_env.SequenceEntry[CommonSequenceIds.AlarmMonitor].Stop();
_env.SequenceEntry[SequenceIds.StatusMonitor].Stop();
_env.SequenceEntry[CommonSequenceIds.PLCMonitor].Stop();
Thread.Sleep(200);
return true;
}
}
}