fix: Busy bit 위치 변경 및 Scanner Cam 팝업 모션 수정
- Laser On Display 타이밍을 맞추기 위해 PC_WELD_BUSY bit 기록 위치 변경 (SeqAutoRunPTOP) - 레시피 Scanner Cam 팝업(WDScannerCamMotion)을 직접 실행 모드(publishMode:false)로 변경하고, 창 표시 시 모니터 타이머/Limit 초기화를 호출해 모션 미동작·좌표 0 고정 해소 - 작업일지 2026-06-26 추가, Laser Interface 문서 갱신 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
8bbac47244
commit
9c1daaee1d
Binary file not shown.
@ -725,7 +725,6 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
|
|
||||||
// 양극(P) 미사용 → 모든 페이지 음극 용접 비트로 응답 (PLC 트리거가 음극 PLC_WELD_TRIGGER_REQ라 정합)
|
// 양극(P) 미사용 → 모든 페이지 음극 용접 비트로 응답 (PLC 트리거가 음극 PLC_WELD_TRIGGER_REQ라 정합)
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, true);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, true);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
|
|
||||||
Thread.Sleep(200);
|
Thread.Sleep(200);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, false);
|
||||||
Thread.Sleep(5);
|
Thread.Sleep(5);
|
||||||
@ -792,6 +791,8 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 260626 Busy bit for Laser On Display
|
||||||
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, true);
|
||||||
_Scanner.SelectCorrectionTable(2);
|
_Scanner.SelectCorrectionTable(2);
|
||||||
|
|
||||||
_IO._iOUnit.WriteDoBit(Convert.ToInt32(ePrismaticDOAddress.CoreLaser_Control), true);
|
_IO._iOUnit.WriteDoBit(Convert.ToInt32(ePrismaticDOAddress.CoreLaser_Control), true);
|
||||||
@ -816,6 +817,10 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
Log.I($"[ExecuteWelding] Laser Gate OFF (Core+Ring)");
|
Log.I($"[ExecuteWelding] Laser Gate OFF (Core+Ring)");
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
// 260626 Busy bit 위치 변경 - Laser On Display bit
|
||||||
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
|
||||||
|
Log.I($"[WriteWeldComplete] 용접완료 송신 - BUSY=false (PageNo:{plcPageNo})");
|
||||||
|
Thread.Sleep(50);
|
||||||
|
|
||||||
_WeldingSpanTime = DateTime.Now.Subtract(weldingTime);
|
_WeldingSpanTime = DateTime.Now.Subtract(weldingTime);
|
||||||
|
|
||||||
@ -949,9 +954,6 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences
|
|||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false);
|
||||||
Log.I($"[WriteWeldComplete] 용접완료 송신 - READY_ACK=false (PageNo:{plcPageNo})");
|
Log.I($"[WriteWeldComplete] 용접완료 송신 - READY_ACK=false (PageNo:{plcPageNo})");
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false);
|
|
||||||
Log.I($"[WriteWeldComplete] 용접완료 송신 - BUSY=false (PageNo:{plcPageNo})");
|
|
||||||
Thread.Sleep(50);
|
|
||||||
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, true);
|
_PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, true);
|
||||||
Log.I($"[WriteWeldComplete] 용접완료 송신 - COMPLETE=true (PageNo:{plcPageNo})");
|
Log.I($"[WriteWeldComplete] 용접완료 송신 - COMPLETE=true (PageNo:{plcPageNo})");
|
||||||
Thread.Sleep(5);
|
Thread.Sleep(5);
|
||||||
|
|||||||
@ -23,11 +23,14 @@ namespace WeldingCommon.Views
|
|||||||
|
|
||||||
private delegate void HideWindow();
|
private delegate void HideWindow();
|
||||||
|
|
||||||
|
private readonly UCScannerMotionViewModel _MotionVM;
|
||||||
|
|
||||||
public WDScannerCamMotion(IAuroraEnvironment aurora, string scannerId)
|
public WDScannerCamMotion(IAuroraEnvironment aurora, string scannerId)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
motionView.DataContext = new UCScannerMotionViewModel(aurora, scannerId, publishMode: true);
|
_MotionVM = new UCScannerMotionViewModel(aurora, scannerId, publishMode: false);
|
||||||
|
motionView.DataContext = _MotionVM;
|
||||||
|
|
||||||
CreateScannerCameraView();
|
CreateScannerCameraView();
|
||||||
}
|
}
|
||||||
@ -46,6 +49,11 @@ namespace WeldingCommon.Views
|
|||||||
private void Window_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
|
private void Window_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
bool isVisible = (bool)e.NewValue;
|
bool isVisible = (bool)e.NewValue;
|
||||||
|
|
||||||
|
// 팝업 창에선 UCScannerMotion의 IsVisible 트리거가 발동하지 않으므로
|
||||||
|
// 모니터 타이머 시작 + Limit 초기화를 직접 호출한다.
|
||||||
|
_MotionVM.CMD_VisibleChanged.Execute(isVisible);
|
||||||
|
|
||||||
if (isVisible) {
|
if (isVisible) {
|
||||||
CameraUcManager.Instance.StartLiveAll(DisplayType);
|
CameraUcManager.Instance.StartLiveAll(DisplayType);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
21
docs/작업일지/2026_06_26.md
Normal file
21
docs/작업일지/2026_06_26.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# 작업일지 — 2026-06-26
|
||||||
|
|
||||||
|
## 1. Laser Display On 타이밍 관련 busy bit 위치 변경
|
||||||
|
|
||||||
|
- Laser Display On 타이밍을 맞추기 위해 busy bit 위치를 변경.
|
||||||
|
- (상세 구현 내용 추후 보완)
|
||||||
|
|
||||||
|
## 2. 레시피 Scanner Cam 팝업 모션/좌표 표시 수정
|
||||||
|
|
||||||
|
- **증상**: 레시피 화면 Scanner Cam 팝업(`WDScannerCamMotion`)에서 방향 Jog·Move X/Y 모션이 동작하지 않고, 갈보모터 X/Y 값이 0으로 고정됨. (CAM 영상 자체는 정상)
|
||||||
|
- **원인**:
|
||||||
|
- 팝업이 `UCScannerMotionViewModel`을 `publishMode: true`(이벤트 발행 전용)로 띄움 → 실제 이동은 매뉴얼 측 execute VM이 수행하는 구조.
|
||||||
|
- execute VM의 Limit(`CommandPosLimitMin/MaxX/Y`)는 매뉴얼 화면이 보일 때(`VisibleChanged → Init_XYLimitPos`)만 설정되는데, 팝업 조작 시 매뉴얼 화면은 비표시 → Limit가 0 → `CheckOverLimitPos`가 모든 목표를 "범위 초과"로 reject → 조용히 무동작.
|
||||||
|
- 팝업의 X/Y 표시는 `_MonitorTimer`로 갱신되나, 타이머는 `UCScannerMotion.xaml`의 `IsVisible` 트리거 → `VisibleChanged`로만 시작됨. 창 호스팅(코드비하인드 DataContext 주입 + Show/Hide)에선 이 트리거가 발동하지 않아 타이머 미작동 → 값 0 고정.
|
||||||
|
- **수정**: `WeldingComponents/WeldingCommon/Views/Recipes/WDScannerCamMotion.xaml.cs` **한 파일**만 변경.
|
||||||
|
- VM 참조 필드(`_MotionVM`) 추가.
|
||||||
|
- 생성자: `publishMode: true` → **`publishMode: false`**(매뉴얼과 동일한 직접 실행 모드)로 생성 + 참조 보관.
|
||||||
|
- `Window_IsVisibleChanged`에서 `_MotionVM.CMD_VisibleChanged.Execute(isVisible)` 호출 → 모니터 타이머 시작 + `Init_XYLimitPos()` 보장.
|
||||||
|
- **결과(기대)**: 팝업 모션이 매뉴얼 Scanner 화면과 동일하게 동작, X/Y 실시간 표시. `UCScannerMotionViewModel`은 무수정(매뉴얼 로직 100% 재사용).
|
||||||
|
- **검증**: `WeldingCommon` Debug|x64 컴파일 통과(에러 0).
|
||||||
|
- **남은 작업**: 실기 동작 확인 후, 미사용이 된 publish 우회 경로(`ScannerCommandMoveParam`·`PublishMotion`·`EVENT_SCANNER_COMMAND_MOVE` 구독/핸들러·`_PublishMode` 분기) dead code 정리 예정.
|
||||||
Loading…
x
Reference in New Issue
Block a user