203 lines
6.4 KiB
C#
203 lines
6.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using AR;
|
|
namespace Project
|
|
{
|
|
public partial class FMain
|
|
{
|
|
bool[] runStepisFirst = new bool[] { false, false };
|
|
|
|
#region "Is Can Pick On/Off"
|
|
|
|
Boolean isCanPLPickOn()
|
|
{
|
|
//아이템을 가지고 있으면 안된다.
|
|
if (PUB.flag.get(eVarBool.FG_PL_ITEMON)) return false;
|
|
|
|
//Y축이 집는 위치가 아니면 빠져나감
|
|
var Pos = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.READY));// MOT.GetPLM_PosName();
|
|
if (Pos) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isCanPRPickOn()
|
|
{
|
|
//아이템을 가지고 있으면 안된다.
|
|
if (PUB.flag.get(eVarBool.FG_PR_ITEMON)) return false;
|
|
|
|
//Y축이 집는 위치가 아니면 빠져나감
|
|
var Pos = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.READY));// MOT.GetPRM_PosName();
|
|
if (Pos) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isCanPLPickOff()
|
|
{
|
|
//아이템이 없으면 불가
|
|
if (PUB.flag.get(eVarBool.FG_PL_ITEMON) == false) return false;
|
|
|
|
//Y축 위치 확인
|
|
var PosH07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTH07));
|
|
var PosM07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTM07));
|
|
var PosL07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTL07));
|
|
|
|
var PosH13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTH13));
|
|
var PosM13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTM13));
|
|
var PosL13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTL13));
|
|
|
|
if (PosH07 && PosM07 && PosL07 && PosH13 && PosM13 && PosL13) return false;
|
|
|
|
//포트가 준비되지않았거나, 감지가 안되었다면 진행 불가
|
|
if (PUB.flag.get(eVarBool.FG_RDY_PORT_PL) == false || hmi1.arVar_Port[0].AlignOK != 1) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
Boolean isCanPRPickOff()
|
|
{
|
|
//아이템이 없으면 불가
|
|
if (PUB.flag.get(eVarBool.FG_PR_ITEMON) == false) return false;
|
|
|
|
//Y축 위치 확인
|
|
var PosH07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTH07));
|
|
var PosM07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTM07));
|
|
var PosL07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTL07));
|
|
|
|
var PosH13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTH13));
|
|
var PosM13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTM13));
|
|
var PosL13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTL13));
|
|
|
|
if (PosH07 && PosM07 && PosL07 && PosH13 && PosM13 && PosL13) return false;
|
|
|
|
//포트가 준비되지않았거나, 감지가 안되었다면 진행 불가
|
|
if (PUB.flag.get(eVarBool.FG_RDY_PORT_PR) == false || hmi1.arVar_Port[2].AlignOK != 1) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isCanPickOffL()
|
|
{
|
|
//아이템이 없으면 불가
|
|
if (PUB.flag.get(eVarBool.FG_PK_ITEMON) == false) return false;
|
|
|
|
//Y축 위치 확인
|
|
if (MOT.getPositionMatch(MOT.GetPXPos(ePXLoc.PICKOFFL)) == false) return false;
|
|
|
|
//포트가 준비되지않았거나, 감지가 안되었다면 진행 불가
|
|
if (PUB.flag.get(eVarBool.FG_RDY_PORT_PL) == false || hmi1.arVar_Port[0].AlignOK != 1) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isCanPickOn()
|
|
{
|
|
//아이템을 가지고 있으면 안된다.
|
|
if (PUB.flag.get(eVarBool.FG_PK_ITEMON)) return false;
|
|
|
|
//Y축이 집는 위치가 아니면 빠져나감
|
|
if (MOT.getPositionMatch(MOT.GetPXPos(ePXLoc.PICKON)) == false) return false;
|
|
|
|
//포트가 준비되어 있지 않다면 가져갈수 없다
|
|
if (PUB.Result.DryRun == false && (PUB.flag.get(eVarBool.FG_RDY_PORT_PC) == false || hmi1.arVar_Port[1].AlignOK != 1)) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isCanPickOffR()
|
|
{
|
|
//아이템이 없으면 불가
|
|
if (PUB.flag.get(eVarBool.FG_PK_ITEMON) == false) return false;
|
|
|
|
//Y축 위치 확인
|
|
if (MOT.getPositionMatch(MOT.GetPXPos(ePXLoc.PICKOFFR)) == false) return false;
|
|
|
|
//포트가 준비되지않았거나, 감지가 안되었다면 진행 불가
|
|
if (PUB.flag.get(eVarBool.FG_RDY_PORT_PR) == false || hmi1.arVar_Port[2].AlignOK != 1) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
bool CheckPauseCondition(Boolean lightCheck)
|
|
{
|
|
//비상정지체크
|
|
if (DIO.IsEmergencyOn() == true || PUB.mot.HasEmergencyStop)
|
|
{
|
|
//이것은 SPS에서 추가로 처리된다
|
|
PUB.Result.SetResultMessage(eResult.EMERGENCY, eECode.EMERGENCY, eNextStep.NOTHING);// false);
|
|
return false;
|
|
}
|
|
|
|
//홈이 잡혀잇는지 체크한다
|
|
if (PUB.mot.HasHomeSetOff == true)
|
|
{
|
|
PUB.Result.SetResultMessage(eResult.MOTION, eECode.MOT_HSET, eNextStep.ERROR);
|
|
return false;
|
|
}
|
|
|
|
if (lightCheck == false)
|
|
{
|
|
//안전센서체크
|
|
if (DIO.isSaftyDoorF() == false)
|
|
{
|
|
PUB.Result.SetResultMessage(eResult.EMERGENCY, eECode.DOORSAFTY, eNextStep.PAUSE);// false);
|
|
PUB.mot.MoveStop("Safety issue", true);
|
|
|
|
if (DIO.isSaftyDoorF(0, false) == false) DIO.SetPortMotor(0, eMotDir.CW, false, "Safety error");
|
|
if (DIO.isSaftyDoorF(1, false) == false) DIO.SetPortMotor(1, eMotDir.CW, false, "Safety error");
|
|
if (DIO.isSaftyDoorF(2, false) == false) DIO.SetPortMotor(2, eMotDir.CW, false, "Safety error");
|
|
return false;
|
|
}
|
|
|
|
//에어공급출력체크
|
|
if (AR.SETTING.Data.DisableSensor_AIRCheck == false && DIO.GetIOOutput(eDOName.SOL_AIR) == false)
|
|
{
|
|
PUB.Result.SetResultMessage(eResult.HARDWARE, eECode.AIRNOOUT, eNextStep.PAUSE);//false);
|
|
return false;
|
|
}
|
|
|
|
//오버로드체크
|
|
if (hmi1.arVar_Port[0].OverLoad)
|
|
{
|
|
PUB.Result.SetResultMessage(eResult.SENSOR, eECode.PORTOVERLOAD, eNextStep.PAUSE, new object[] { "FRONT-LEFT" });
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
Boolean isPortLimDN(int idx)
|
|
{
|
|
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
|
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_LIM_DN);
|
|
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_LIM_DN);
|
|
else return DIO.GetIOInput(eDIName.PORTR_LIM_DN);
|
|
|
|
}
|
|
Boolean isPortLimUP(int idx)
|
|
{
|
|
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
|
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_LIM_UP);
|
|
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_LIM_UP);
|
|
else return DIO.GetIOInput(eDIName.PORTR_LIM_UP);
|
|
}
|
|
Boolean isPortDetUp(int idx)
|
|
{
|
|
if (idx < 0 || idx > 2) throw new Exception("Port number must be between (0~2)");
|
|
if (idx == 0) return DIO.GetIOInput(eDIName.PORTL_DET_UP);
|
|
else if (idx == 1) return DIO.GetIOInput(eDIName.PORTC_DET_UP);
|
|
else return DIO.GetIOInput(eDIName.PORTR_DET_UP);
|
|
}
|
|
|
|
|
|
}//cvass
|
|
}
|