From 75eeb62af3c3c987f9951e55e9a071fd15440597 Mon Sep 17 00:00:00 2001 From: NohDoyeon241104 Date: Wed, 8 Apr 2026 18:33:50 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=98=A4=EC=B0=A8=20=EC=B6=94?= =?UTF-8?q?=EC=A0=81=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?-=20=EC=B6=94=ED=9B=84=20=ED=95=84=EC=9A=94=ED=95=A0=20?= =?UTF-8?q?=EA=B2=83=20=EA=B0=99=EC=95=84=EC=84=9C=20Fov=ED=95=84=EB=93=9C?= =?UTF-8?q?=EC=9D=98=20=EC=98=A4=EC=B0=A8=EB=B2=94=EC=9C=84=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85=ED=95=B4=EC=84=9C=20FOV=200,0=20=EA=B8=B0=EC=A4=80?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=2085%=20=EB=98=90=EB=8A=94=2090%=20=EB=93=B1?= =?UTF-8?q?=20=EB=B2=97=EC=96=B4=EB=82=9C=20Bits=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EB=B2=97=EC=96=B4=EB=82=98?= =?UTF-8?q?=EB=A9=B4=20=EB=A7=89=EC=95=84=EC=A3=BC=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=ED=95=A8.=20RTC6=EB=A7=8C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuroraLaserScanner/ScannerConfig.cs | 12 +++++++ .../AuroraLaserScanner/ScannerObj.cs | 5 +++ .../AuroraLaserScanner/ScannerRTC6.cs | 36 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/AuroraDevices/AuroraLaserScanner/ScannerConfig.cs b/AuroraDevices/AuroraLaserScanner/ScannerConfig.cs index 488aa7d..b5a9348 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerConfig.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerConfig.cs @@ -75,6 +75,18 @@ namespace AuroraLaserScanner public double RotaryEncoderOffset { get; set; } public double MOTFStageSpeed { get; set; } + #region 26.04.08 NDY MOTF Limit(추적 오차 한계) 변수 추가 --- RTC5에 있는 보드num 과 x,y,z에 대한 limit bit수를 입력하면 해당 오차 벗어나면 알려주는 메소드가 존재합니다. 현재는 stop을 직접하니깐 변수 추가하고 메소드 추가추가해서 사용하는 방식으로 확인 부탁드립니다. + [DisplayName("Tracking Error Limit X (mm)")] + public double FlyLimitXmm { get; set; } = 28.0; // 60 FOV 기준 약 90% 지점 - bit로 자동 변환되는지를 확인 해야함. + + [DisplayName("Tracking Error Limit Y (mm)")] + public double FlyLimitYmm { get; set; } = 28.0; + + [DisplayName("Tracking Error Limit Z (mm)")] + public double FlyLimitZmm { get; set; } = 10.0; // 3D 모드 사용 시 + #endregion + + [Category("Scan Area Size")] public double ScanXSize { get; set; } public double ScanYSize { get; set; } diff --git a/AuroraDevices/AuroraLaserScanner/ScannerObj.cs b/AuroraDevices/AuroraLaserScanner/ScannerObj.cs index 6c4b6bc..52d698f 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerObj.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerObj.cs @@ -337,5 +337,10 @@ namespace AuroraLaserScanner } + #region 26.04.08 NDY 오차 추적 메소드 OVERRIDE 추가 RTC6 (부모클래스 -자식클래스에서 override 가능하도록 abstract 처리 ) + public abstract void SetFlyLimit(uint portNo, int xMin, int xMax, int yMin, int yMax); + public abstract void SetFlyLimitZ(uint portNo, int zMin, int zMax); + #endregion + } } \ No newline at end of file diff --git a/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs b/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs index 34037db..be7ca3e 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs @@ -152,6 +152,28 @@ namespace AuroraLaserScanner } #region 좌표 변환 작업 수행 + // 26.04.08 NDY - MOTF Tracking Error Limit 설정 추가 - 요기서 처리해야 한다고 한다. + // 하드웨어 보호를 위해 실제 좌표 변환 및 가공 시작 전 울타리를 칩니다. + if (config.UseMarkingOnTheFly) + { + // 1. mm 단위를 bits 단위로 변환 + int xLimitBits = Convert.ToInt32(config.FlyLimitXmm * m_ScaleXYFactor); + int yLimitBits = Convert.ToInt32(config.FlyLimitYmm * m_ScaleXYFactor); + + // 2. 오버라이드된 메서드 호출 (중앙 0 기준 +- 범위 설정) + this.SetFlyLimit(m_deviceNo, -xLimitBits, xLimitBits, -yLimitBits, yLimitBits); + Log.D($"[RTC6ScannerUnit] MOTF Limit 적용: ±{config.FlyLimitXmm}mm (±{xLimitBits} bits)"); + + if (config.Use3DMode) + { + int zLimitBits = Convert.ToInt32(config.FlyLimitZmm * m_ScaleZFactor); + this.SetFlyLimitZ(m_deviceNo, -zLimitBits, zLimitBits); + Log.D($"[RTC6ScannerUnit] MOTF Z-Limit 적용: ±{config.FlyLimitZmm}mm (±{zLimitBits} bits)"); + } + } + + + SetOffset(config.TranslationXOffset, config.TranslationYOffset, 1); SetAngle(config.TranslationAngle, 1); Log.D(string.Format($"[RTC6ScannerUnit] 스캐너 좌표 변화값 설정(X,Y,Θ:{config.TranslationXOffset},{config.TranslationYOffset},{config.TranslationAngle})")); @@ -1099,5 +1121,19 @@ namespace AuroraLaserScanner { return RTC6Wrap.get_last_error(); } + + #region 26.04.08 NDY - 오차 추적 메소드 OVERRIDE 추가 RTC6 (자식클래스 -실제 RTC6Wrap전달 지점) + public override void SetFlyLimit(uint portNo,int xMin, int xMax , int yMin,int yMax ) + { + // mm 를 bits로 처리해줘야한다. + + RTC6Wrap.n_set_fly_limits(portNo, xMin, xMax, yMin, yMax); + } + public override void SetFlyLimitZ(uint portNo, int zMin, int zMax) + { + RTC6Wrap.n_set_fly_limits_z(portNo, zMin, zMax); + } + + #endregion } }