void tubeStatus(UnitCodeSF unitCode, SF_TUBE_STATUS status) { // Ready는 다 찬놈..Working은 반만 찬놈..이네..Ready는 Green으로 Working은 Blue로 할까? int value; if (status == SF_TUBE_STATUS.INVALID) { value = 0; } else if (status == SF_TUBE_STATUS.READY) { value = 100; } else if (status == SF_TUBE_STATUS.WORKING) { value = 50; } else { value = 0; } if (unitCode == UnitCodeSF.SF1) { PB_Tube1.Value = value; } else if (unitCode == UnitCodeSF.SF2) { PB_Tube2.Value = value; } else if (unitCode == UnitCodeSF.SF3) { PB_Tube3.Value = value; } else if (unitCode == UnitCodeSF.SF4) { PB_Tube4.Value = value; } else if (unitCode == UnitCodeSF.SF5) { PB_Tube5.Value = value; } else if (unitCode == UnitCodeSF.SF6) { PB_Tube6.Value = value; } else if (unitCode == UnitCodeSF.SF7) { PB_Tube7.Value = value; } else if (unitCode == UnitCodeSF.SF8) { PB_Tube8.Value = value; } }
void sfTubeStatus(UnitCodeSF unitCode, SF_TUBE_STATUS status) { if (this.InvokeRequired) { sfTubeStatus_Call d = new sfTubeStatus_Call(sfTubeStatus); this.BeginInvoke(d, new object[] { unitCode, status }); } else { tubeStatus(unitCode, status); } }
private void Control_Click(object sender, EventArgs e) { if (!mc.check.READY_PUSH(sender)) { return; } mc.check.push(sender, true); #region search if (sender.Equals(BT_Search1st_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.search.enable, (int)ON_OFF.ON); } if (sender.Equals(BT_Search1st_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.search.enable, (int)ON_OFF.OFF); } if (sender.Equals(TB_Search1st_Level)) { mc.para.setting(mc.para.HD.pick.search.level, out mc.para.HD.pick.search.level); } if (sender.Equals(TB_Search1st_Speed)) { mc.para.setting(mc.para.HD.pick.search.vel, out mc.para.HD.pick.search.vel); } if (sender.Equals(TB_Search1st_Delay)) { mc.para.setting(mc.para.HD.pick.search.delay, out mc.para.HD.pick.search.delay); } #endregion #region search2 if (sender.Equals(BT_Search2nd_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.search2.enable, (int)ON_OFF.ON); } if (sender.Equals(BT_Search2nd_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.search2.enable, (int)ON_OFF.OFF); } if (sender.Equals(TB_Search2nd_Level)) { mc.para.setting(mc.para.HD.pick.search2.level, out mc.para.HD.pick.search2.level); } if (sender.Equals(TB_Search2nd_Speed)) { mc.para.setting(mc.para.HD.pick.search2.vel, out mc.para.HD.pick.search2.vel); } if (sender.Equals(TB_Search2nd_Delay)) { mc.para.setting(mc.para.HD.pick.search2.delay, out mc.para.HD.pick.search2.delay); } #endregion #region delay if (sender.Equals(TB_Delay)) { mc.para.setting(mc.para.HD.pick.delay, out mc.para.HD.pick.delay); } if (sender.Equals(TB_Force)) { mc.para.setting(mc.para.HD.pick.force, out mc.para.HD.pick.force); } #endregion #region driver if (sender.Equals(BT_Drive1st_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.driver.enable, (int)ON_OFF.ON); } if (sender.Equals(BT_Drive1st_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.driver.enable, (int)ON_OFF.OFF); } if (sender.Equals(TB_Drive1st_Level)) { mc.para.setting(mc.para.HD.pick.driver.level, out mc.para.HD.pick.driver.level); } if (sender.Equals(TB_Drive1st_Speed)) { mc.para.setting(mc.para.HD.pick.driver.vel, out mc.para.HD.pick.driver.vel); } if (sender.Equals(TB_Drive1st_Delay)) { mc.para.setting(mc.para.HD.pick.driver.delay, out mc.para.HD.pick.driver.delay); } #endregion #region driver2 if (sender.Equals(BT_Drive2nd_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.driver2.enable, (int)ON_OFF.ON); } if (sender.Equals(BT_Drive2nd_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.driver2.enable, (int)ON_OFF.OFF); } if (sender.Equals(TB_Drive2nd_Level)) { mc.para.setting(mc.para.HD.pick.driver2.level, out mc.para.HD.pick.driver2.level); } if (sender.Equals(TB_Drive2nd_Speed)) { mc.para.setting(mc.para.HD.pick.driver2.vel, out mc.para.HD.pick.driver2.vel); } if (sender.Equals(TB_Drive2nd_Delay)) { mc.para.setting(mc.para.HD.pick.driver2.delay, out mc.para.HD.pick.driver2.delay); } #endregion #region offset if (sender.Equals(BT_PositionOffset_SelectSF1)) { slectOffsetSF = UnitCodeSF.SF1; } if (sender.Equals(BT_PositionOffset_SelectSF2)) { slectOffsetSF = UnitCodeSF.SF2; } if (sender.Equals(BT_PositionOffset_SelectSF3)) { if (mc.swcontrol.mechanicalRevision == 0) { slectOffsetSF = UnitCodeSF.SF3; } else { slectOffsetSF = UnitCodeSF.SF5; } } if (sender.Equals(BT_PositionOffset_SelectSF4)) { if (mc.swcontrol.mechanicalRevision == 0) { slectOffsetSF = UnitCodeSF.SF4; } else { slectOffsetSF = UnitCodeSF.SF6; } } if (sender.Equals(BT_PositionOffset_SelectSF5)) { slectOffsetSF = UnitCodeSF.SF5; } if (sender.Equals(BT_PositionOffset_SelectSF6)) { slectOffsetSF = UnitCodeSF.SF6; } if (sender.Equals(BT_PositionOffset_SelectSF7)) { slectOffsetSF = UnitCodeSF.SF7; } if (sender.Equals(BT_PositionOffset_SelectSF8)) { slectOffsetSF = UnitCodeSF.SF8; } if (sender.Equals(TB_PositionOffset_X)) { mc.para.setting(mc.para.HD.pick.offset[(int)slectOffsetSF].x, out mc.para.HD.pick.offset[(int)slectOffsetSF].x); } if (sender.Equals(TB_PositionOffset_Y)) { mc.para.setting(mc.para.HD.pick.offset[(int)slectOffsetSF].y, out mc.para.HD.pick.offset[(int)slectOffsetSF].y); } //if (sender.Equals(TB_PositionOffset_Z)) mc.para.setting(mc.para.HD.pick.offset[(int)slectOffsetSF].z, out mc.para.HD.pick.offset[(int)slectOffsetSF].z); if (sender.Equals(BT_PositionOffset_Jog)) { double posX, posY, posZ, posT; #region moving posX = mc.hd.tool.tPos.x[(int)UnitCodeHead.HD1].PICK(slectOffsetSF); posY = mc.hd.tool.tPos.y[(int)UnitCodeHead.HD1].PICK(slectOffsetSF); posZ = mc.hd.tool.tPos.z[(int)UnitCodeHead.HD1].PICK(slectOffsetSF); posT = mc.hd.tool.tPos.t[(int)UnitCodeHead.HD1].ZERO; mc.hd.tool.jogMove((int)UnitCodeHead.HD1, posX, posY, posZ, posT, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } #endregion FormJogPadXYZ ff = new FormJogPadXYZ(); #region jogMode if (slectOffsetSF == UnitCodeSF.SF1) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF1; } else if (slectOffsetSF == UnitCodeSF.SF2) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF2; } else if (slectOffsetSF == UnitCodeSF.SF3) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF3; } else if (slectOffsetSF == UnitCodeSF.SF4) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF4; } else if (slectOffsetSF == UnitCodeSF.SF5) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF5; } else if (slectOffsetSF == UnitCodeSF.SF6) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF6; } else if (slectOffsetSF == UnitCodeSF.SF7) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF7; } else if (slectOffsetSF == UnitCodeSF.SF8) { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF8; } else { ff.jogMode = JOGXYZ_MODE.HD_PICK_OFFSET_SF1; } #endregion ff.dataX = mc.para.HD.pick.offset[(int)slectOffsetSF].x; ff.dataY = mc.para.HD.pick.offset[(int)slectOffsetSF].y; ff.dataZ = mc.para.HD.pick.offset[(int)slectOffsetSF].z; ff.ShowDialog(); mc.para.setting(ref mc.para.HD.pick.offset[(int)slectOffsetSF].x, ff.dataX.value); mc.para.setting(ref mc.para.HD.pick.offset[(int)slectOffsetSF].y, ff.dataY.value); mc.para.setting(ref mc.para.HD.pick.offset[(int)slectOffsetSF].z, ff.dataZ.value); #region moving posX = mc.hd.tool.cPos.x.REF0; posY = mc.hd.tool.cPos.y.REF0;; posZ = mc.hd.tool.tPos.z[(int)UnitCodeHead.HD1].XY_MOVING; posT = mc.hd.tool.tPos.t[(int)UnitCodeHead.HD1].ZERO; mc.hd.tool.jogMove((int)UnitCodeHead.HD1, posX, posY, posZ, posT, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } #endregion } if (sender.Equals(BT_PositionOffset_AllClear)) { ret.usrDialog = FormMain.UserMessageBox(DIAG_SEL_MODE.OKCancel, DIAG_ICON_MODE.QUESTION, textResource.MB_HD_PICK_INIT_OFFSET_XYZ); //mc.message.OkCancel("모든 Pick Offset X,Y,Z 값은 초기화 됩니다. 계속 진행할까요?", out ret.dialog); if (ret.usrDialog == DIAG_RESULT.Cancel) { goto EXIT; } for (int i = 0; i < 8; i++) { mc.para.setting(ref mc.para.HD.pick.offset[i].x, 0); mc.para.setting(ref mc.para.HD.pick.offset[i].y, 0); mc.para.setting(ref mc.para.HD.pick.offset[i].z, 0); } } if (sender.Equals(BT_AutoPickCompenClear)) { FormUserMessage ff = new FormUserMessage(); ff.SetDisplayItems(DIAG_SEL_MODE.YesNo, DIAG_ICON_MODE.WARNING, textResource.MB_HD_PICK_INIT_AUTO_TRACK); ff.ShowDialog(); ret.usrDialog = FormUserMessage.diagResult; if (ret.usrDialog == DIAG_RESULT.Yes) { for (int i = 0; i < 8; i++) { mc.para.HD.pick.pickPosComp[i].x.value = 0; mc.para.HD.pick.pickPosComp[i].y.value = 0; } ff.SetDisplayItems(DIAG_SEL_MODE.OK, DIAG_ICON_MODE.INFORMATION, textResource.MB_HD_PICK_INIT_FINISH); ff.ShowDialog(); } } if (sender.Equals(BT_PickOffsetZCal)) { mc.log.debug.write(mc.log.CODE.CAL, "Pick Z Offset Calibration START"); double posX, posY, posZ, posT; int moveCase; double startZPos, sensor1Pos, sensor2Pos; bool pos1Done; bool pos2Done; bool teachDone = false; double[] tempval = new double[5]; int stackFeedNum = 8; int sfTemp = 0; if (mc.swcontrol.mechanicalRevision == 1) { stackFeedNum = 4; } for (int i = 0; i < stackFeedNum; i++) { if (mc.swcontrol.mechanicalRevision == 1 && i >= 2) { sfTemp = i + 2; } mc.log.debug.write(mc.log.CODE.CAL, String.Format("Stack Feeder Move to {0} position", sfTemp + 1)); for (int k = 0; k < 5; k++) { #region move stack feeder mc.sf.req = true; mc.sf.reqMode = REQMODE.READY; mc.sf.reqTubeNumber = (UnitCodeSF)sfTemp; mc.main.Thread_Polling(); // make stack feeder to be ready for picking if (mc.sf.ERROR) { mc.log.debug.write(mc.log.CODE.ERROR, "CANNOT run calibration process. Stack Feeder Error"); goto EXIT; } #endregion #region move to pick position posX = mc.hd.tool.tPos.x[(int)UnitCodeHead.HD1].PICK((UnitCodeSF)sfTemp); posY = mc.hd.tool.tPos.y[(int)UnitCodeHead.HD1].PICK((UnitCodeSF)sfTemp); posZ = mc.hd.tool.tPos.z[(int)UnitCodeHead.HD1].RAWPICK; posT = mc.hd.tool.tPos.t[(int)UnitCodeHead.HD1].ZERO; mc.hd.tool.jogMove((int)UnitCodeHead.HD1, posX, posY, posZ, posT, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } mc.idle(100); #endregion #region sensor check //mc.IN.HD.LOAD_CHK(out ret.b1, out ret.message); //mc.IN.HD.LOAD_CHK2(out ret.b2, out ret.message); if (ret.b1 == false && ret.b2 == true) { moveCase = 0; // touch가 안되어 있거나 살짝 눌린 상태 } else if (ret.b1 == true && ret.b2 == true) { moveCase = 1; // 200~350um 눌린 상태 } else if (ret.b1 == true && ret.b2 == false) { moveCase = 2; // 350um이상 눌린 상태 } else { moveCase = 3; // 몰라...이런 상태는 없어... mc.message.alarm("Load Sensor Error : Sensor ALL OFF"); goto EXIT; } #endregion if (moveCase > 0) { FormMain.UserMessageBox(DIAG_SEL_MODE.OK, DIAG_ICON_MODE.FAILURE, "Pick Position이 너무 낮습니다.\nPick Position값을 먼저 설정해 주세요."); //mc.message.alarm("Pick Position is too LOW. Please change pick position."); goto EXIT; } mc.hd.tool.Z[(int)UnitCodeHead.HD1].actualPosition(out startZPos, out ret.message); teachDone = false; for (int j = 0; j < 3; j++) { if (teachDone) { break; } mc.hd.tool.Z[(int)UnitCodeHead.HD1].move(posZ - 600 * (j + 1), mc.speed.checkSpeed, out ret.message); dwell.Reset(); sensor1Pos = 0; sensor2Pos = 0; pos1Done = false; pos2Done = false; while (true) { // mc.IN.HD.LOAD_CHK(out ret.b1, out ret.message); // mc.IN.HD.LOAD_CHK2(out ret.b2, out ret.message); if (ret.b1 && !pos1Done) { mc.hd.tool.Z[(int)UnitCodeHead.HD1].actualPosition(out sensor1Pos, out ret.message); pos1Done = true; } if (ret.b1 && !ret.b2 && !pos2Done) { mc.hd.tool.Z[(int)UnitCodeHead.HD1].actualPosition(out sensor2Pos, out ret.message); pos2Done = true; } mc.hd.tool.Z[(int)UnitCodeHead.HD1].AT_TARGET(out ret.b, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } if (ret.b) { break; } if (dwell.Elapsed > 20000) { ret.message = RetMessage.TIMEOUT; mc.message.alarmMotion(ret.message); goto EXIT; } } if (sensor1Pos == 0) { mc.log.debug.write(mc.log.CODE.TRACE, "Cannot find in search " + (j + 1).ToString()); } else { mc.log.debug.write(mc.log.CODE.TRACE, "1st Pos : " + Math.Round((startZPos - sensor1Pos), 3).ToString("f3") + ", 2nd Pos : " + Math.Round((startZPos - sensor2Pos), 3).ToString("f3")); } dwell.Reset(); while (true) { if (dwell.Elapsed > 500) { ret.message = RetMessage.TIMEOUT; mc.message.alarmMotion(ret.message); goto EXIT; } mc.hd.tool.Z[(int)UnitCodeHead.HD1].AT_DONE(out ret.b, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } if (ret.b) { break; } } if (sensor1Pos != 0) { double offset = Math.Round(sensor1Pos - startZPos) - mc.para.CAL.z.sensor1.value; mc.log.debug.write(mc.log.CODE.CAL, "SF" + (sfTemp + 1).ToString() + " Offset: " + offset.ToString() + "[um]"); tempval[k] = offset; teachDone = true; break; } else { mc.idle(100); } } posZ = mc.hd.tool.tPos.z[(int)UnitCodeHead.HD1].XY_MOVING; mc.hd.tool.jogMove((int)UnitCodeHead.HD1, posZ, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } double curSFZPos; mc.sf.Z.actualPosition(out curSFZPos, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } mc.sf.jogMoveZ(curSFZPos - 300, out ret.message); if (ret.message != RetMessage.OK) { mc.message.alarmMotion(ret.message); goto EXIT; } } mc.log.debug.write(mc.log.CODE.TRACE, "1st[" + tempval[0].ToString() + "], 2nd[" + tempval[1].ToString() + "], 3rd[" + tempval[2].ToString() + "], 4th[" + tempval[3].ToString() + "], 5th[" + tempval[4].ToString() + "]"); double sum = tempval[0] + tempval[1] + tempval[2] + tempval[3] + tempval[4]; mc.log.debug.write(mc.log.CODE.CAL, "SF" + (sfTemp + 1).ToString() + " Offset RESULT : " + Math.Round(sum / 5).ToString()); mc.para.setting(ref mc.para.HD.pick.offset[sfTemp].z, Math.Round(sum / 5)); } mc.sf.req = true; mc.sf.reqMode = REQMODE.DOWN; mc.sf.reqTubeNumber = UnitCodeSF.SF1; mc.main.Thread_Polling(); mc.log.debug.write(mc.log.CODE.CAL, "Pick Z Offset Calibration END"); } if (sender.Equals(TB_PickOffsetZ1)) { mc.para.setting(mc.para.HD.pick.offset[0].z, out mc.para.HD.pick.offset[0].z); } if (sender.Equals(TB_PickOffsetZ2)) { mc.para.setting(mc.para.HD.pick.offset[1].z, out mc.para.HD.pick.offset[1].z); } if (sender.Equals(TB_PickOffsetZ3)) { mc.para.setting(mc.para.HD.pick.offset[2].z, out mc.para.HD.pick.offset[2].z); } if (sender.Equals(TB_PickOffsetZ4)) { mc.para.setting(mc.para.HD.pick.offset[3].z, out mc.para.HD.pick.offset[3].z); } if (sender.Equals(TB_PickOffsetZ5)) { mc.para.setting(mc.para.HD.pick.offset[4].z, out mc.para.HD.pick.offset[4].z); } if (sender.Equals(TB_PickOffsetZ6)) { mc.para.setting(mc.para.HD.pick.offset[5].z, out mc.para.HD.pick.offset[5].z); } if (sender.Equals(TB_PickOffsetZ7)) { mc.para.setting(mc.para.HD.pick.offset[6].z, out mc.para.HD.pick.offset[6].z); } if (sender.Equals(TB_PickOffsetZ8)) { mc.para.setting(mc.para.HD.pick.offset[7].z, out mc.para.HD.pick.offset[7].z); } #endregion #region suction if (sender.Equals(BT_SuctionMode_Select_MovingLevelOn)) { mc.para.setting(ref mc.para.HD.pick.suction.mode, (int)PICK_SUCTION_MODE.MOVING_LEVEL_ON); } if (sender.Equals(BT_SuctionMode_Select_SearchLevelOn)) { mc.para.setting(ref mc.para.HD.pick.suction.mode, (int)PICK_SUCTION_MODE.SEARCH_LEVEL_ON); } if (sender.Equals(BT_SuctionMode_Select_PickLevelOn)) { mc.para.setting(ref mc.para.HD.pick.suction.mode, (int)PICK_SUCTION_MODE.PICK_LEVEL_ON); } if (sender.Equals(TB_SuctionMode_Level)) { mc.para.setting(mc.para.HD.pick.suction.level, out mc.para.HD.pick.suction.level); } if (sender.Equals(BT_SuctionCheck_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.suction.check, (int)ON_OFF.ON); } if (sender.Equals(BT_SuctionCheck_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.suction.check, (int)ON_OFF.OFF); } if (sender.Equals(TB_SuctionCheckLimit_HD1)) { mc.para.setting(mc.para.HD.pick.pickupVacLimit[(int)UnitCodeHead.HD1], out mc.para.HD.pick.pickupVacLimit[(int)UnitCodeHead.HD1]); } if (sender.Equals(TB_SuctionCheckLimit_HD2)) { mc.para.setting(mc.para.HD.pick.pickupVacLimit[(int)UnitCodeHead.HD2], out mc.para.HD.pick.pickupVacLimit[(int)UnitCodeHead.HD2]); } if (sender.Equals(TB_SuctionCheck_Time)) { mc.para.setting(mc.para.HD.pick.suction.checkLimitTime, out mc.para.HD.pick.suction.checkLimitTime); } #endregion #region missCheck if (sender.Equals(BT_MissCheck_SelectOnOff_On)) { mc.para.setting(ref mc.para.HD.pick.missCheck.enable, (int)ON_OFF.ON); } if (sender.Equals(BT_MissCheck_SelectOnOff_Off)) { mc.para.setting(ref mc.para.HD.pick.missCheck.enable, (int)ON_OFF.OFF); } if (sender.Equals(TB_MissCheck_Retry)) { mc.para.setting(mc.para.HD.pick.missCheck.retry, out mc.para.HD.pick.missCheck.retry); } #endregion EXIT: mc.para.write(out ret.b); if (!ret.b) { mc.message.alarm("para write error"); } refresh(); mc.main.Thread_Polling(); mc.check.push(sender, false); }