initial commit
This commit is contained in:
150
Handler/Project/RunCode/Step/_STEP_HOME_CONFIRM.cs
Normal file
150
Handler/Project/RunCode/Step/_STEP_HOME_CONFIRM.cs
Normal file
@@ -0,0 +1,150 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using AR;
|
||||
namespace Project
|
||||
{
|
||||
public partial class FMain
|
||||
{
|
||||
public void _STEP_HOME_CONFIRM_START(eSMStep step)
|
||||
{
|
||||
PUB.sm.seq.Clear(step);
|
||||
}
|
||||
|
||||
public StepResult _STEP_HOME_CONFIRM(eSMStep step, TimeSpan stepTime, TimeSpan seqTime)
|
||||
{
|
||||
byte idx = 1;
|
||||
var cmdIndex = step;
|
||||
if (PUB.sm.seq.Get(cmdIndex) < idx) PUB.sm.seq.Set(cmdIndex, idx);
|
||||
|
||||
//*********************
|
||||
//** 하드웨어 조건 확인
|
||||
//*********************
|
||||
if (CheckHomeProcess_HW_Available(false) == false)
|
||||
{
|
||||
return StepResult.Error;
|
||||
}
|
||||
|
||||
// 전체 홈 시간을 체크한다.
|
||||
if (stepTime.TotalSeconds >= AR.SETTING.Data.Timeout_HomeSearch)
|
||||
{
|
||||
PUB.Result.SetResultMessage(eResult.TIMEOUT, eECode.HOME_TIMEOUT, eNextStep.NOTHING, AR.SETTING.Data.Timeout_HomeSearch); //, eECode.(eResult.HomeTimeout,msg ,false);
|
||||
return StepResult.Error;
|
||||
}
|
||||
|
||||
|
||||
//모든축의 완료여부 확인
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
//모든축이 완료되었다면 완료처리를 한다.
|
||||
if (
|
||||
PUB.mot.IsHomeSet((short)eAxis.PX_PICK) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.PZ_PICK) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.Z_THETA) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.PL_MOVE) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.PR_MOVE) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.PL_UPDN) &&
|
||||
PUB.mot.IsHomeSet((short)eAxis.PR_UPDN))
|
||||
{
|
||||
//완료처리
|
||||
hmi1.Scean = UIControl.HMI.eScean.Nomal;
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
}
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
|
||||
//X축을 안전위치로 보낸다
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
var Pos = MOT.GetPXPos(ePXLoc.PICKON);
|
||||
Pos.Speed = 200;
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, "HOME_SEARCH", false) == false) return StepResult.Wait;
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
//자재를 들고 있는가(왼쪽)
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
if (DIO.isVacOKL() > 0)
|
||||
{
|
||||
//로더에 다시 놓아야 한다
|
||||
var Pos = MOT.GetPXPos(ePXLoc.PICKON);
|
||||
if (MOT.CheckMotionPos(seqTime, Pos, "#6") == false) return 0;
|
||||
|
||||
//피커의Z축은 가져오는 위치에서 +10mm 에서 처리한다
|
||||
var PosZ = MOT.GetPZPos(ePZLoc.PICKON);
|
||||
PosZ.Position -= 60;
|
||||
|
||||
//theta 는 0으로 원복한다
|
||||
if (MOT.CheckMotionPos(eAxis.Z_THETA, seqTime, 0, 400, 1000, 1000, "QUICK") == false) return 0;
|
||||
if (MOT.CheckMotionPos(seqTime, PosZ, "QUICK") == false) return 0;
|
||||
|
||||
//진공끈다(진공이꺼지면 감지 센서도 같이 꺼진다 - 이 프로젝트에는 감지 센서가 없고 , 출력센서를 그대로 감지로 이용한다)
|
||||
DIO.SetPickerVac(false, true);
|
||||
|
||||
//로더의 얼라인을 해제해준다.
|
||||
hmi1.arVar_Port[1].AlignReset();// = 0; loader1.arVar_Port[1].errorCount = 0;
|
||||
}
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
|
||||
//피커 Z축 정렬 후 Y축을 준비위치로 옮긴다
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
var PosZ = MOT.GetPZPos(ePZLoc.READY);
|
||||
if (MOT.CheckMotionPos(seqTime, PosZ, "#7") == false) return StepResult.Wait;
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
//중앙포트(로더)를 아래로 내림
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
//if (DIO.GetIOInput(eDIName.PORTC_LIM_UP) == true)
|
||||
DIO.SetPortMotor(1, eMotDir.CCW, true, "FINISH", true); //210326
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
//연관플래그 소거
|
||||
if (PUB.sm.seq.Get(step) == idx++)
|
||||
{
|
||||
//진공상태를 초기화 해준다.
|
||||
DIO.SetPrintLVac(ePrintVac.off, true);
|
||||
DIO.SetPrintRVac(ePrintVac.off, true);
|
||||
|
||||
DIO.SetOutput(eDOName.PRINTL_AIRON, false);
|
||||
DIO.SetOutput(eDOName.PRINTR_AIRON, false);
|
||||
|
||||
PUB.Result.Clear("home");
|
||||
FlagClear(false);
|
||||
|
||||
//트리거 OFF작업
|
||||
WS_Send(eWorkPort.Left, PUB.wsL, "", "OFF","");
|
||||
WS_Send(eWorkPort.Right, PUB.wsR, "", "OFF","");
|
||||
|
||||
//컨베어off
|
||||
DIO.SetOutput(eDOName.LEFT_CONV, false);
|
||||
DIO.SetOutput(eDOName.RIGHT_CONV, false);
|
||||
|
||||
if (PUB.keyenceF != null && PUB.keyenceF.IsConnect)
|
||||
PUB.keyenceF.Trigger(false);
|
||||
if (PUB.keyenceR != null && PUB.keyenceR.IsConnect)
|
||||
PUB.keyenceR.Trigger(false);
|
||||
|
||||
|
||||
PUB.sm.seq.Update(cmdIndex);
|
||||
return StepResult.Wait;
|
||||
}
|
||||
|
||||
PUB.sm.SetNewStep(eSMStep.IDLE);
|
||||
return StepResult.Complete;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user