feat:260415 MOTF시퀸스(AutoRunScanner)관련 업데이트

This commit is contained in:
RnD_Welder 2026-04-15 16:34:49 +09:00
parent 1439479989
commit e98384906b
4 changed files with 151 additions and 56 deletions

View File

@ -69,6 +69,11 @@ namespace AuroraLaserScanner
public double MarkingOntheFlyOffsetY { get; set; } public double MarkingOntheFlyOffsetY { get; set; }
public double MarkingOntheFlyParkingPositionX { get; set; } public double MarkingOntheFlyParkingPositionX { get; set; }
public double MarkingOntheFlyParkingPositionY { get; set; } public double MarkingOntheFlyParkingPositionY { get; set; }
public double MarkingStartX_1 { get; set; }
public double MarkingStartX_2 { get; set; }
public double XDiff_Page1and2 { get; set; }
public double XDiff_Page3and4 { get; set; }
public eWaitEncoderMode MarkingStartWaitMode { get; set; } public eWaitEncoderMode MarkingStartWaitMode { get; set; }
public eOntheFlyCoordinate OnTheFlyCoordinate { get; set; } public eOntheFlyCoordinate OnTheFlyCoordinate { get; set; }
public double FlySpeedInterlock { get; set; } public double FlySpeedInterlock { get; set; }

View File

@ -48,6 +48,7 @@ using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Forms.VisualStyles; using System.Windows.Forms.VisualStyles;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Xml.Linq;
using VisionCommon; using VisionCommon;
using WeldingCommon; using WeldingCommon;
using WeldingCommon.Alarm; using WeldingCommon.Alarm;
@ -80,9 +81,11 @@ namespace ILSOS_PrismaticScanner.Sequences
const string SEQ_ENTER = "SEQ_ENTER"; // inputParam 으로 받자. const string SEQ_ENTER = "SEQ_ENTER"; // inputParam 으로 받자.
const string SEQ_CHECK_INIT_CONDITION = "Check Init Condition"; // Check Init Condition const string SEQ_CHECK_INIT_CONDITION = "Check Init Condition"; // Check Init Condition
const string SEQ_SET_BEFORE_UPLOAD = "Set Before Upload";
const string SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ = "Set Sequence Param (UploadWeldingList Seq)"; const string SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ = "Set Sequence Param (UploadWeldingList Seq)";
const string SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ = "Process (UploadWeldingList Seq)"; const string SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ = "Process (UploadWeldingList Seq)";
const string SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ = "Get Sequence Result (UploadWeldingList Seq)"; const string SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ = "Get Sequence Result (UploadWeldingList Seq)";
const string SEQ_CHECK_AFTER_UPLOAD = "Check After Upload";
const string SEQ_COMPLETE = "SEQ_COMPLETE"; // 완료 const string SEQ_COMPLETE = "SEQ_COMPLETE"; // 완료
@ -133,6 +136,10 @@ namespace ILSOS_PrismaticScanner.Sequences
private static TimeSpan _ScannerSaveLogTime; private static TimeSpan _ScannerSaveLogTime;
private static DateTime _partialWeldingStartTime; private static DateTime _partialWeldingStartTime;
private int _PageNum;
private double lastX, lastY; // 저장용 값
private double _LastX, _LastY; // 진짜로 UploadWeldingList에 들어갈 값
public SequenceBuilder Builder() public SequenceBuilder Builder()
{ {
var sb = new SequenceBuilder(1000, true); var sb = new SequenceBuilder(1000, true);
@ -145,9 +152,11 @@ namespace ILSOS_PrismaticScanner.Sequences
sb.AddAction(SEQ_STANDBY_SCANNER, SetStandbyScanner); sb.AddAction(SEQ_STANDBY_SCANNER, SetStandbyScanner);
#endregion #endregion
sb.AddAction(SEQ_SET_BEFORE_UPLOAD, SetBeforeUpload);
sb.AddAction(SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ, SetUploadWeldingList_SeqParams); sb.AddAction(SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ, SetUploadWeldingList_SeqParams);
sb.AddSubsequence(SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ, CommonSequenceManager.GetSeqBuilder_SeqUploadWeldingList()); sb.AddSubsequence(SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ, CommonSequenceManager.GetSeqBuilder_SeqUploadWeldingList());
sb.AddAction(SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ, GetUploadWeldingList_SeqResult); sb.AddAction(SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ, GetUploadWeldingList_SeqResult);
sb.AddDecision(SEQ_CHECK_AFTER_UPLOAD, CheckAfterUpload);
sb.AddAction(SEQ_DO_COMPONENT_WELDING, DoComponentWelding); sb.AddAction(SEQ_DO_COMPONENT_WELDING, DoComponentWelding);
sb.AddAction(SEQ_ACS_MOTION_SET, SetMotion); sb.AddAction(SEQ_ACS_MOTION_SET, SetMotion);
sb.AddAction(SEQ_ACS_MOTION_START, StartMotion); sb.AddAction(SEQ_ACS_MOTION_START, StartMotion);
@ -160,9 +169,11 @@ namespace ILSOS_PrismaticScanner.Sequences
> sb[SEQ_CHECK_INIT_CONDITION] > sb[SEQ_CHECK_INIT_CONDITION]
> sb[SEQ_STANDBY_MOTION] > sb[SEQ_STANDBY_MOTION]
> sb[SEQ_STANDBY_SCANNER] > sb[SEQ_STANDBY_SCANNER]
> sb[SEQ_SET_BEFORE_UPLOAD]
> sb[SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ]
> sb[SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_DO_ID_UPLOAD_WELDING_LIST_SEQ]
> sb[SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ] > sb[SEQ_GET_RESULT_UPLOAD_WELDING_LIST_SEQ]
> sb[SEQ_CHECK_AFTER_UPLOAD]
> sb[SEQ_DO_COMPONENT_WELDING] > sb[SEQ_DO_COMPONENT_WELDING]
> sb[SEQ_ACS_MOTION_SET] > sb[SEQ_ACS_MOTION_SET]
> sb[SEQ_ACS_MOTION_START] > sb[SEQ_ACS_MOTION_START]
@ -170,6 +181,9 @@ namespace ILSOS_PrismaticScanner.Sequences
> sb[SEQ_COMPLETE] > sb[SEQ_COMPLETE]
> sb.Final); > sb.Final);
sb.Flows(sb[SEQ_CHECK_AFTER_UPLOAD]
> sb[SEQ_SET_BEFORE_UPLOAD]);
sb.OnStopped(OnStopped); sb.OnStopped(OnStopped);
sb.OnForceError(OnForceError); sb.OnForceError(OnForceError);
@ -238,7 +252,7 @@ namespace ILSOS_PrismaticScanner.Sequences
} }
_ScannerSaveLogTime = TimeSpan.Zero; _ScannerSaveLogTime = TimeSpan.Zero;
_PageNum = 2;
var startTime = DateTime.Now; var startTime = DateTime.Now;
context.PutValue(ContextKey.KEY_SEQUENCE_START_TIME, startTime); context.PutValue(ContextKey.KEY_SEQUENCE_START_TIME, startTime);
@ -302,15 +316,17 @@ namespace ILSOS_PrismaticScanner.Sequences
Log.I("[EncoderReset] 시작"); Log.I("[EncoderReset] 시작");
// SeqUploadWeldingList.MarkingOnTheFlyOn 패턴 // SeqUploadWeldingList.MarkingOnTheFlyOn 패턴
_Scanner.SetStartList(_WeldingScannerListNo);
_Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX); _Scanner.SetFlyX(_Scanner.Config.MarkingOnTheFlyEncoderResolutionX);
Log.I($"[EncoderReset] SetFlyX: {_Scanner.Config.MarkingOnTheFlyEncoderResolutionX}"); Log.I($"[EncoderReset] SetFlyX: {_Scanner.Config.MarkingOnTheFlyEncoderResolutionX}");
_Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX); // _Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartEncoderPositionX);
Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartEncoderPositionX}"); // Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartEncoderPositionX}");
_Scanner.StoreEncoder(0); _Scanner.StoreEncoder(0);
_Scanner.SaveAndRestartTimer(); _Scanner.SaveAndRestartTimer();
Log.I("[EncoderReset] 완료 - Stage(0) = Scanner(0) 동기화"); Log.I("[EncoderReset] 완료 - Stage(0) = Scanner(0) 동기화");
return SequenceAction.Ok(); return SequenceAction.Ok();
} }
@ -333,7 +349,34 @@ namespace ILSOS_PrismaticScanner.Sequences
} }
#endregion #endregion
private SequenceActionResult SetBeforeUpload(SequenceContext context, string id, SequenceActionResult param)
{
var mainPage = CommonHelper.GetMainPage();
_ScannerCanvasUserCtrl = mainPage.ScannerCanvasCtrlTeaching;
_SelectedObjectList = _ScannerCanvasUserCtrl.Model.Layers[_PageNum-1].Objects;
_LastX = lastX;
_LastY = lastY;
if (_PageNum == 2 || _PageNum == 4) {
if (_PageNum == 0) {
_Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartX_1);
Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartX_1}");
} else {
_Scanner.WaitForEncoderX(_Scanner.Config.MarkingStartX_2);
Log.I($"[EncoderReset] WaitForEncoderX: {_Scanner.Config.MarkingStartX_2}");
}
foreach (IDrawObject obj in _SelectedObjectList) {
if (obj is Line) {
lastX = obj.PF2.X;
lastY = obj.PF2.Y;
}
}
}
Log.D(string.Format($"[SetBeforeUpload] Set Before UploadWeldingList"));
return SequenceAction.Ok();
}
private SequenceActionResult SetUploadWeldingList_SeqParams(SequenceContext context, string id, SequenceActionResult param) private SequenceActionResult SetUploadWeldingList_SeqParams(SequenceContext context, string id, SequenceActionResult param)
{ {
Status.SetWorkingPosition(eWorkingPosition.UPLOADING_WELD_LIST); Status.SetWorkingPosition(eWorkingPosition.UPLOADING_WELD_LIST);
@ -342,11 +385,14 @@ namespace ILSOS_PrismaticScanner.Sequences
SeqUploadWeldingList_InitParam seqParams = new SeqUploadWeldingList_InitParam() SeqUploadWeldingList_InitParam seqParams = new SeqUploadWeldingList_InitParam()
{ {
NeedSetLaserTiming = _InitParam.NeedSetLaserTiming, NeedSetLaserTiming = _InitParam.NeedSetLaserTiming,
IncludeListStartEnd = true, IncludeListStartEnd = false,
CellMeasureCenterOffsetX = _SystemParameter.CellPosMeasureCenterOffsetX + _InitParam.CellCenterOffsetX, CellMeasureCenterOffsetX = _SystemParameter.CellPosMeasureCenterOffsetX + _InitParam.CellCenterOffsetX,
CellMeasureCenterOffsetY = _SystemParameter.CellPosMeasureCenterOffsetY + _InitParam.CellCenterOffsetY, CellMeasureCenterOffsetY = _SystemParameter.CellPosMeasureCenterOffsetY + _InitParam.CellCenterOffsetY,
SelectedDrawObjectList = _SelectedObjectList, SelectedDrawObjectList = _SelectedObjectList,
WeldingScannerListNo = _WeldingScannerListNo, WeldingScannerListNo = _WeldingScannerListNo,
PageNum = _PageNum,
LastX = _LastX,
LastY = _LastY
}; };
Log.D(string.Format($"[ComponentTeachingRun] Set UploadWelindList Seq Param")); Log.D(string.Format($"[ComponentTeachingRun] Set UploadWelindList Seq Param"));
@ -367,6 +413,13 @@ namespace ILSOS_PrismaticScanner.Sequences
return SequenceAction.Ok(); return SequenceAction.Ok();
} }
private string CheckAfterUpload(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param)
{
_PageNum += 1;
if (_PageNum == 5) _PageNum = 1;
if (_PageNum == 2) return SEQ_DO_COMPONENT_WELDING;
else return SEQ_SET_BEFORE_UPLOAD;
}
private SequenceActionResult DoComponentWelding(SequenceContext context, string id, SequenceActionResult param) private SequenceActionResult DoComponentWelding(SequenceContext context, string id, SequenceActionResult param)
{ {
@ -445,6 +498,8 @@ namespace ILSOS_PrismaticScanner.Sequences
_Scanner.WriteDA((uint)eAnalogPortOut.DA1, 0, eFunctionType.COMMAND); _Scanner.WriteDA((uint)eAnalogPortOut.DA1, 0, eFunctionType.COMMAND);
_Scanner.WriteDA((uint)eAnalogPortOut.DA2, 0, eFunctionType.COMMAND); _Scanner.WriteDA((uint)eAnalogPortOut.DA2, 0, eFunctionType.COMMAND);
_Scanner.JumpAbs(0, 0, eFunctionType.COMMAND); _Scanner.JumpAbs(0, 0, eFunctionType.COMMAND);
_Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY);
_Scanner.SetEndList();
var mesurementTime = DateTime.Now; var mesurementTime = DateTime.Now;

View File

@ -116,6 +116,10 @@ namespace CoreUnit.Scanner
double m_markingOntheFlyParkingPositionX; double m_markingOntheFlyParkingPositionX;
double m_markingOntheFlyParkingPositionY; double m_markingOntheFlyParkingPositionY;
double m_markingStartX_1;
double m_markingStartX_2;
double m_XDiff_Page1and2;
double m_XDiff_Page3and4;
double m_flySpeedInterlock; double m_flySpeedInterlock;
double m_rotaryEncoderOffset; double m_rotaryEncoderOffset;
@ -522,6 +526,45 @@ namespace CoreUnit.Scanner
get { return m_markingOntheFlyParkingPositionY; } get { return m_markingOntheFlyParkingPositionY; }
} }
[Browsable(true)]
[ReadOnly(false)]
[Category("Marking On The Fly(MOTF)")]
[DisplayName("Marking Start X 1 (mm)")]
[Description("Marking Start X 1 (mm)")]
public double MarkingStartX_1 {
set { m_markingStartX_1 = value; }
get { return m_markingStartX_1; }
}
[Browsable(true)]
[ReadOnly(false)]
[Category("Marking On The Fly(MOTF)")]
[DisplayName("Marking Start X 2 (mm)")]
[Description("Marking Start X 2 (mm)")]
public double MarkingStartX_2 {
set { m_markingStartX_2 = value; }
get { return m_markingStartX_2; }
}
[Browsable(true)]
[ReadOnly(false)]
[Category("Marking On The Fly(MOTF)")]
[DisplayName("X Diff Page 1 & 2 (mm)")]
[Description("X Diff Page 1 & 2 (mm)")]
public double XDiff_Page1and2 {
set { m_XDiff_Page1and2 = value; }
get { return m_XDiff_Page1and2; }
}
[Browsable(true)]
[ReadOnly(false)]
[Category("Marking On The Fly(MOTF)")]
[DisplayName("X Diff Page 3 & 4 (mm)")]
[Description("X Diff Page 3 & 4 (mm)")]
public double XDiff_Page3and4 {
set { m_XDiff_Page3and4 = value; }
get { return m_XDiff_Page3and4; }
}
[Browsable(true)] [Browsable(true)]
[ReadOnly(false)] [ReadOnly(false)]
[Category("Marking On The Fly(MOTF)")] [Category("Marking On The Fly(MOTF)")]

View File

@ -8,6 +8,7 @@ using DB;
using Hermes; using Hermes;
using Matrox.MatroxImagingLibrary; using Matrox.MatroxImagingLibrary;
using Newtonsoft.Json; using Newtonsoft.Json;
using OpenCvSharp;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration; using System.Configuration;
@ -72,7 +73,7 @@ namespace WeldingCommon.Sequences
private static int _CenterRingRatio; // Center Ring의 파워 비율 private static int _CenterRingRatio; // Center Ring의 파워 비율
private static float _LaserPowerRatio; // Laser에서 출력 파워 비율 private static float _LaserPowerRatio; // Laser에서 출력 파워 비율
private bool isFirst = true;
private static SeqUploadWeldingList_OutParam result; private static SeqUploadWeldingList_OutParam result;
const int ROTATION_DEGREE = 15; // 15도 설정, 하나의 지그가 30도 이므로, 15도부터 돌도록 설정됨. const int ROTATION_DEGREE = 15; // 15도 설정, 하나의 지그가 30도 이므로, 15도부터 돌도록 설정됨.
@ -149,8 +150,13 @@ namespace WeldingCommon.Sequences
_LaserPowerCalParam.Initialize(_LaserPowerCalParam.PowerCalibrationCenterBeamCSVFile, _LaserPowerCalParam.PowerCalibrationRingBeamCSVFile); _LaserPowerCalParam.Initialize(_LaserPowerCalParam.PowerCalibrationCenterBeamCSVFile, _LaserPowerCalParam.PowerCalibrationRingBeamCSVFile);
_FlyOffsetX = 0; _FlyOffsetX = 0;
_FlyOffsetY = 0;
_FlyOffsetY = 0;
if (_InitParam.PageNum == 1 || _InitParam.PageNum == 2)
_FlyOffsetY += _Scanner.Config.XDiff_Page1and2;
else
_FlyOffsetY += _Scanner.Config.XDiff_Page3and4;
return true; return true;
} }
@ -228,38 +234,6 @@ namespace WeldingCommon.Sequences
// MOTF 지원 중 // MOTF 지원 중
private SequenceActionResult MarkingOnTheFlyOn(SequenceContext context, string id, SequenceActionResult param) private SequenceActionResult MarkingOnTheFlyOn(SequenceContext context, string id, SequenceActionResult param)
{ {
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으로 읽어가야 함
}
return SequenceAction.Ok(); return SequenceAction.Ok();
} }
@ -363,6 +337,20 @@ namespace WeldingCommon.Sequences
} }
if (obj is Line) { if (obj is Line) {
if (isFirst && (_InitParam.PageNum==2)) { // 이전 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
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;
}
LoadLineScannerParam((Line)obj); LoadLineScannerParam((Line)obj);
count++; count++;
} else if (obj is Dot) { } else if (obj is Dot) {
@ -1497,24 +1485,24 @@ namespace WeldingCommon.Sequences
private SequenceActionResult MarkingOnTheFlyOff(SequenceContext context, string id, SequenceActionResult param) private SequenceActionResult MarkingOnTheFlyOff(SequenceContext context, string id, SequenceActionResult param)
{ {
if (_Scanner.Config.UseMarkingOnTheFly) { //if (_Scanner.Config.UseMarkingOnTheFly) {
if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) { // if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.XY) {
// Linear OTW의 경우, 각 Draw Tool에서 좌표 오프셋을 해 주고 있음 // // Linear OTW의 경우, 각 Draw Tool에서 좌표 오프셋을 해 주고 있음
} else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) { // } else if (_Scanner.Config.OnTheFlyCoordinate == eOntheFlyCoordinate.Rotate) {
// 여기서 원래 레시피로 돌려주기 // // 여기서 원래 레시피로 돌려주기
foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) { // foreach (IDrawObject obj in _InitParam.SelectedDrawObjectList) {
obj.Rotate(ROTATION_DEGREE * -1, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // -15도 회전 // obj.Rotate(ROTATION_DEGREE * -1, new UnitPoint(_Scanner.Config.MarkingOnTheFlyRotateCenterX, _Scanner.Config.MarkingOnTheFlyRotateCenterY)); // -15도 회전
} // }
} // }
// 추후, Parking Position 을 용접 시작 위치로 자동으로 계산되어 들어가게 개선 필요 // // 추후, Parking Position 을 용접 시작 위치로 자동으로 계산되어 들어가게 개선 필요
_Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY); // _Scanner.Fly_Return(_Scanner.Config.MarkingOntheFlyParkingPositionX, _Scanner.Config.MarkingOntheFlyParkingPositionY);
// 엔코더 기록(용접 완료) // // 엔코더 기록(용접 완료)
_Scanner.StoreEncoder(1); // _Scanner.StoreEncoder(1);
_Scanner.SaveAndRestartTimer(); // _Scanner.SaveAndRestartTimer();
} //}
return SequenceAction.Ok(); return SequenceAction.Ok();
} }
@ -1600,6 +1588,10 @@ namespace WeldingCommon.Sequences
public List<IDrawObject> SelectedDrawObjectList { get; set; } public List<IDrawObject> SelectedDrawObjectList { get; set; }
public eListNo WeldingScannerListNo { get; set; } public eListNo WeldingScannerListNo { get; set; }
public double PageNum { get; set; }
public double LastX { get; set; }
public double LastY { get; set; }
} }
public class SeqUploadWeldingList_OutParam : OutParam public class SeqUploadWeldingList_OutParam : OutParam