154 lines
9.4 KiB
C#
154 lines
9.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using arDev;
|
|
using AR;
|
|
using AR;
|
|
namespace Project
|
|
{
|
|
public partial class FMain
|
|
{
|
|
void Set_InterLock()
|
|
{
|
|
if (PUB.sm.Step < eSMStep.IDLE) return;
|
|
intlockcnt += 1;
|
|
|
|
var CurrentSaftyDoor = DIO.isSaftyDoorF();//도어안전
|
|
var CurrentSaftyArea = true; //안전영역
|
|
var bEmg = DIO.IsEmergencyOn(); //비상정지
|
|
var bHSet = PUB.mot.IsInit && PUB.mot.HasHomeSetOff; //홈 설정이 완료되었는지 확인한다
|
|
|
|
PUB.flag.set(eVarBool.FG_DOORSAFTY, CurrentSaftyDoor, "COMMINTERLOCK");
|
|
PUB.flag.set(eVarBool.FG_AREASAFTY, CurrentSaftyArea, "COMMINTERLOCK");
|
|
|
|
for (int i = 0; i < PUB.iLock.Length; i++)
|
|
{
|
|
PUB.iLock[i].set((int)eILock.EMG, bEmg, "COMMINTERLOCK");
|
|
PUB.iLock[i].set((int)eILock.DOOR, !CurrentSaftyDoor, "COMMINTERLOCK");
|
|
if (i < 7)
|
|
{
|
|
PUB.iLock[i].set((int)eILock.HOMESET, bHSet, "COMMINTERLOCK");
|
|
}
|
|
}
|
|
|
|
//피커의 Z축이 움직이는 동안에는 Y축을 움직이지 못하게 한다
|
|
PUB.iLock[(int)eAxis.PX_PICK].set((int)eILock.ZMOVE, PUB.mot.IsMotion((int)eAxis.PZ_PICK), "COMMINTERLOCK");
|
|
PUB.iLock[(int)eAxis.PL_MOVE].set((int)eILock.ZMOVE, PUB.mot.IsMotion((int)eAxis.PL_UPDN), "COMMINTERLOCK");
|
|
PUB.iLock[(int)eAxis.PR_MOVE].set((int)eILock.ZMOVE, PUB.mot.IsMotion((int)eAxis.PR_UPDN), "COMMINTERLOCK");
|
|
|
|
//피커의 Y축이 움직이는 동안에는 Z축을 움직이지 못하게 한다
|
|
PUB.iLock[(int)eAxis.PZ_PICK].set((int)eILock.XMOVE, PUB.mot.IsMotion((int)eAxis.PX_PICK), "COMMINTERLOCK");
|
|
|
|
//외부컨베어 신호 인터락설정 (출구쪽센서가 인식되지 않았다면 멈추지 않는다)
|
|
var cvLBusy = DIO.GetIOInput(eDIName.L_CONV4) && DIO.GetIOInput(eDIName.L_EXT_READY) == false && VAR.BOOL[eVarBool.FG_AUTOOUTCONVL] == false;
|
|
var cvRBusy = DIO.GetIOInput(eDIName.R_CONV4) && DIO.GetIOInput(eDIName.R_EXT_READY) == false && VAR.BOOL[eVarBool.FG_AUTOOUTCONVR] == false;
|
|
PUB.iLockCVL.set((int)eILockCV.EXTBUSY, cvLBusy, "COMMINTERLOCK");
|
|
PUB.iLockCVR.set((int)eILockCV.EXTBUSY, cvRBusy, "COMMINTERLOCK");
|
|
|
|
//축을 사용하지 않는경우
|
|
PUB.iLockCVL.set((int)eILockCV.DISABLE, SETTING.Data.Disable_Left, "COMMINTERLOCK");
|
|
PUB.iLockCVR.set((int)eILockCV.DISABLE, SETTING.Data.Disable_Right, "COMMINTERLOCK");
|
|
|
|
//카트모드에서
|
|
PUB.iLockCVL.set((int)eILockCV.CARTMODE, !VAR.BOOL[eVarBool.Use_Conveyor], "COMMINTERLOCK");
|
|
PUB.iLockCVR.set((int)eILockCV.CARTMODE, !VAR.BOOL[eVarBool.Use_Conveyor], "COMMINTERLOCK");
|
|
|
|
|
|
//포트가동상태에따라서 비젼인터락
|
|
PUB.iLockVS0.set((int)eILockVS0.PORTRDY, !PUB.flag.get(eVarBool.FG_RDY_PORT_PL), "COMMINTERLOCK");
|
|
if (PUB.Result.DryRun == true)
|
|
PUB.iLockVS1.set((int)eILockVS1.PORTRDY, false, "COMMINTERLOCK");
|
|
else
|
|
PUB.iLockVS1.set((int)eILockVS1.PORTRDY, !PUB.flag.get(eVarBool.FG_RDY_PORT_PC), "COMMINTERLOCK");
|
|
PUB.iLockVS2.set((int)eILockVS2.PORTRDY, !PUB.flag.get(eVarBool.FG_RDY_PORT_PR), "COMMINTERLOCK");
|
|
|
|
//위치관련 인터락은 MODEL이 설정 되어있어야하며, MOTION도 정상이어야 한다
|
|
if (PUB.mot.IsInit && PUB.Result.mModel.isSet)
|
|
{
|
|
//if (PUB.LockModel.WaitOne(1) == true)
|
|
{
|
|
//PUB.LockModel.Reset();
|
|
|
|
//피커의 X축에 따라서 비젼의 촬영가능여부가 결정된다
|
|
PUB.iLockVS0.set((int)eILockVS0.PKXPOS, DIO.GetIOInput(eDIName.PICKER_SAFE) == false && MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.PICKON)) < -2, "COMMINTERLOCK");
|
|
if (MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.READYL)) <= 2 || MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.READYR)) >= -2)
|
|
PUB.iLockVS1.set((int)eILockVS1.PKXPOS, false, "COMMINTERLOCK");
|
|
else
|
|
PUB.iLockVS1.set((int)eILockVS1.PKXPOS, true, "COMMINTERLOCK");
|
|
PUB.iLockVS2.set((int)eILockVS2.PKXPOS, DIO.GetIOInput(eDIName.PICKER_SAFE) == false && MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.PICKON)) > 2, "COMMINTERLOCK");
|
|
|
|
//프린터Y축 위치에 따른 비젼촬영여부(기준위치보다 낮게 있다면 촬영이 안된다)
|
|
var PLMCmdPos = MOT.GetLMPos(eLMLoc.READY);
|
|
var PRMCmdPos = MOT.GetRMPos(eRMLoc.READY);
|
|
PUB.iLockVS0.set((int)eILockVS0.PRNYPOS, (MOT.getPositionOffset(PLMCmdPos) < -5), "COMMINTERLOCK");
|
|
PUB.iLockVS2.set((int)eILockVS2.PRNYPOS, (MOT.getPositionOffset(PRMCmdPos) < -5), "COMMINTERLOCK");
|
|
|
|
//피커의Z축이 안전위치가 아니면 Y축을 움직이지 않는다
|
|
var PKZ_POS_ERR = MOT.getPositionOffset(MOT.GetPZPos(ePZLoc.READY)) > 2;
|
|
PUB.iLock[(int)eAxis.PX_PICK].set((int)eILock.Z_POS, PKZ_POS_ERR, "COMMINTERLOCK");
|
|
|
|
PKZ_POS_ERR = (DIO.GetIOInput(eDIName.PICKER_SAFE) == false && MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.PICKON)) <= 2);
|
|
PUB.iLock[(int)eAxis.PL_MOVE].set((int)eILock.X_POS, PKZ_POS_ERR, "COMMINTERLOCK"); ;
|
|
|
|
PKZ_POS_ERR = (DIO.GetIOInput(eDIName.PICKER_SAFE) == false && MOT.getPositionOffset(MOT.GetPXPos(ePXLoc.PICKON)) >= 2);
|
|
PUB.iLock[(int)eAxis.PR_MOVE].set((int)eILock.X_POS, PKZ_POS_ERR, "COMMINTERLOCK");
|
|
|
|
//프린터Z축 안전위치가 아니면 Y축을 멈춘다
|
|
var PLZ_POS_ERR = MOT.getPositionOffset(MOT.GetLZPos(eLZLoc.READY)) > 2.0;
|
|
var PRZ_POS_ERR = MOT.getPositionOffset(MOT.GetRZPos(eRZLoc.READY)) > 2.0;
|
|
PUB.iLock[(int)eAxis.PL_MOVE].set((int)eILock.PZ_POS, PLZ_POS_ERR, "COMMINTERLOCK");
|
|
PUB.iLock[(int)eAxis.PR_MOVE].set((int)eILock.PZ_POS, PRZ_POS_ERR, "COMMINTERLOCK");
|
|
|
|
//실린더가 전진해 잇다면 이동하지 않아야 한다 - 210207
|
|
var PLZ_CYL_FW = !DIO.GetIOInput(eDIName.L_PICK_BW);
|
|
var PRZ_CYL_FW = !DIO.GetIOInput(eDIName.R_PICK_BW);
|
|
PUB.iLock[(int)eAxis.PL_MOVE].set((int)eILock.CYL_FORWARD, PLZ_CYL_FW, "COMMINTERLOCK");
|
|
PUB.iLock[(int)eAxis.PR_MOVE].set((int)eILock.CYL_FORWARD, PRZ_CYL_FW, "COMMINTERLOCK");
|
|
|
|
//프린터Y축 안전위치가 아니면 Z축을 멈춘다
|
|
var PLM_YPOS_READY = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.READY)); //MOT.GetPLM_PosName();
|
|
var PRM_YPOS_READY = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.READY)); //MOT.GetPRM_PosName();
|
|
|
|
var PLM_YPOS_H07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTH07));
|
|
var PLM_YPOS_M07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTM07));
|
|
var PLM_YPOS_L07 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTL07));
|
|
var PLM_YPOS_H13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTH13));
|
|
var PLM_YPOS_M13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTM13));
|
|
var PLM_YPOS_L13 = MOT.getPositionMatch(MOT.GetLMPos(eLMLoc.PRINTL13));
|
|
|
|
var PRM_YPOS_H07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTH07));
|
|
var PRM_YPOS_M07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTM07));
|
|
var PRM_YPOS_L07 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTL07));
|
|
var PRM_YPOS_H13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTH13));
|
|
var PRM_YPOS_M13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTM13));
|
|
var PRM_YPOS_L13 = MOT.getPositionMatch(MOT.GetRMPos(eRMLoc.PRINTL13));
|
|
|
|
|
|
var 좌측대기옵셋 = MOT.getPositionOffset(MOT.GetLMPos(eLMLoc.READY));
|
|
var 우측대기옵셋 = MOT.getPositionOffset(MOT.GetRMPos(eRMLoc.READY));
|
|
var 좌측대기인정 = (좌측대기옵셋 >= (AR.SETTING.Data.MoveYForPaperVaccumeValue - 0.5) && 좌측대기옵셋 <= 0.5);
|
|
var 우측대기인정 = (우측대기옵셋 >= (AR.SETTING.Data.MoveYForPaperVaccumeValue - 0.5) && 좌측대기옵셋 <= 0.5);
|
|
|
|
var PLM_POS_ERR = !(좌측대기인정 || PLM_YPOS_READY || PLM_YPOS_H07 || PLM_YPOS_M07 || PLM_YPOS_L07 || PLM_YPOS_H13 || PLM_YPOS_M13 || PLM_YPOS_L13);
|
|
var PRM_POS_ERR = !(우측대기인정 || PRM_YPOS_READY || PRM_YPOS_H07 || PRM_YPOS_M07 || PRM_YPOS_L07 || PRM_YPOS_H13 || PRM_YPOS_M13 || PRM_YPOS_L13);
|
|
|
|
PUB.iLock[(int)eAxis.PL_UPDN].set((int)eILock.PY_POS, PLM_POS_ERR, "COMMINTERLOCK");
|
|
PUB.iLock[(int)eAxis.PR_UPDN].set((int)eILock.PY_POS, PRM_POS_ERR, "COMMINTERLOCK");
|
|
|
|
//PUB.LockModel.Set();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//모션사용불능은 그냥 해제한다
|
|
//Pub.LockPRL.set((int)eILockPRL.PYPOS, false, "COMMINTERLOCK");
|
|
//Pub.LockPRL.set((int)eILockPRR.PYPOS, false, "COMMINTERLOCK");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|