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 }