Initial commit
This commit is contained in:
202
Handler/Project/RunCode/_SM_RUN.cs
Normal file
202
Handler/Project/RunCode/_SM_RUN.cs
Normal file
@@ -0,0 +1,202 @@
|
||||
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("안전문제", true);
|
||||
|
||||
if (DIO.isSaftyDoorF(0, false) == false) DIO.SetPortMotor(0, eMotDir.CW, false, "안전오류");
|
||||
if (DIO.isSaftyDoorF(1, false) == false) DIO.SetPortMotor(1, eMotDir.CW, false, "안전오류");
|
||||
if (DIO.isSaftyDoorF(2, false) == false) DIO.SetPortMotor(2, eMotDir.CW, false, "안전오류");
|
||||
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("포트번호는(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("포트번호는(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("포트번호는(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
|
||||
}
|
||||
Reference in New Issue
Block a user