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.StageA; 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.SeqWeldingCellStageA].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; } } }