diff --git a/Machines/ILSOS_CCW_H52A/Datas/CellInfoScheduler.cs b/Machines/ILSOS_CCW_H52A/Datas/CellInfoScheduler.cs index 0b7085b..f40e347 100644 --- a/Machines/ILSOS_CCW_H52A/Datas/CellInfoScheduler.cs +++ b/Machines/ILSOS_CCW_H52A/Datas/CellInfoScheduler.cs @@ -35,7 +35,14 @@ namespace ILSOS_CCW_H52A.Data { private readonly Logger _log = new Logger("CellInfoScheduler"); public JigInfo Prefetch2 { get; private set; } // 전전 셀: 셀 정보 수신, 업로드 전 - public JigInfo Prefetch1 { get; private set; } // 전 셀: 업로드 완료, 실행 중 / 완료 체크 대상 + + // volatile: Shift()에서 Prefetch1 = Prefetch2 대입이 release fence 역할. + // EncoderMonitor 스레드가 Prefetch1을 읽을 때 acquire fence로 JigNo 등 모든 필드 가시성 보장. + private volatile JigInfo _prefetch1; + public JigInfo Prefetch1 { + get => _prefetch1; + private set => _prefetch1 = value; + } /// 현재 보고 대상 JigInfo (CheckScannerListComplete에서 지정, 보고 완료 후 null) public JigInfo ReportTarget { get; set; } diff --git a/Machines/ILSOS_CCW_H52A/Sequences/SeqAutoRunCCWH52A.cs b/Machines/ILSOS_CCW_H52A/Sequences/SeqAutoRunCCWH52A.cs index abc42fc..349d214 100644 --- a/Machines/ILSOS_CCW_H52A/Sequences/SeqAutoRunCCWH52A.cs +++ b/Machines/ILSOS_CCW_H52A/Sequences/SeqAutoRunCCWH52A.cs @@ -964,7 +964,7 @@ namespace ILSOS_CCW_H52A.Sequences var executeTarget = _CellScheduler.Prefetch1; if (WeldingInPosition) { - if (executeTarget != null && executeTarget.IsCanExist) { + if (executeTarget != null && executeTarget.IsCanExist && executeTarget.JigNo > 0) { Log.I($"Fork Before Min Rotate Encoder X : ({encoderX}), Encoder Y : ({currentAngle}), PLC Rotary : ({CurrentPosPLC}), List {executeTarget.ListNo}, JigNo : ({executeTarget.JigNo})"); if (!_SystemParameter.BypassModeLBAD) { if (!executeTarget.CheckSendCellinfo) {