Release Current

This commit is contained in:
RnD_Welder 2026-04-20 15:34:01 +09:00
parent 7dd4648587
commit 027a1e3256
9 changed files with 192 additions and 106 deletions

View File

@ -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)
{

View File

@ -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;

View File

@ -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;
}
}
}

View File

@ -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 )

View File

@ -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;
}
}
}

View File

@ -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();
}
@ -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<bool> 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");

View File

@ -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();

View File

@ -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<LaserPowerCalParam>(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 (_Scanner.Config.UseMarkingOnTheFly) {
if (_InitParam.PageNum == 1 || _InitParam.PageNum == 2)
_FlyOffsetY += _Scanner.Config.XDiff_Page1and2;
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,7 +329,9 @@ 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 {
//}
//else
//{
// weldingData.UploadDatas[eUploadData.CathodeLaserDrawSpeed].Value = _ScannerParam.MarkSpeed;
// weldingData.UploadDatas[eUploadData.CathodeLaserJumpSpeed].Value = _ScannerParam.JumpSpeed;
// weldingData.UploadDatas[eUploadData.CathodeLaserMainPowerCore].Value = _ScannerParam.LaserPower1;
@ -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}"));

View File

@ -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);