From cb935e251e1bc1d6232b8e7226fe7a207ad6fdfa Mon Sep 17 00:00:00 2001 From: choieigun Date: Fri, 6 Mar 2026 15:27:49 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=8A=A4=EC=BB=A8=EB=94=94?= =?UTF-8?q?=EC=85=98=20=EB=B0=9C=EC=83=9D=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Machines/ILSOS_CCW_H52A/Datas/CellInfoScheduler.cs | 9 ++++++++- Machines/ILSOS_CCW_H52A/Sequences/SeqAutoRunCCWH52A.cs | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) 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) {