diff --git a/AuroraDevices/AuroraLaserScanner/Scanner.cs b/AuroraDevices/AuroraLaserScanner/Scanner.cs index 79f220f..589812a 100644 --- a/AuroraDevices/AuroraLaserScanner/Scanner.cs +++ b/AuroraDevices/AuroraLaserScanner/Scanner.cs @@ -350,6 +350,33 @@ namespace AuroraLaserScanner } _scannerObj.WaitForEncoderX(position); } + public void WaitForEncoderY(double position) + { + if (!IsActivated) + { + return; + } + _scannerObj.WaitForEncoderY(position); + } + public void GetListPointer(out eListNo list_no, out uint list_pos) + { + list_no = eListNo.LIST1; + list_pos = 0; + if (!IsActivated) + { + return; + } + _scannerObj.GetListPointer(out list_no, out list_pos); + } + public void SetFlyY(double encoderResolution) + { + if (!IsActivated) + { + return; + } + _scannerObj.SetFlyY(encoderResolution); + } + public void WaitForEncoderRotateX(double angle) { diff --git a/AuroraDevices/AuroraLaserScanner/ScannerObj.cs b/AuroraDevices/AuroraLaserScanner/ScannerObj.cs index 4c68573..f4d5ead 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerObj.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerObj.cs @@ -315,6 +315,7 @@ namespace AuroraLaserScanner public abstract void SetConfigList(uint mem1, uint mem2); public abstract uint GetListSpace(); #endregion + public abstract void GetListPointer(out eListNo list_no, out uint list_pos); public void WaitForListTaskCompleted(int timeOut, SequenceContext context = null) //단위는 초 { TimeSpan spanTime; diff --git a/AuroraDevices/AuroraLaserScanner/ScannerRTC5.cs b/AuroraDevices/AuroraLaserScanner/ScannerRTC5.cs index 8823d9c..58556b0 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerRTC5.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerRTC5.cs @@ -1109,5 +1109,12 @@ namespace AuroraLaserScanner { return RTC5Wrap.get_last_error(); } + public override void GetListPointer(out eListNo list_no, out uint list_pos) + { + uint listNo = 0; + RTC5Wrap.get_list_pointer(out listNo, out list_pos); + list_no = (eListNo)listNo; + } + } } diff --git a/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs b/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs index 5849202..5f1f09a 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerRTC6.cs @@ -1121,6 +1121,12 @@ namespace AuroraLaserScanner { return RTC6Wrap.get_last_error(); } + public override void GetListPointer(out eListNo list_no, out uint list_pos) + { + uint listNo = 0; + RTC6Wrap.get_list_pointer(out listNo, out list_pos); + list_no = (eListNo)listNo; + } #region 26.04.08 NDY - 오차 추적 메소드 OVERRIDE 추가 RTC6 (자식클래스 -실제 RTC6Wrap전달 지점) //public override void SetFlyLimit(uint portNo,int xMin, int xMax , int yMin,int yMax ) @@ -1133,7 +1139,7 @@ namespace AuroraLaserScanner //{ // RTC6Wrap.n_set_fly_limits_z(portNo, zMin, zMax); //} - + #endregion } } diff --git a/AuroraDevices/AuroraLaserScanner/ScannerSimul.cs b/AuroraDevices/AuroraLaserScanner/ScannerSimul.cs index 47c9d4d..cff374e 100644 --- a/AuroraDevices/AuroraLaserScanner/ScannerSimul.cs +++ b/AuroraDevices/AuroraLaserScanner/ScannerSimul.cs @@ -569,5 +569,10 @@ namespace AuroraLaserScanner return 0; } + public override void GetListPointer(out eListNo list_no, out uint list_pos) + { + list_no = eListNo.LIST1; + list_pos = 0; + } } } diff --git a/Machines/ILSOS_PrismaticScanner/Sequences/SeqAutoRunPrismaticScanner.cs b/Machines/ILSOS_PrismaticScanner/Sequences/SeqAutoRunPrismaticScanner.cs index 4d9cd36..7d21db3 100644 --- a/Machines/ILSOS_PrismaticScanner/Sequences/SeqAutoRunPrismaticScanner.cs +++ b/Machines/ILSOS_PrismaticScanner/Sequences/SeqAutoRunPrismaticScanner.cs @@ -181,7 +181,11 @@ namespace ILSOS_PrismaticScanner.Sequences Log.I("===== [SEQ_ENTER] Sequence entry ====="); Log.I("SeqTeachingRun Start"); - _InitParam = param.Param as SeqTeachingRun_InitParam; + _InitParam = param.Param as SeqTeachingRun_InitParam; // 이곳에서 못 가져오는 이유 + if(_InitParam == null) + { + Log.D($"(확인용)InitParam이 ({_InitParam}) null 입니다."); + } _SystemParameter = context.Settings[CommonSettingIds.SystemParameter] as SystemParameter; _SequenceSetting = context.Settings[CommonSettingIds.Sequence] as SequenceSetting; @@ -256,7 +260,7 @@ namespace ILSOS_PrismaticScanner.Sequences Log.I("[MoveStageToOrigin] Stage X -> 310 move start"); // 26.04.17 NDY - start from 310 - _AxisX.SetTargetPos(310, TargetPosType.ABS); + _AxisX.SetTargetPos(0, TargetPosType.ABS); _AxisX.SetMoveVelocityImm(AuroraACS.Speed.M); _AxisX.AccelerationImm(AuroraACS.Speed.M); _AxisX.DecelerationImm(AuroraACS.Speed.M); @@ -264,7 +268,7 @@ namespace ILSOS_PrismaticScanner.Sequences _AxisX.Move(); Log.D("[MoveStageToOrigin] AxisX.Move() called (target=310)"); - // Laser FocusPosition Move 22.8 <- Z axis material position + // Laser FocusPosition Move 22.8 <- Z axis material position- 자재 위치 기준 하드 코딩 값 _AxisZ.SetTargetPos(22.8, TargetPosType.ABS); _AxisZ.SetMoveVelocityImm(AuroraACS.Speed.M); _AxisZ.AccelerationImm(AuroraACS.Speed.M); @@ -280,7 +284,7 @@ namespace ILSOS_PrismaticScanner.Sequences // () => _AxisX.IsReachedTargetPosition(0), // 30 * 1000, 20, true); var res = context.RetryUntilSuccess( - () => _AxisX.IsReachedTargetPosition(310), + () => _AxisX.IsReachedTargetPosition(0), 30 * 1000, 20, true); if (res == E2.TIMEOUT) { Log.E("[MoveStageToOrigin] TIMEOUT"); return null; } @@ -293,6 +297,7 @@ namespace ILSOS_PrismaticScanner.Sequences // ==================== SEQ_STANDBY_SCANNER ==================== private SequenceActionResult SetStandbyScanner(SequenceContext context, string id, SequenceActionResult param) { + var mainPage = CommonHelper.GetMainPage(); _ScannerCanvasUserCtrl = mainPage.ScannerCanvasCtrlTeaching; _WeldingScannerListNo = eListNo.LIST1; @@ -310,17 +315,18 @@ namespace ILSOS_PrismaticScanner.Sequences _Scanner.SetStartList(_WeldingScannerListNo); Log.D($"[EncoderReset] SetStartList({_WeldingScannerListNo}) done"); - _Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); - Log.I($"[EncoderReset] SetFlyX: {_Scanner.Config.MarkingOnTheFlyEncoderResolutionX}"); + _Scanner.SetFlyY(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); + // _Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); + Log.I($"[EncoderReset] SetFlyY: {_Scanner.Config.MarkingOnTheFlyEncoderResolutionX}"); //_Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX); //Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartEncoderPositionX}"); // 26.04.17 NDY - encoder reset at Stage X = 310 - _Scanner.StoreEncoder(0); - _Scanner.SaveAndRestartTimer(); + //_Scanner.StoreEncoder(0); + //_Scanner.SaveAndRestartTimer(); - Log.I("[EncoderReset] Complete - Stage(310) = Scanner Encoder(0) synchronized"); + //Log.I("[EncoderReset] Complete - Stage(310) = Scanner Encoder(0) synchronized"); return SequenceAction.Ok(); } @@ -342,7 +348,7 @@ namespace ILSOS_PrismaticScanner.Sequences var mainPage = CommonHelper.GetMainPage(); _ScannerCanvasUserCtrl = mainPage.ScannerCanvasCtrlTeaching; - + int layerIdx = _PageNum - 1; Log.D($"[SetBeforeUpload] LayerIndex={layerIdx}, TotalLayers={_ScannerCanvasUserCtrl.Model.Layers.Count()}"); @@ -369,7 +375,7 @@ namespace ILSOS_PrismaticScanner.Sequences // 기존 코드 유지 (if _PageNum==0 -> if _PageNum==2 수정) Log.I($"[SetBeforeUpload] PageNum=2 -> WaitForEncoderX({_Scanner.Config.MarkingStartX_1:F4})"); Log.D($" MarkingStartX_1={_Scanner.Config.MarkingStartX_1} / XDiff_Page1and2={_Scanner.Config.XDiff_Page1and2}"); - _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartX_1); + _Scanner.WaitForEncoderY(-_Scanner.Config.MarkingStartX_1); Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartX_1}"); // 26.04.17 NDY - if need 360 boundary, replace with below @@ -381,7 +387,7 @@ namespace ILSOS_PrismaticScanner.Sequences // 기존 코드 유지 Log.I($"[SetBeforeUpload] PageNum=4 -> WaitForEncoderX({_Scanner.Config.MarkingStartX_2:F4})"); Log.D($" MarkingStartX_2={_Scanner.Config.MarkingStartX_2} / XDiff_Page3and4={_Scanner.Config.XDiff_Page3and4}"); - _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartX_2); + _Scanner.WaitForEncoderY(-_Scanner.Config.MarkingStartX_2); Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartX_2}"); // 26.04.17 NDY - if need 590 boundary, replace with below @@ -474,10 +480,12 @@ namespace ILSOS_PrismaticScanner.Sequences { // Close list buffer before execute - subsequence has no SetStartList/SetEndList //Log.I($"[DoComponentWelding] ListSpace (before SetEndList)={_Scanner.GetListSpace()}"); - //_Scanner.SetEndList(); + _Scanner.SetEndList(); Log.I($"[DoComponentWelding] ListSpace (after SetEndList)={_Scanner.GetListSpace()}"); - Log.I("ExecuteList Start"); + double x = 0.0, y = 0.0; + _Scanner.GetEncoder(out x, out y); + Log.I($"ExecuteList Start(Encoder x[{x}], y[{y}])"); Log.I($"Welding List Space : {_Scanner.GetListSpace()}"); DateTime weldingTime = DateTime.Now; _Scanner.ExecuteList(_WeldingScannerListNo); @@ -520,6 +528,10 @@ namespace ILSOS_PrismaticScanner.Sequences _ACS.ResetMOTFComp(); Log.I("[SetMotion] ResetMOTFComp done"); + double x = 0.0, y = 0.0; + _Scanner.GetEncoder(out x, out y); + Log.I($"Motion Move End (Encoder x[{x}], y[{y}])"); + // Forward direction param setting (310 -> 640) bool result = _ACS.SetMOTFParams( posX: _scannerConfig.MarkingStartX_1, @@ -591,6 +603,7 @@ namespace ILSOS_PrismaticScanner.Sequences res = context.Wait(waitMs, 10); if (res == E2.CANCELLED) { Log.E("[StartMotion] Reverse 50mm wait CANCELLED"); return null; } + Log.I("[StartMotion] Reverse CheckMOTFComp wait start"); res = context.RetryUntilSuccess(() => _ACS.CheckMOTFComp(), 1000 * 30, 100, true); if (res == E2.TIMEOUT) { Log.E("[StartMotion] Reverse TIMEOUT"); return null; } @@ -599,7 +612,7 @@ namespace ILSOS_PrismaticScanner.Sequences #region Stage X return to 0 after welding complete // 26.04.16 NDY - Stage X return to origin(0) after welding - _AxisX.SetTargetPos(0, TargetPosType.ABS); + _AxisX.SetTargetPos(25, TargetPosType.ABS); _AxisX.SetMoveVelocityImm(AuroraACS.Speed.M); _AxisX.AccelerationImm(AuroraACS.Speed.M); _AxisX.DecelerationImm(AuroraACS.Speed.M); @@ -607,8 +620,20 @@ namespace ILSOS_PrismaticScanner.Sequences _AxisX.Move(); Log.D("[StartMotion] AxisX.Move() to 0 called"); + + + Func plcResponse = () => { + Debug.WriteLine($"Scanner Busy : {_Scanner.GetBusyStatus()}"); + eListNo list; + uint point = 0; + _Scanner.GetListPointer(out list, out point); + Debug.WriteLine($"Scanner list Pointer : {point}"); + + return _AxisX.IsReachedTargetPosition(25); + }; + res = context.RetryUntilSuccess( - () => _AxisX.IsReachedTargetPosition(0), + plcResponse, 30 * 1000, 20, true); if (res == E2.TIMEOUT) { Log.E("[EndWelding] Stage X return TIMEOUT"); } @@ -635,9 +660,9 @@ namespace ILSOS_PrismaticScanner.Sequences Log.D($"[TactTime] Complete All Component Weld : {_MeasurementSpanTime.TotalMilliseconds}"); // Analog output - COMMAND mode = direct (not list) - _Scanner.WriteDA((uint)eAnalogPortOut.DA1, 5, eFunctionType.COMMAND); - _Scanner.WriteDA((uint)eAnalogPortOut.DA2, 5, eFunctionType.COMMAND); - Log.D("[EndWelding] WriteDA(DA1=5, DA2=5) done"); + _Scanner.WriteDA((uint)eAnalogPortOut.DA1, 0, eFunctionType.COMMAND); + _Scanner.WriteDA((uint)eAnalogPortOut.DA2, 0, eFunctionType.COMMAND); + Log.D("[EndWelding] WriteDA(DA1=0, DA2=0) done"); _Scanner.JumpAbs(0, 0, eFunctionType.COMMAND); Log.D("[EndWelding] JumpAbs(0,0) done"); diff --git a/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs b/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs index 8a851d1..426e72c 100644 --- a/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs +++ b/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs @@ -223,13 +223,6 @@ namespace ILSOS_PrismaticScanner.Views // //VisionRecipeNo = 0 // 해당 InitParam에는 없는 선언 //}; - // 26 04 17 수정 - //var param = new SeqAutoRunPrismaticScanner_InitParam() - //{ - // NeedSetLaserTiming = true, - // IsObjectSelectAll = true, // 전체 오브젝트 선택 - //}; - var param = new SeqTeachingRun_InitParam() { IsObjectSelectAll = true, @@ -292,15 +285,13 @@ namespace ILSOS_PrismaticScanner.Views public override void OnAutoRunStopRequest() { base.OnAutoRunStopRequest(); - //// Prewelding은 자동 운전 정지 와도 무시 - //StopSequenceAutoRun(); } private void OnStopSequenceAutoRun(object obj = null) { - if (_SeqAutoRun.RunState == SequenceRunState.Idle) { - return; - } + //if (_SeqAutoRun.RunState == SequenceRunState.Idle) { + // return; + //} _SeqAutoRun.Stop(); diff --git a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs index af59452..1209382 100644 --- a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs +++ b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs @@ -1,5 +1,6 @@ using Aurora.Api; using Aurora.Api.Devices; +using Aurora.Util.HislogPlus; using AuroraLaser; using AuroraLaserScanner; using CoreUnit.Control.UserControl.Canvas; @@ -117,7 +118,7 @@ namespace WeldingCommon.Sequences private SequenceActionResult Sequence_Enter(SequenceContext context, string id, SequenceActionResult param) { - Log.I("SeqUploadWeldingList Start"); + Log.I("[Sequence_Enter] SeqUploadWeldingList Start"); _InitParam = param.Param as SeqUploadWeldingList_InitParam; _LaserPowerCalParam = context.GetSetting(CommonSettingIds.LaserPowerCalParam);//우선 AuroraRecipe로 상속받아서 함수 사용하도록 함 @@ -129,7 +130,7 @@ namespace WeldingCommon.Sequences InitDev(context); if (!CheckDeviceReady(context)) { //Check Device AlarmManager.Alarm(AlarmCode.ALARM_SEQUENCE_UploadWeldingList_DeviceNotReady); - Log.E("The devices are not active."); + Log.E("[Sequence_Enter] The devices are not active."); return null; } @@ -140,7 +141,7 @@ namespace WeldingCommon.Sequences // ian0513, 이게 여기 있어야 할까??, 무엇을 측정 하기 위한건지 명확히 알고 실제 공정이면 다른 밑의 Node 로 변경 _UploadstartTime = DateTime.Now; - + isFirst = true; return SequenceAction.Ok(); } @@ -152,11 +153,13 @@ namespace WeldingCommon.Sequences _FlyOffsetX = 0; _FlyOffsetY = 0; - if (_InitParam.PageNum == 1 || _InitParam.PageNum == 2) - _FlyOffsetY += _Scanner.Config.XDiff_Page1and2; + if (_Scanner.Config.UseMarkingOnTheFly) { + if (_InitParam.PageNum == 1 || _InitParam.PageNum == 2) + _FlyOffsetY += _Scanner.Config.XDiff_Page1and2; - else - _FlyOffsetY += _Scanner.Config.XDiff_Page3and4; + else + _FlyOffsetY += _Scanner.Config.XDiff_Page3and4; + } return true; } @@ -219,7 +222,7 @@ namespace WeldingCommon.Sequences { if (!CheckCondition()) { AlarmManager.Alarm(AlarmCode.ALARM_SEQUENCE_UploadWeldingList_CheckInitCondition); - Log.E("Condition is not in state to start sequence."); + Log.E("[CheckInitCondition] Condition is not in state to start sequence."); context.PutValue(ContextKey.KEY_SEQUENCE_RESULT, false); return SEQ_COMPLETE; } @@ -227,7 +230,7 @@ namespace WeldingCommon.Sequences var startTime = DateTime.Now; context.PutValue(ContextKey.KEY_SEQUENCE_START_TIME, startTime); - Log.D("UploadWeldingList Sequence CheckInitCondition"); + Log.D("[CheckInitCondition] UploadWeldingList Sequence CheckInitCondition"); return SEQ_MARKING_ON_THE_FLY_ON; } @@ -235,45 +238,46 @@ namespace WeldingCommon.Sequences private SequenceActionResult MarkingOnTheFlyOn(SequenceContext context, string id, SequenceActionResult param) { #region 260416 복원 -지운 내용 복원함. - if (_Scanner.Config.UseMarkingOnTheFly) - { - if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) - { - // 1. Linear Track OTF 활성화 및 엔코더 초기화 - _Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); + //if (_Scanner.Config.UseMarkingOnTheFly) + //{ + // if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) + // { + // // 1. Linear Track OTF 활성화 및 엔코더 초기화 + // _Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); - // 2. 엔코더 특정 위치갈 때까지 대기 - _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX); + // // 2. 엔코더 특정 위치갈 때까지 대기 + // _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX); - _FlyOffsetX = _Scanner.Config.MarkingOntheFlyOffsetX; - _FlyOffsetY = _Scanner.Config.MarkingOntheFlyOffsetY; + // _FlyOffsetX = _Scanner.Config.MarkingOntheFlyOffsetX; + // _FlyOffsetY = _Scanner.Config.MarkingOntheFlyOffsetY; - } - else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) - { - Log.I(string.Format("MOTF 사용, Rotate 보상")); - // 1. 엔코더 값이 들어오면 바로 X(Rotary) Encoder 리셋 - _Scanner.SetFlyRotate(_Scanner.Config.MarkingOnTheFlyEncoderResolutionRotate); + // } + // else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) + // { + // Log.I(string.Format("MOTF 사용, Rotate 보상")); + // // 1. 엔코더 값이 들어오면 바로 X(Rotary) Encoder 리셋 + // _Scanner.SetFlyRotate(_Scanner.Config.MarkingOnTheFlyEncoderResolutionRotate); - // 2. 일괄 회전.(OTW 세팅시, Encoder가 0부터 시작하므로) - foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) - { - obj.Rotate(ROTATION_DEGREE, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // +15도 회전 - } + // // 2. 일괄 회전.(OTW 세팅시, Encoder가 0부터 시작하므로) + // foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) + // { + // obj.Rotate(ROTATION_DEGREE, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // +15도 회전 + // } - // 3. 원하는 용접 시작 각도 올 때까지 기다리기. - double weldingAngle = _Scanner.Config.MarkingRangeMinRotate + ROTATION_DEGREE; - _Scanner.WaitForEncoderRotateX(weldingAngle); // -5도부터 용접시작하고 싶으면 10도 넣으면 됨 + // // 3. 원하는 용접 시작 각도 올 때까지 기다리기. + // double weldingAngle = _Scanner.Config.MarkingRangeMinRotate + ROTATION_DEGREE; + // _Scanner.WaitForEncoderRotateX(weldingAngle); // -5도부터 용접시작하고 싶으면 10도 넣으면 됨 - // _FlyOffsetX, _FlyOffsetY 값 설정 불필요, 0-0 이면 됨. - } + // // _FlyOffsetX, _FlyOffsetY 값 설정 불필요, 0-0 이면 됨. + // } - // 엔코더 기록(용접 시작) - _Scanner.StoreEncoder(0); - _Scanner.SaveAndRestartTimer(); // 이전 용접의 T/T을 가져가고 싶으면 여기서 Reset 하기 전에 GetTime으로 읽어가야 함 - } + // // 엔코더 기록(용접 시작) + // _Scanner.StoreEncoder(0); + // _Scanner.SaveAndRestartTimer(); // 이전 용접의 T/T을 가져가고 싶으면 여기서 Reset 하기 전에 GetTime으로 읽어가야 함 + //} #endregion + Log.I($"[MarkingOnTheFlyOn] Comp"); return SequenceAction.Ok(); } @@ -284,6 +288,8 @@ namespace WeldingCommon.Sequences _Scanner.SetTrigger(_Scanner.Config.RecordPeriod, _Scanner.Config.RecordSignalType1, _Scanner.Config.RecordSignalType2, _Scanner.Config.RecordSignalType3, _Scanner.Config.RecordSignalType4); + + Log.I($"[RecordSignalOn] Scanner SetTrigger 1 {_Scanner.Config.RecordSignalType1.ToString()} ,2 {_Scanner.Config.RecordSignalType2.ToString()}, 3 {_Scanner.Config.RecordSignalType3.ToString()} ,4 {_Scanner.Config.RecordSignalType4.ToString()}"); } return SequenceAction.Ok(); @@ -293,24 +299,28 @@ namespace WeldingCommon.Sequences { //객체에 대한 파라미터 Load 전 lastX,Y를 현재 스캐너 위치로 받아옴 _Scanner.GetXYPos(out _LastX, out _LastY); + Log.I($"[LoadDrawObjectScannerParam] 현재 스캐너 위치 Last X ({_LastX}) Last Y ({_LastY})"); _ExternalCommandOffset.X = (float)_InitParam.CellMeasureCenterOffsetX; _ExternalCommandOffset.Y = (float)_InitParam.CellMeasureCenterOffsetY; - + Log.I($"[LoadDrawObjectScannerParam] _ExternalCommandOffset X ({_ExternalCommandOffset.X}) Y ({_ExternalCommandOffset.Y})"); // 첫번째 Object의 파라미터만 넣어주자? var scanParam = getScannerParameter(_InitParam.SelectedDrawObjectList.First()); if (scanParam != null) { result.SettingPower = scanParam.LaserPower1 + scanParam.LaserPower2; result.SettingVelocity = scanParam.MarkSpeed; } + //ScannerParam param = ScannerCanvasUserCtrl.ScannerParams[obj.ScannerParamNo]; int drawObjectCount = FuncLoadDrawObjectScannerParam(_InitParam.SelectedDrawObjectList); - + Log.I($"[LoadDrawObjectScannerParam] SeqUploadWeldingList_OutParam : SettingPower ({result.SettingPower}) SettingVelocity ({result.SettingVelocity}) " + + $"drawObjectCount : ({drawObjectCount})"); //var weldingData = Status.GetProcessingWeldingData(); //weldingData.UploadDatas[eUploadData.LaserWeldingRecipeNo].Value = context.Recipes.ActivatedRecipe().Id; //weldingData.UploadDatas[eUploadData.PreWeldingPointCount].Value = drawObjectCount; - //if (_PageNo == 1) { + //if (_PageNo == 1) + //{ // weldingData.UploadDatas[eUploadData.CommonLaserDrawSpeed].Value = _ScannerParam.MarkSpeed; // weldingData.UploadDatas[eUploadData.CommonLaserJumpSpeed].Value = _ScannerParam.JumpSpeed; // weldingData.UploadDatas[eUploadData.CommonLaserMainPowerCore].Value = _ScannerParam.LaserPower1; @@ -319,8 +329,10 @@ namespace WeldingCommon.Sequences // weldingData.UploadDatas[eUploadData.CommonLaserRampingLength_Starting].Value = _ScannerParam.RampingStartDist; // weldingData.UploadDatas[eUploadData.CommonLaserRampingPower_OverPath].Value = _ScannerParam.RampingEndPower; // weldingData.UploadDatas[eUploadData.CommonLaserRampingLength_OverPath].Value = _ScannerParam.RampingEndDist; - //} else { - // weldingData.UploadDatas[eUploadData.CathodeLaserDrawSpeed].Value = _ScannerParam.MarkSpeed; + //} + //else + //{ + // weldingData.UploadDatas[eUploadData.CathodeLaserDrawSpeed].Value = _ScannerParam.MarkSpeed; // weldingData.UploadDatas[eUploadData.CathodeLaserJumpSpeed].Value = _ScannerParam.JumpSpeed; // weldingData.UploadDatas[eUploadData.CathodeLaserMainPowerCore].Value = _ScannerParam.LaserPower1; // weldingData.UploadDatas[eUploadData.CathodeLaserMainPowerRing].Value = _ScannerParam.LaserPower2; @@ -355,7 +367,7 @@ namespace WeldingCommon.Sequences return count; } - + // private int FuncLoadDrawObjectScannerParamSelected(IDrawObject obj) { if (!obj.Enabled) @@ -376,14 +388,14 @@ namespace WeldingCommon.Sequences } if (obj is Line) { - if (isFirst && (_InitParam.PageNum==2)) { // 이전 Point 정보가 있고 첫번째 Line인 경우 긴 Line 만들어 Upload + if (isFirst && (_InitParam.PageNum == 3)) { // 이전 Point 정보가 있고 첫번째 Line인 경우 긴 Line 만들어 Upload Line LongLine = new Line(); LongLine.PF1 = new PointF((float)_InitParam.LastX, (float)_InitParam.LastY - (float)(_Scanner.Config.XDiff_Page3and4 - _Scanner.Config.XDiff_Page1and2)); LongLine.PF2 = obj.PF1; LoadLineScannerParam(LongLine); isFirst = false; } - if (isFirst && (_InitParam.PageNum == 4)) { // 이전 Point 정보가 있고 첫번째 Line인 경우 긴 Line 만들어 Upload + if (isFirst && (_InitParam.PageNum == 1)) { // 이전 Point 정보가 있고 첫번째 Line인 경우 긴 Line 만들어 Upload Line LongLine = new Line(); LongLine.PF1 = new PointF((float)_InitParam.LastX, (float)_InitParam.LastY + (float)(_Scanner.Config.XDiff_Page3and4 - _Scanner.Config.XDiff_Page1and2)); LongLine.PF2 = obj.PF1; @@ -723,7 +735,8 @@ namespace WeldingCommon.Sequences } // END- 시작위치 점프 관련 설정 - } else { + } + else { // Wobble, PowerProfile, Ramping을 사용하지 않는 일반적인 경우 이쪽으로 들어옴 // START- Jump(Line Shot) @@ -770,9 +783,10 @@ namespace WeldingCommon.Sequences _Scanner.MarkAbs(obj.PF2.X + xOffset, obj.PF2.Y + yOffset); - Log.I(string.Format($"[RCC Subpath Line Weld] Mark(Ramping) ({obj.PF2.X},{obj.PF2.Y})")); + Log.I(string.Format($"[RCC Subpath Line Weld] Mark(Ramping) ({obj.PF2.X + xOffset},{obj.PF2.Y + yOffset})")); - } else if ((param.RampingStartDist > 0 || param.RampingEndDist > 0) && (param.RampingEndDist + param.RampingStartDist <= obj.Distance)) { + } + else if ((param.RampingStartDist > 0 || param.RampingEndDist > 0) && (param.RampingEndDist + param.RampingStartDist <= obj.Distance)) { // RCC 가 아닌 경우 _Scanner.SetVectorControl((uint)eAutoControlParameter.AnalogOut1, 0); _Scanner.SetScannerDelay(param.JumpDelay, param.MarkDelay, 0); @@ -819,7 +833,8 @@ namespace WeldingCommon.Sequences Log.I(string.Format($"[Line Weld] Mark(Ramping) ({obj.PF2.X},{obj.PF2.Y})")); - } else { + } + else { // Ramping 이 없는 경우 _Scanner.SetVectorControl((uint)eAutoControlParameter.AnalogOut1, 0); @@ -836,7 +851,7 @@ namespace WeldingCommon.Sequences //_scanner._scannerObj.SetVectorControl((uint)eAutoControlParameter.NoUse, 0); - Log.I(string.Format($"[Line Weld] Mark(Ramping) ({obj.PF2.X},{obj.PF2.Y})")); + Log.I(string.Format($"[Line Weld] Mark(Ramping) ({obj.PF2.X+ xOffset},{obj.PF2.Y+ yOffset})")); } // END- Mark @@ -1525,29 +1540,29 @@ namespace WeldingCommon.Sequences private SequenceActionResult MarkingOnTheFlyOff(SequenceContext context, string id, SequenceActionResult param) { #region 260416 주석 처리한 내용 복원함 . - 레시피 가공 자체가 안 됨 - if (_Scanner.Config.UseMarkingOnTheFly) - { - if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) - { - // Linear OTW의 경우, 각 Draw Tool에서 좌표 오프셋을 해 주고 있음 + //if (_Scanner.Config.UseMarkingOnTheFly) + //{ + // if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) + // { + // // Linear OTW의 경우, 각 Draw Tool에서 좌표 오프셋을 해 주고 있음 - } - else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) - { - // 여기서 원래 레시피로 돌려주기 - foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) - { - obj.Rotate(ROTATION_DEGREE * -1, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // -15도 회전 - } - } + // } + // else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) + // { + // // 여기서 원래 레시피로 돌려주기 + // foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) + // { + // obj.Rotate(ROTATION_DEGREE * -1, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // -15도 회전 + // } + // } - // 추후, Parking Position 을 용접 시작 위치로 자동으로 계산되어 들어가게 개선 필요 - _Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY); + // // 추후, Parking Position 을 용접 시작 위치로 자동으로 계산되어 들어가게 개선 필요 + // _Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY); - // 엔코더 기록(용접 완료) - _Scanner.StoreEncoder(1); - _Scanner.SaveAndRestartTimer(); - } + // // 엔코더 기록(용접 완료) + // _Scanner.StoreEncoder(1); + // _Scanner.SaveAndRestartTimer(); + //} #endregion return SequenceAction.Ok(); } @@ -1559,6 +1574,8 @@ namespace WeldingCommon.Sequences _Scanner.SetTrigger(0, _Scanner.Config.RecordSignalType1, _Scanner.Config.RecordSignalType2, _Scanner.Config.RecordSignalType3, _Scanner.Config.RecordSignalType4); + + Log.I($"[RecordSignalOff] 기록 종료 "); } return SequenceAction.Ok(); @@ -1566,8 +1583,10 @@ namespace WeldingCommon.Sequences private SequenceActionResult SaveResultData(SequenceContext context, string id, SequenceActionResult param) { + // 결과 Data 를 업데이트 함. context.PutValue(ContextKey.KEY_SEQUENCE_RESULT, true); + Log.I($"[SaveResultData] KEY_SEQUENCE_RESULT : true "); return SequenceAction.Ok(); } @@ -1575,14 +1594,14 @@ namespace WeldingCommon.Sequences { // 완료 비트 write 하는 Node 추가 필요. format 유지, SeqScoutNormal 없음 - Log.D("UploadWeldingList Sequence WriteCompletionPLCBit"); + Log.D("[WriteCompletionPLCBit] UploadWeldingList Sequence WriteCompletionPLCBit"); return SequenceAction.Ok(); } private SequenceActionResult Complete(SequenceContext context, string id, SequenceActionResult param) { RestoreDeviceStatus(); - Log.I("UploadWeldingList Complete"); + Log.I("[Complete] UploadWeldingList Complete"); _UploadSpanTime = DateTime.Now.Subtract(_UploadstartTime); Log.D(string.Format($"[SeqUploadWeldingList] UploadWeldingList Complete Time : {_UploadSpanTime.TotalMilliseconds}")); diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerMotionViewModel.cs b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerMotionViewModel.cs index 53891a4..4e0c738 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerMotionViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerMotionViewModel.cs @@ -299,6 +299,11 @@ namespace WeldingCommon.Views private void MoveJogHome() { + _Scanner.GetBusyStatus(); + double xPos, yPos; + _Scanner.GetXYPos(out xPos, out yPos); + Log.W($"xPos[{xPos}] / yPos[{yPos}]"); + double finalVelocity = _ScannerConfig.JumpSpeed * _VelocityRate; _Scanner.SetJumpSpeedCtrl(finalVelocity); _Scanner.JumpAbs(0, 0);