diff --git a/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs b/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs index 29ff644..7901615 100644 --- a/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs +++ b/Machines/ILSOS_PrismaticScanner/Views/Main/UCMainAutoRunViewModel.cs @@ -289,6 +289,11 @@ namespace ILSOS_PrismaticScanner.Views _SeqAutoRun.Stop(); + #region 260417 확인 - 확인완료 + // 26.04.17 NDY - Stop 시 장비 상태 복귀 + Status.SetStatus(eEqpStatus.Manual); + #endregion + //Recipe를 기존에 선택된 Recipe로 Rollback 해 줌 RecipeHelper.RollbackRecipe(); //AutoRun 정지 시 CorrectionFile을 Vision으로 변경 diff --git a/WeldingComponents/WeldingCommon/Devices/ACS/ScannerACS.cs b/WeldingComponents/WeldingCommon/Devices/ACS/ScannerACS.cs index 4973de1..2b579f3 100644 --- a/WeldingComponents/WeldingCommon/Devices/ACS/ScannerACS.cs +++ b/WeldingComponents/WeldingCommon/Devices/ACS/ScannerACS.cs @@ -241,6 +241,12 @@ namespace WeldingCommon.Devices.ACS bool IScannerACS.CheckMOTFComp() { + + #region 260418 확인 - 확인 완료 + // 26.04.17 NDY - 시퀀스 완료 후 장비 상태 복귀 + Status.SetStatus(eEqpStatus.Manual); + #endregion + if (IsSimul) return true; return ReadVariableInt(iMOTFComplete) > 0; } diff --git a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs index 569920f..af59452 100644 --- a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs +++ b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs @@ -234,6 +234,45 @@ namespace WeldingCommon.Sequences // MOTF 지원 중 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); + + // 2. 엔코더 특정 위치갈 때까지 대기 + _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX); + + _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); + + // 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도 넣으면 됨 + + // _FlyOffsetX, _FlyOffsetY 값 설정 불필요, 0-0 이면 됨. + } + + // 엔코더 기록(용접 시작) + _Scanner.StoreEncoder(0); + _Scanner.SaveAndRestartTimer(); // 이전 용접의 T/T을 가져가고 싶으면 여기서 Reset 하기 전에 GetTime으로 읽어가야 함 + } + #endregion return SequenceAction.Ok(); } @@ -1485,25 +1524,31 @@ namespace WeldingCommon.Sequences private SequenceActionResult MarkingOnTheFlyOff(SequenceContext context, string id, SequenceActionResult param) { - //if (_Scanner.Config.UseMarkingOnTheFly) { - // if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) { - // // Linear OTW의 경우, 각 Draw Tool에서 좌표 오프셋을 해 주고 있음 + #region 260416 주석 처리한 내용 복원함 . - 레시피 가공 자체가 안 됨 + 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); - - // // 엔코더 기록(용접 완료) - // _Scanner.StoreEncoder(1); - // _Scanner.SaveAndRestartTimer(); - //} + // 추후, Parking Position 을 용접 시작 위치로 자동으로 계산되어 들어가게 개선 필요 + _Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY); + // 엔코더 기록(용접 완료) + _Scanner.StoreEncoder(1); + _Scanner.SaveAndRestartTimer(); + } + #endregion return SequenceAction.Ok(); } diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCManualScannerOperation.xaml b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCManualScannerOperation.xaml index d42c191..f17b9c9 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCManualScannerOperation.xaml +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCManualScannerOperation.xaml @@ -57,7 +57,11 @@ - + + + + + diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml index d9ef552..d513e48 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControl.xaml @@ -28,13 +28,13 @@ - + - + @@ -44,7 +44,7 @@ - + @@ -63,14 +63,14 @@ - + - + - + @@ -132,7 +132,7 @@ - + @@ -151,14 +151,14 @@ - + - + + - + - + @@ -240,7 +240,7 @@ - + @@ -267,7 +267,7 @@ - + diff --git a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs index e6a9d09..26bf3d1 100644 --- a/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs @@ -156,17 +156,24 @@ namespace WeldingCommon.Views private void VisibleChanged(object obj) { bool visible = (bool)obj; - if (visible) { + if (visible) + { //Init_XYLimitPos(); + + // 26.04.16 NDY - 탭 활성화 시마다 ScannerConfig에서 최신값 반영 + IsUseMarkingOnTheFly = _ScannerConfig?.UseMarkingOnTheFly ?? false; _MonitorTimer.Start(); - } else { + } + else + { _MonitorTimer.Stop(); } } private void OnMonitoring(object sender, EventArgs e) { - if (_Scanner.IsActivated == false) { + if (_Scanner.IsActivated == false) + { Log.D(string.Format("[OnMonitoring] Check Scanner device Connect. ScannerLaserControl view OnMonitoring Stop")); MessageUtil.ShowWarningToast(string.Format("Check Scanner device Connect.")); @@ -174,9 +181,12 @@ namespace WeldingCommon.Views } double encoderX, encoderY; - if (_ScannerConfig.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) { + if (_ScannerConfig.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) + { _Scanner.GetEncoder(out encoderX, out encoderY, false); - } else { + } + else + { _Scanner.GetEncoder(out encoderX, out encoderY, true); } @@ -200,16 +210,22 @@ namespace WeldingCommon.Views markingInfo = _Scanner.GetMarkingInfo(); // x 범위 초과 - if ((markingInfo & 0x0001) == 0x0001 || (markingInfo & 0x0002) == 0x0002) { + if ((markingInfo & 0x0001) == 0x0001 || (markingInfo & 0x0002) == 0x0002) + { IsFieldOutX = true; - } else { + } + else + { IsFieldOutX = false; } // y 범위 초과 - if ((markingInfo & 0x0004) == 0x0004 || (markingInfo & 0x0008) == 0x0008) { + if ((markingInfo & 0x0004) == 0x0004 || (markingInfo & 0x0008) == 0x0008) + { IsFieldOutY = true; - } else { + } + else + { IsFieldOutY = false; } @@ -219,19 +235,26 @@ namespace WeldingCommon.Views uint IsList1Busy = readStatus & 16; uint IsList2Busy = readStatus & 32; - if (IsList1Busy == 16) { + if (IsList1Busy == 16) + { busyStatus = "List1"; - if (_BeforeBusyList != 1) { + if (_BeforeBusyList != 1) + { _ListIterationCount++; } _BeforeBusyList = 1; - } else if (IsList2Busy == 32) { + } + else if (IsList2Busy == 32) + { busyStatus = "List2"; - if (_BeforeBusyList != 2) { + if (_BeforeBusyList != 2) + { _ListIterationCount++; } _BeforeBusyList = 2; - } else { + } + else + { busyStatus = "N/A"; } @@ -241,8 +264,10 @@ namespace WeldingCommon.Views private void PerformCmdLaserShotOnPercent(object obj) { - if (IsUseLaserAutoOffChecked) { - if (_Scanner.GetBusyStatus()) { + if (IsUseLaserAutoOffChecked) + { + if (_Scanner.GetBusyStatus()) + { MessageUtil.ShowWarningToast(string.Format("Laser, Scanner is busy.")); return; } @@ -251,12 +276,14 @@ namespace WeldingCommon.Views // return; //} - if (_SeqTeachingRun.RunState == SequenceRunState.Running) { + if (_SeqTeachingRun.RunState == SequenceRunState.Running) + { MessageUtil.ShowWarningToast(string.Format("이미 시퀀스가 Start 상태입니다.", "Laser On"), Log); return; } var currentModelInfo = EquipmentSpecificModelUtil.GetCurrentRecipeEquipmentSpecificModel(); - if (currentModelInfo.equipmentSpecificModel == null) { + if (currentModelInfo.equipmentSpecificModel == null) + { MessageUtil.ShowWarningToast(string.Format("선택된 model 이 없습니다.", "Laser On")); return; } @@ -264,70 +291,8 @@ namespace WeldingCommon.Views var intervalTimeBlowOn = 0; var intervalTimeBlowOff = 0; - if (currentModelInfo.equipmentSpecificModel.UseBlow) { - intervalTimeBlowOn = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOn; - intervalTimeBlowOff = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOff; - } - - // Object를 만들어 - var param = new SeqTeachingRun_InitParam() { - IsUseExternalObjects = true, - ExternalObjects = CreateDotForLaserOn(), - - //UseStream = _EquipmentInfo.UseStream, - UseStream = currentModelInfo.equipmentSpecificModel.UseStream, - - UseBlow = currentModelInfo.equipmentSpecificModel.UseBlow, - IntervalTimeBlowOn = intervalTimeBlowOn, - IntervalTimeBlowOff = intervalTimeBlowOff, - - NeedSetLaserTiming = true, - }; - - _SeqTeachingRun.Start(param, OnCompleteMarkGrid); - } else { - LaserPowerCalParam powerCalParam = Status.AuroraEnv.SettingEntry[CommonSettingIds.LaserPowerCalParam] as LaserPowerCalParam; - float powerVolt1 = 0, powerVolt2 = 0; - - powerCalParam.Initialize(powerCalParam.PowerCalibrationCenterBeamCSVFile, powerCalParam.PowerCalibrationRingBeamCSVFile); - powerVolt1 = (float)powerCalParam.CalibratePercentToMeasuredVoltage(LaserPower1Percent, (uint)LaserPowerCalParam.beamMode.Center) * 10; - powerVolt2 = (float)powerCalParam.CalibratePercentToMeasuredVoltage(LaserPower2Percent, (uint)LaserPowerCalParam.beamMode.Ring) * 10; - Thread.Sleep(50); - _Scanner.WriteDA((uint)eAnalogPortOut.DA1, powerVolt1, eFunctionType.COMMAND); - _Scanner.WriteDA((uint)eAnalogPortOut.DA2, powerVolt2, eFunctionType.COMMAND); - _Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth); - //_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth); - //_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth); - _Scanner.LaserSignalOn(); - } - } - private void PerformCmdLaserShotOnWatt(object obj) - { - - if (IsUseLaserAutoOffChecked) { - if (_Scanner.GetBusyStatus()) { - MessageUtil.ShowWarningToast(string.Format("Laser, Scanner is busy.")); - return; - } - //if (!_Laser.GetLaserReady()) { - // MessageUtil.ShowWarningToast(string.Format("Laser, Check Laser Ready status.")); - // return; - //} - - if (_SeqTeachingRun.RunState == SequenceRunState.Running) { - MessageUtil.ShowWarningToast(string.Format("이미 시퀀스가 Start 상태입니다.", "Laser On"), Log); - return; - } - var currentModelInfo = EquipmentSpecificModelUtil.GetCurrentRecipeEquipmentSpecificModel(); - if (currentModelInfo.equipmentSpecificModel == null) { - MessageUtil.ShowWarningToast(string.Format("선택된 model 이 없습니다.", "Laser On")); - return; - } - - var intervalTimeBlowOn = 0; - var intervalTimeBlowOff = 0; - - if (currentModelInfo.equipmentSpecificModel.UseBlow) { + if (currentModelInfo.equipmentSpecificModel.UseBlow) + { intervalTimeBlowOn = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOn; intervalTimeBlowOff = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOff; } @@ -349,7 +314,80 @@ namespace WeldingCommon.Views }; _SeqTeachingRun.Start(param, OnCompleteMarkGrid); - } else { + } + else + { + LaserPowerCalParam powerCalParam = Status.AuroraEnv.SettingEntry[CommonSettingIds.LaserPowerCalParam] as LaserPowerCalParam; + float powerVolt1 = 0, powerVolt2 = 0; + + powerCalParam.Initialize(powerCalParam.PowerCalibrationCenterBeamCSVFile, powerCalParam.PowerCalibrationRingBeamCSVFile); + powerVolt1 = (float)powerCalParam.CalibratePercentToMeasuredVoltage(LaserPower1Percent, (uint)LaserPowerCalParam.beamMode.Center) * 10; + powerVolt2 = (float)powerCalParam.CalibratePercentToMeasuredVoltage(LaserPower2Percent, (uint)LaserPowerCalParam.beamMode.Ring) * 10; + Thread.Sleep(50); + _Scanner.WriteDA((uint)eAnalogPortOut.DA1, powerVolt1, eFunctionType.COMMAND); + _Scanner.WriteDA((uint)eAnalogPortOut.DA2, powerVolt2, eFunctionType.COMMAND); + _Scanner.SetLaserPulseCtrl(LaserPeriod * 1000, LaserPulseWidth); + //_Scanner.SetLaserTiming(LaserPeriod * 1000, LaserPulseWidth, LaserPulseWidth); + //_Scanner.SetStandby(LaserPeriod * 1000, LaserPulseWidth); + _Scanner.LaserSignalOn(); + } + } + private void PerformCmdLaserShotOnWatt(object obj) + { + + if (IsUseLaserAutoOffChecked) + { + if (_Scanner.GetBusyStatus()) + { + MessageUtil.ShowWarningToast(string.Format("Laser, Scanner is busy.")); + return; + } + //if (!_Laser.GetLaserReady()) { + // MessageUtil.ShowWarningToast(string.Format("Laser, Check Laser Ready status.")); + // return; + //} + + if (_SeqTeachingRun.RunState == SequenceRunState.Running) + { + MessageUtil.ShowWarningToast(string.Format("이미 시퀀스가 Start 상태입니다.", "Laser On"), Log); + return; + } + var currentModelInfo = EquipmentSpecificModelUtil.GetCurrentRecipeEquipmentSpecificModel(); + if (currentModelInfo.equipmentSpecificModel == null) + { + MessageUtil.ShowWarningToast(string.Format("선택된 model 이 없습니다.", "Laser On")); + return; + } + + var intervalTimeBlowOn = 0; + var intervalTimeBlowOff = 0; + + if (currentModelInfo.equipmentSpecificModel.UseBlow) + { + intervalTimeBlowOn = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOn; + intervalTimeBlowOff = currentModelInfo.equipmentSpecificModel.IntervalTimeBlowOff; + } + + // Object를 만들어 + var param = new SeqTeachingRun_InitParam() + { + IsUseExternalObjects = true, + ExternalObjects = CreateDotForLaserOn(), + + //UseStream = _EquipmentInfo.UseStream, + UseStream = currentModelInfo.equipmentSpecificModel.UseStream, + + UseBlow = currentModelInfo.equipmentSpecificModel.UseBlow, + IntervalTimeBlowOn = intervalTimeBlowOn, + IntervalTimeBlowOff = intervalTimeBlowOff, + + NeedSetLaserTiming = true, + }; + + _SeqTeachingRun.Start(param, OnCompleteMarkGrid); + } + else + { LaserPowerCalParam powerCalParam = Status.AuroraEnv.SettingEntry[CommonSettingIds.LaserPowerCalParam] as LaserPowerCalParam; float powerVolt1 = 0, powerVolt2 = 0; @@ -367,8 +405,10 @@ namespace WeldingCommon.Views } private void OnCompleteMarkGrid(SequenceActionResult res) { - if (res != null) { - if (res.Param is SeqTeachingRun_OutParam result && result.Success == true) { + if (res != null) + { + if (res.Param is SeqTeachingRun_OutParam result && result.Success == true) + { MessageUtil.ShowSuccessToast(string.Format("Success SeqMarkGrid")); return; } @@ -379,9 +419,12 @@ namespace WeldingCommon.Views private void PerformCmdLaserShotOff(object obj) { - if (IsUseLaserAutoOffChecked) { + if (IsUseLaserAutoOffChecked) + { _Scanner.StopExecution(); - } else { + } + else + { _Scanner.LaserSignalOff(); } @@ -390,7 +433,8 @@ namespace WeldingCommon.Views private void PerformCmdResetEncoderValue(object obj) { - try { + try + { _Scanner.InitFly2D(); // CBW OTW 테스트를 위해 아래는 일단 주석처리 @@ -398,7 +442,9 @@ namespace WeldingCommon.Views // list 반복 숫자 초기화 _ListIterationCount = 0; - } catch (Exception ex) { + } + catch (Exception ex) + { MessageUtil.ShowErrorToast(string.Format($"{ex.Message}")); } } @@ -433,10 +479,13 @@ namespace WeldingCommon.Views private void PerformCmdSimulateEncoder(object obj) { - if (_ToggleSimulateEncoder) { + if (_ToggleSimulateEncoder) + { _Scanner.SimulateEncoder(0); _ToggleSimulateEncoder = false; - } else { + } + else + { _ToggleSimulateEncoder = true; _Scanner.SimulateEncoder(1); } @@ -444,10 +493,13 @@ namespace WeldingCommon.Views private void PerformCmdSimulateEncoderXY(object obj) { - if (_ToggleSimulateEncoder) { + if (_ToggleSimulateEncoder) + { _Scanner.SimulateEncoder(0); _ToggleSimulateEncoder = false; - } else { + } + else + { _ToggleSimulateEncoder = true; _Scanner.SimulateEncoder(3); }