원복 코드 -> 레이저 출사 X
기존 코드에서 완료 플래그 초기화 추가 및 왕복 스테이지 동작으로 변경
This commit is contained in:
parent
e98384906b
commit
a7bec5220d
@ -304,7 +304,7 @@ namespace ILSOS_PrismaticScanner.Sequences
|
||||
var mainPage = CommonHelper.GetMainPage();
|
||||
_ScannerCanvasUserCtrl = mainPage.ScannerCanvasCtrlTeaching;
|
||||
_WeldingScannerListNo = eListNo.LIST1;
|
||||
_SelectedObjectList = FindObjects();
|
||||
//_SelectedObjectList = FindObjects(); // 중복 주석 처리 260417
|
||||
//Vision Correction File 선택
|
||||
_Scanner.SelectCorrectionTable(2);
|
||||
|
||||
@ -381,13 +381,15 @@ namespace ILSOS_PrismaticScanner.Sequences
|
||||
{
|
||||
Status.SetWorkingPosition(eWorkingPosition.UPLOADING_WELD_LIST);
|
||||
|
||||
bool _isUseInitParam = _InitParam == null ? false : true;
|
||||
|
||||
// TeachingRun에는 용접 시퀀스만 정의해서 Auto Run에서도 사용하므로 Offset 넣어줘야 함
|
||||
SeqUploadWeldingList_InitParam seqParams = new SeqUploadWeldingList_InitParam()
|
||||
{
|
||||
NeedSetLaserTiming = _InitParam.NeedSetLaserTiming,
|
||||
NeedSetLaserTiming = _isUseInitParam ? _InitParam.NeedSetLaserTiming : true,
|
||||
IncludeListStartEnd = false,
|
||||
CellMeasureCenterOffsetX = _SystemParameter.CellPosMeasureCenterOffsetX + _InitParam.CellCenterOffsetX,
|
||||
CellMeasureCenterOffsetY = _SystemParameter.CellPosMeasureCenterOffsetY + _InitParam.CellCenterOffsetY,
|
||||
CellMeasureCenterOffsetX = _SystemParameter.CellPosMeasureCenterOffsetX + (_isUseInitParam ? _InitParam.CellCenterOffsetX :0),
|
||||
CellMeasureCenterOffsetY = _SystemParameter.CellPosMeasureCenterOffsetY + (_isUseInitParam ? _InitParam.CellCenterOffsetY : 0),
|
||||
SelectedDrawObjectList = _SelectedObjectList,
|
||||
WeldingScannerListNo = _WeldingScannerListNo,
|
||||
PageNum = _PageNum,
|
||||
@ -466,27 +468,109 @@ namespace ILSOS_PrismaticScanner.Sequences
|
||||
|
||||
private SequenceActionResult SetMotion(SequenceContext context, string id, SequenceActionResult param)
|
||||
{
|
||||
// 메뉴얼 화면에서 셋팅이 필요해보임
|
||||
_ACS.SetMOTFParams(0, 0, 0, 0, 0);
|
||||
#region 디바이스 세팅 값만 가져오기
|
||||
var _scannerConfig = _Scanner.Config;
|
||||
#endregion
|
||||
Log.I("[SetMotion] 정방향 파라미터 세팅 시작");
|
||||
Log.I($"[SetMotion] PosX={_scannerConfig.MarkingStartX_1}, NegX={_scannerConfig.MarkingStartX_2}, Vel={_scannerConfig.MOTFStageSpeed}");
|
||||
// 메뉴얼 화면에서 셋팅이 필요해보임 - 출발, 도착, 스피드,rPCset_MOF_WEL_ACC,iPCset_MOF_WEL_MOTION_INTERVAL
|
||||
|
||||
// iMOTFComplete 리셋
|
||||
_ACS.ResetMOTFComp(); // 0 으로 바꿔주는 거 다시 추가해줘야함.
|
||||
|
||||
Log.I("[SetMotion] ResetMOTFComp 완료");
|
||||
// 정방향 파라미터 세팅 (310 → 640)
|
||||
bool result = _ACS.SetMOTFParams(
|
||||
posX: _scannerConfig.MarkingStartX_1,
|
||||
negX: _scannerConfig.MarkingStartX_2,
|
||||
velocity: _scannerConfig.MOTFStageSpeed,
|
||||
acc: 5000,
|
||||
interval: 100
|
||||
);
|
||||
|
||||
if (!result) { Log.E("[SetMotion] SetMOTFParams 실패"); return null; }
|
||||
Log.I("[SetMotion] SetMOTFParams 완료");
|
||||
_ACS.SetMOTFParams(_scannerConfig.MarkingStartX_1, _scannerConfig.MarkingStartX_2, _scannerConfig.MarkSpeed, 0, 0);
|
||||
return SequenceAction.Ok();
|
||||
|
||||
}
|
||||
|
||||
private SequenceActionResult StartMotion(SequenceContext context, string id, SequenceActionResult param)
|
||||
{
|
||||
_ACS.MOTFStart();
|
||||
// 모션 동작시키고 바로 확인하면 그냥 빠져나올 것 같음
|
||||
var res = context.Wait(1000, 100);
|
||||
if (res == E2.TIMEOUT) ;
|
||||
else if (res == E2.CANCELLED) { Log.E("[MOTF] Motion CANCELLED"); return null; }
|
||||
#region
|
||||
//_ACS.MOTFStart();
|
||||
//// 모션 동작시키고 바로 확인하면 그냥 빠져나올 것 같음
|
||||
//var res = context.Wait(1000, 100);
|
||||
//if (res == E2.TIMEOUT) {;}
|
||||
//else if (res == E2.CANCELLED) { Log.E("[MOTF] Motion CANCELLED"); return null; }
|
||||
|
||||
res = context.RetryUntilSuccess(() => _ACS.CheckMOTFComp(), 1000 * 20, 100, true);
|
||||
if (res == E2.TIMEOUT) { Log.E("[MOTF] Motion TIMEOUT"); return null; }
|
||||
else if (res == E2.CANCELLED) { Log.E("[MOTF] Motion CANCELLED"); return null; }
|
||||
//res = context.RetryUntilSuccess(() => _ACS.CheckMOTFComp(), 1000 * 20, 100, true);
|
||||
//if (res == E2.TIMEOUT) { Log.E("[MOTF] Motion TIMEOUT"); return null; }
|
||||
//else if (res == E2.CANCELLED) { Log.E("[MOTF] Motion CANCELLED"); return null; }
|
||||
|
||||
//return SequenceAction.Ok();
|
||||
|
||||
#endregion
|
||||
|
||||
var config = _Scanner.Config;
|
||||
|
||||
// ── 정방향 실행 (310 → 640) ──
|
||||
Log.I("[StartMotion] 정방향 MOTFStart 호출");
|
||||
_ACS.MOTFStart();
|
||||
|
||||
// 출발 후 50mm 이동 시간만큼 대기
|
||||
// 50mm / velocity(mm/s) * 1000 = ms
|
||||
int waitMs = (int)((50.0 / config.MOTFStageSpeed) * 1000) + 200; // 여유 200ms
|
||||
Log.I($"[StartMotion] 정방향 50mm 이동 대기 {waitMs}ms");
|
||||
var res = context.Wait(waitMs, 10);
|
||||
if (res == E2.CANCELLED) { Log.E("[StartMotion] 정방향 50mm 대기 CANCELLED"); return null; }
|
||||
|
||||
// 정방향 완료 대기
|
||||
Log.I("[StartMotion] 정방향 CheckMOTFComp 대기 시작");
|
||||
res = context.RetryUntilSuccess(() => _ACS.CheckMOTFComp(), 1000 * 30, 100, true);
|
||||
if (res == E2.TIMEOUT) { Log.E("[StartMotion] 정방향 TIMEOUT"); return null; }
|
||||
else if (res == E2.CANCELLED) { Log.E("[StartMotion] 정방향 CANCELLED"); return null; }
|
||||
Log.I("[StartMotion] 정방향 완료");
|
||||
|
||||
// ── 역방향 세팅 (640 → 310) ──
|
||||
Log.I("[StartMotion] 역방향 파라미터 세팅 시작");
|
||||
_ACS.ResetMOTFComp();
|
||||
Log.I("[StartMotion] 역방향 ResetMOTFComp 완료");
|
||||
|
||||
bool result = _ACS.SetMOTFParams(
|
||||
posX: config.MarkingStartX_2, // 640 출발
|
||||
negX: config.MarkingStartX_1, // 310 도착
|
||||
velocity: config.MOTFStageSpeed,
|
||||
acc: 5000,
|
||||
interval: 100
|
||||
);
|
||||
if (!result) { Log.E("[StartMotion] 역방향 SetMOTFParams 실패"); return null; }
|
||||
Log.I($"[StartMotion] 역방향 SetMOTFParams 완료 | PosX={config.MarkingStartX_2}, NegX={config.MarkingStartX_1}");
|
||||
|
||||
// ── 역방향 실행 (640 → 310) ──
|
||||
Log.I("[StartMotion] 역방향 MOTFStart 호출");
|
||||
_ACS.MOTFStart();
|
||||
|
||||
// 출발 후 50mm 이동 대기
|
||||
Log.I($"[StartMotion] 역방향 50mm 이동 대기 {waitMs}ms");
|
||||
res = context.Wait(waitMs, 10);
|
||||
if (res == E2.CANCELLED) { Log.E("[StartMotion] 역방향 50mm 대기 CANCELLED"); return null; }
|
||||
|
||||
// 역방향 완료 대기
|
||||
Log.I("[StartMotion] 역방향 CheckMOTFComp 대기 시작");
|
||||
res = context.RetryUntilSuccess(() => _ACS.CheckMOTFComp(), 1000 * 30, 100, true);
|
||||
if (res == E2.TIMEOUT) { Log.E("[StartMotion] 역방향 TIMEOUT"); return null; }
|
||||
else if (res == E2.CANCELLED) { Log.E("[StartMotion] 역방향 CANCELLED"); return null; }
|
||||
Log.I("[StartMotion] 역방향 완료 → EndWelding 진입");
|
||||
|
||||
return SequenceAction.Ok();
|
||||
|
||||
|
||||
}
|
||||
private SequenceActionResult EndWelding(SequenceContext context, string id, SequenceActionResult param)
|
||||
{
|
||||
|
||||
|
||||
_Scanner.WaitForListTaskCompleted(_SystemParameter.WeldLinesTaskTimeOut);
|
||||
Log.I("ExecuteList Complete");
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@ namespace WeldingCommon.Devices.ACS
|
||||
bool MOTFStart();
|
||||
bool MOTFStop();
|
||||
bool CheckMOTFComp();
|
||||
bool ResetMOTFComp(); // ← 여기에 추가 BUFFER 17에서 완료에 대한 플래그 리셋 0 으로 하는 것 260417
|
||||
|
||||
// OneShot
|
||||
bool SetOneShot(int msecShotTime, double secPhzShotPulse1, double secPhzShotPulse2);
|
||||
@ -244,6 +245,19 @@ namespace WeldingCommon.Devices.ACS
|
||||
return ReadVariableInt(iMOTFComplete) > 0;
|
||||
}
|
||||
|
||||
// 260417여기 추가
|
||||
bool IScannerACS.ResetMOTFComp()
|
||||
{
|
||||
if (IsSimul) return true;
|
||||
if (WriteVariableInt(iMOTFComplete, 0))
|
||||
{
|
||||
Log.I("ResetMOTFComp >> Complete (iPCset_MOF_WEL_COMP = 0)");
|
||||
return true;
|
||||
}
|
||||
Log.E("ResetMOTFComp >> Fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
// ── OneShot ──────────────────────────────────────────────────────────
|
||||
bool IScannerACS.SetOneShot(int msecShotTime, double secPhzShotPulse1, double secPhzShotPulse2)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user