//--------------------------------------------------------------------------- private void UserButton_Click_6(object sender, RoutedEventArgs e) { if (!m_bConnect || m_nAxis < 0) { return; } //mc_Acs.fn_SetBuffer(m_nAxis, true); //HOME int nHomeNo = MOTR.ManNoHome((EN_MOTR_ID)m_nAxis); if (!fn_UserMsg($"{STRING_MOTOR_ID[m_nAxis]} Motor Home?", EN_MSG_TYPE.Check)) { return; } SEQ.fn_Reset(); if (nHomeNo == 32) //Z-Axis { if (SEQ_SPIND.fn_IsExistTool() && !FM.fn_IsLvlMaster()) { fn_UserMsg("Please remove tool"); return; } } MAN.fn_ManProcOn(nHomeNo, true, false); }
//------------------------------------------------------------------------------------------------- private void btWait_Click(object sender, RoutedEventArgs e) { // IO.fn_SetOpenLoopOff(); //MOTR[(int)EN_MOTR_ID.miSPD_Z]. SEQ_SPIND.fn_ReqMoveMotr(EN_MOTR_ID.miSPD_Z, EN_COMD_ID.Wait1); }
private void bn_MoveVisn_Click(object sender, RoutedEventArgs e) { //Move Polishing Vision Position SEQ_SPIND.fn_ReqMoveMotr(EN_MOTR_ID.miSPD_X, EN_COMD_ID.User12); SEQ_POLIS.fn_ReqBathImagePos(); // SEQ_SPIND.fn_MoveCylLensCvr(ccFwd); SEQ_SPIND.fn_MoveCylIR(tg_shutter.Button.IsChecked == true ? ccBwd : ccFwd); }
//--------------------------------------------------------------------------- public void fn_CrntStateTrace(EN_SEQ_ID part, string title) { //Local Var. string sTemp = string.Empty; string sMsg = string.Empty; string sFileName = string.Format($"[{DateTime.Now:yyMMdd}]CRNT_STATE.log"); string sPath = m_sLogRoot + "CRNT_STATE\\" + sFileName; try { //File Open. using (Stream stream = new FileStream(sPath, FileMode.OpenOrCreate, FileAccess.Write)) { StreamWriter sw = new StreamWriter(stream, Encoding.Unicode); sw.BaseStream.Seek(0, SeekOrigin.End); sMsg += string.Format($">>> {DateTime.Now:yyyy-MM-dd HH:mm:dd:ss} <<< \r\n"); sMsg += title + "\r\n"; sMsg += "----------------------------------------------------------- \r\n"; if (part == EN_SEQ_ID.SPINDLE || part == EN_SEQ_ID.ALL) { SEQ_SPIND.fn_SaveLog(ref sTemp); sMsg += sTemp; } if (part == EN_SEQ_ID.POLISH || part == EN_SEQ_ID.ALL) { SEQ_POLIS.fn_SaveLog(ref sTemp); sMsg += sTemp; } if (part == EN_SEQ_ID.CLEAN || part == EN_SEQ_ID.ALL) { SEQ_CLEAN.fn_SaveLog(ref sTemp); sMsg += sTemp; } if (part == EN_SEQ_ID.STORAGE || part == EN_SEQ_ID.ALL) { SEQ_STORG.fn_SaveLog(ref sTemp); sMsg += sTemp; } if (part == EN_SEQ_ID.TRANSFER || part == EN_SEQ_ID.ALL) { SEQ_TRANS.fn_SaveLog(ref sTemp); sMsg += sTemp; } sMsg += "----------------------------------------------------------- \r\n\r\n"; sw.Write(sMsg); sw.Flush(); sw.Close(); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); ExceptionTrace("<fn_CrntStateTrace>", ex); } }
//--------------------------------------------------------------------------- private void bn_MoveVisn_Click(object sender, RoutedEventArgs e) { //Move Pre-Align Position SEQ_SPIND.fn_ReqMoveMotr(EN_MOTR_ID.miSPD_X, EN_COMD_ID.User11); SEQ_TRANS.fn_ReqMoveVisnPos(); // SEQ_SPIND.fn_MoveCylLensCvr(ccFwd); SEQ_SPIND.fn_MoveCylIR(tg_shutter.Button.IsChecked == true ? ccBwd : ccFwd); }
//--------------------------------------------------------------------------- private void btReset1_Click(object sender, RoutedEventArgs e) { // if (SEQ._bRun) { MessageBox.Show("Can not use during run.", "WARNING", MessageBoxButton.OK, MessageBoxImage.Warning); } m_OnShotTimer.IsEnabled = false; //Reset Button selbtn = sender as Button; int nTag = Convert.ToInt32(selbtn.Tag); if (nTag < 0) { return; } switch ((EN_SEQ_ID)nTag) { case EN_SEQ_ID.SPINDLE: //Spindle SEQ_SPIND.fn_Reset(); break; case EN_SEQ_ID.POLISH: SEQ_POLIS.fn_Reset(); break; case EN_SEQ_ID.CLEAN: SEQ_CLEAN.fn_Reset(); break; case EN_SEQ_ID.STORAGE: SEQ_STORG.fn_Reset(); break; case EN_SEQ_ID.TRANSFER: SEQ_TRANS.fn_Reset(); break; case EN_SEQ_ID.ALL: SEQ_SPIND.fn_Reset(); SEQ_POLIS.fn_Reset(); SEQ_CLEAN.fn_Reset(); SEQ_STORG.fn_Reset(); SEQ_TRANS.fn_Reset(); break; default: break; } }
private void fn_SetOpticCondition() { SEQ_SPIND.fn_MoveCylLensCvr(ccFwd); SEQ_SPIND.fn_MoveCylIR(tg_shutter.Button.IsChecked == true ? ccBwd : ccFwd); g_VisionManager._CamManager.fn_SetExposure(uis_Exposuretime.slider.Value); g_VisionManager._CamManager.fn_SetGain(uis_Gain.slider.Value); g_VisionManager._LightManger.Channel = 1; g_VisionManager._LightManger.Bright = (int)us_LightW.USValue; g_VisionManager._LightManger.Channel = 2; g_VisionManager._LightManger.Bright = (int)us_LightIR.USValue; }
//--------------------------------------------------------------------------- //Update Timer private void fn_tmUpdate(object sender, EventArgs e) { // m_UpdateTimer.Stop(); SEQ_SPIND.fn_UpdateOneShot(ref gdOneShot01); SEQ_POLIS.fn_UpdateOneShot(ref gdOneShot02); SEQ_CLEAN.fn_UpdateOneShot(ref gdOneShot03); SEQ_STORG.fn_UpdateOneShot(ref gdOneShot04); SEQ_TRANS.fn_UpdateOneShot(ref gdOneShot05); //SEQ .fn_UpdateOneShot(ref gdFlag06); // m_UpdateTimer.Start(); }
//--------------------------------------------------------------------------- //Update Timer private void fn_tmUpdate(object sender, EventArgs e) { // m_UpdateTimer.Stop(); lbRun.Background = IO.XV[(int)EN_INPUT_ID.xSPD_E3000_RUN] ? Brushes.LimeGreen : Brushes.LightGray; lbRunOk.Background = IO.XV[(int)EN_INPUT_ID.xSPD_E3000_SpeedOK] ? Brushes.LightGreen: Brushes.LightGray; lbWarn.Background = IO.XV[(int)EN_INPUT_ID.xSPD_E3000_Warn] ? Brushes.Yellow : Brushes.LightGray; lbError.Background = !IO.XV[(int)EN_INPUT_ID.xSPD_E3000_State] ? Brushes.Red : Brushes.LightGray; lbRPM.Content = "RPM : " + SEQ_SPIND.fn_GetSpindleSpeed().ToString(); lbDir.Content = SEQ_SPIND.fn_GetSpindleDir() ? "DIRECTION : FWD" : "DIRECTION : BWD"; lbTorque.Content = "TORQUE : " + SEQ_SPIND.fn_GetSpindleTorque(); // m_UpdateTimer.Start(); }
//--------------------------------------------------------------------------- private void bnStart_Click(object sender, RoutedEventArgs e) { // Button selBtn = sender as Button; string sName = selBtn.Name; bool bCCW = rbDirCCW.IsChecked == true; int nRPM = 0; int.TryParse(tbRPMSet.Text, out nRPM); switch (sName) { case "bnStart": //SEQ_SPIND.fn_SetSpindleSpeed(nRPM); //SEQ_SPIND.fn_SetSpindleRun (swOn, bCW); SEQ_SPIND.fn_SetSpindleRun(nRPM, bCCW); break; case "bnStop": SEQ_SPIND.fn_SetSpindleRun(swOff); break; case "bnClamp": SEQ_SPIND.fn_MoveToolClamp(ccFwd); break; case "bnUnclamp": SEQ_SPIND.fn_MoveToolClamp(ccBwd); break; case "bnReset": SEQ_SPIND.fn_SetSpindleReset(); break; default: break; } fn_WriteLog($"Spindle Manual Button Click - [{sName}]"); }
//--------------------------------------------------------------------------- public bool fn_LotOpen(string recipe, string lotno = "") //Lot No = RFID No { //Vision Recipe Open if (g_VisionManager.fn_LoadRecipe(recipe)) { m_sRecipeName = recipe; FM._sRecipeName = recipe; m_bLotOpen = true; // SEQ_SPIND.fn_StepDataClear(); if (lotno != "") { m_sLotNo = string.Format($"[{DateTime.Now:yyMMdd}]LOT_{lotno}"); } else { m_sLotNo = string.Format($"[{DateTime.Now:yyMMdd}]LOT_{DateTime.Now:yyMMdd_HHmmss}"); } m_tStartTime = DateTime.Now; fn_WriteLog(string.Format($"[Lot Open] Recipe : {m_sRecipeName} / LOT : {m_sLotNo}")); fn_WriteLog(string.Format($"[Lot Open] Recipe : {m_sRecipeName} / LOT : {m_sLotNo}"), EN_LOG_TYPE.ltLot); m_dLotStartTime = TICK._GetTickTime(); return(true); } m_bLotOpen = false; m_sLotNo = string.Empty; return(false); }
//--------------------------------------------------------------------------- private void fn_tmOnShot(object sender, EventArgs e) { // if (SEQ._bRun) { m_nOneShotTag = -1; m_OnShotTimer.IsEnabled = false; return; } // switch ((EN_SEQ_ID)m_nOneShotTag) { case EN_SEQ_ID.SPINDLE: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.SPINDLE]) { SEQ_SPIND.fn_AutoRun(); } break; case EN_SEQ_ID.POLISH: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.POLISH]) { SEQ_POLIS.fn_AutoRun(); } break; case EN_SEQ_ID.CLEAN: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.CLEAN]) { SEQ_CLEAN.fn_AutoRun(); } break; case EN_SEQ_ID.STORAGE: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.STORAGE]) { SEQ_STORG.fn_AutoRun(); } break; case EN_SEQ_ID.TRANSFER: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.TRANSFER]) { SEQ_TRANS.fn_AutoRun(); } break; case EN_SEQ_ID.SYSTEM: break; case EN_SEQ_ID.ALL: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.SPINDLE]) { SEQ_SPIND.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.POLISH]) { SEQ_POLIS.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.CLEAN]) { SEQ_CLEAN.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.STORAGE]) { SEQ_STORG.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.TRANSFER]) { SEQ_TRANS.fn_AutoRun(); } break; default: break; } m_nOneShotTag = -1; m_OnShotTimer.IsEnabled = false; }
//--------------------------------------------------------------------------- private void btOnShot1_Click(object sender, MouseButtonEventArgs e) { // if (SEQ._bRun) { MessageBox.Show("Can not use during run.", "WARNING", MessageBoxButton.OK, MessageBoxImage.Warning); } //One Shot Button selbtn = sender as Button; int nTag = Convert.ToInt32(selbtn.Tag); if (nTag < 0) { return; } //m_nOneShotTag = nTag; //m_OnShotTimer.IsEnabled = true; // switch ((EN_SEQ_ID)nTag) { case EN_SEQ_ID.SPINDLE: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.SPINDLE]) { SEQ_SPIND.fn_AutoRun(); } break; case EN_SEQ_ID.POLISH: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.POLISH]) { SEQ_POLIS.fn_AutoRun(); } break; case EN_SEQ_ID.CLEAN: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.CLEAN]) { SEQ_CLEAN.fn_AutoRun(); } break; case EN_SEQ_ID.STORAGE: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.STORAGE]) { SEQ_STORG.fn_AutoRun(); } break; case EN_SEQ_ID.TRANSFER: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.TRANSFER]) { SEQ_TRANS.fn_AutoRun(); } break; case EN_SEQ_ID.SYSTEM: SEQ.fn_CheckRunCon(); break; case EN_SEQ_ID.ALL: if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.SPINDLE]) { SEQ_SPIND.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.POLISH]) { SEQ_POLIS.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.CLEAN]) { SEQ_CLEAN.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.STORAGE]) { SEQ_STORG.fn_AutoRun(); } if (!FM.m_stMasterOpt.bAutoOff[(int)EN_SEQ_ID.TRANSFER]) { SEQ_TRANS.fn_AutoRun(); } break; default: break; } }
//--------------------------------------------------------------------------- void fn_ManualAlign(Rect rect) { // Manual align이라고 Log 표시 할 것. (Lot Log) // - Map 바꿔줘야함 => Align을 Polishing으로. // Inposition Check해야함. int step_result = 0; //bool bErr = false; double dTiltInterpolation = 0.0; Point pntStart = new Point(); Point pntEnd = new Point(); Point pntMillingStart = new Point(); Point pntMillingEnd = new Point(); Point pntModelSpan = new Point(); //ST_RESULT Result = new ST_RESULT(); ST_VISION_RESULT stvisionResult = new ST_VISION_RESULT(0); double dPlateCenterX = MOTR[(int)EN_MOTR_ID.miSPD_X].GetPosToCmdId(EN_COMD_ID.User1); double dPlateCenterY = MOTR[(int)EN_MOTR_ID.miPOL_Y].GetPosToCmdId(EN_COMD_ID.User1); double dPlateInterpolationPosX = dPlateCenterX; double dPlateInterpolationPosY = 0.0; double dXOffset = 7; double dYOffset = 7; for (int step = 0; step < g_VisionManager.CurrentRecipe.Model[0].MillingCount; step++) { dTiltInterpolation = g_VisionManager.fn_GetTiltInterpolation(g_VisionManager.CurrentRecipe.Model[0].Milling[step].Tilt); fn_WriteLog(this.Title + $"Tilt Interpolation : {dTiltInterpolation.ToString("0.000")}", UserEnum.EN_LOG_TYPE.ltVision); pntStart.X = 0; pntStart.Y = 0; pntEnd.X = 0; pntEnd.Y = 0; SEQ_SPIND.vresult.stRecipeList[step_result].nUseMilling = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Enable; SEQ_SPIND.vresult.stRecipeList[step_result].dTilt = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Tilt; SEQ_SPIND.vresult.stRecipeList[step_result].dRPM = g_VisionManager.CurrentRecipe.Model[0].Milling[step].RPM; SEQ_SPIND.vresult.stRecipeList[step_result].dForce = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Force; SEQ_SPIND.vresult.stRecipeList[step_result].dSpeed = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Speed; SEQ_SPIND.vresult.stRecipeList[step_result].dPitch = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Pitch; SEQ_SPIND.vresult.stRecipeList[step_result].nPathCnt = g_VisionManager.CurrentRecipe.Model[0].Milling[step].PathCount; SEQ_SPIND.vresult.stRecipeList[step_result].nCycle = g_VisionManager.CurrentRecipe.Model[0].Milling[step].Cycle; SEQ_SPIND.vresult.stRecipeList[step_result].nUtilType = g_VisionManager.CurrentRecipe.Model[0].Milling[step].UtilType; SEQ_SPIND.vresult.stRecipeList[step_result].nUseUtilFill = g_VisionManager.CurrentRecipe.Model[0].Milling[step].UtilFill; SEQ_SPIND.vresult.stRecipeList[step_result].nUseUtilDrain = g_VisionManager.CurrentRecipe.Model[0].Milling[step].UtilDrain; SEQ_SPIND.vresult.stRecipeList[step_result].nUseImage = g_VisionManager.CurrentRecipe.Model[0].Milling[step].MillingImage; SEQ_SPIND.vresult.stRecipeList[step_result].nUseEPD = g_VisionManager.CurrentRecipe.Model[0].Milling[step].EPD; SEQ_SPIND.vresult.stRecipeList[step_result].nUseToolChg = g_VisionManager.CurrentRecipe.Model[0].Milling[step].ToolChange; SEQ_SPIND.vresult.stRecipeList[step_result].nToolType = g_VisionManager.CurrentRecipe.Model[0].Milling[step].ToolType; SEQ_SPIND.vresult.stRecipeList[step_result].dTiltOffset = dTiltInterpolation; //vs.stRecipeList[step_result].nUtility = CurrentRecipe.Model[nModelNum].Milling[step].Util; // Milling Rect의 좌상단 좌표 1사분면으로 변환. (Start End Position 계산 때문에 Rect 중심계산 생략) pntMillingStart = fn_GetPositionFromImageCenter( new Point( g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.Left, g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.Top) , g_VisionManager._RecipeVision.CamWidth, g_VisionManager._RecipeVision.CamHeight); pntMillingEnd = fn_GetPositionFromImageCenter( new Point( g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.Right, g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.Bottom) , g_VisionManager._RecipeVision.CamWidth, g_VisionManager._RecipeVision.CamHeight); fn_WriteLog(this.Title + $"Manual Align Step : {step}, MilPx X: {g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.X.ToString("0.000")}, MilPx Y: {g_VisionManager.CurrentRecipe.Model[0].Milling[step].MilRect.Y.ToString("0.000")}, pntMilling : S({pntMillingStart.X.ToString("0.000")}, {pntMillingStart.Y.ToString("0.000")}), E({pntMillingEnd.X.ToString("0.000")}, {pntMillingEnd.Y.ToString("0.000")})", UserEnum.EN_LOG_TYPE.ltVision); //--------------------------------------------------------------------------- // Tilt 보상 적용 할 것. //--------------------------------------------------------------------------- // Position 계산. // Left pntStart.X = pntMillingStart.X + pntModelSpan.X; pntStart.X *= (g_VisionManager._RecipeVision.ResolutionX / 1000.0); // um -> mm // Top pntStart.Y = pntMillingStart.Y + pntModelSpan.Y; pntStart.Y *= (g_VisionManager._RecipeVision.ResolutionY / 1000.0); // um -> mm pntStart.Y += dTiltInterpolation; // (mm Scale) // Right pntEnd.X = pntMillingEnd.X + pntModelSpan.X; pntEnd.X *= (g_VisionManager._RecipeVision.ResolutionX / 1000.0); // um -> mm // Bottom pntEnd.Y = pntMillingEnd.Y + pntModelSpan.Y; pntEnd.Y *= (g_VisionManager._RecipeVision.ResolutionY / 1000.0); // um -> mm pntEnd.Y += dTiltInterpolation; // (mm Scale) fn_WriteLog(this.Title + $"pntStart : ({pntStart.X.ToString("0.000")}, {pntStart.Y.ToString("0.000")}), pntEnd : ({pntEnd.X.ToString("0.000")}, {pntEnd.Y.ToString("0.000")})", UserEnum.EN_LOG_TYPE.ltVision); // Start Position Direction Calculation. switch (g_VisionManager.CurrentRecipe.Model[0].Milling[step].StartPos) { // Left-Bottom case 0: SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.X = pntStart.X; SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.Y = pntEnd.Y; SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.X = pntEnd.X; SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.Y = pntStart.Y; break; // Right-Bottom case 1: SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.X = pntEnd.X; SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.Y = pntEnd.Y; SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.X = pntStart.X; SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.Y = pntStart.Y; break; } fn_WriteLog(this.Title + $"End Direction : ({SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.X}, {SEQ_SPIND.vresult.stRecipeList[step_result].pStartPos.Y}), pntEnd : ({SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.X}, {SEQ_SPIND.vresult.stRecipeList[step_result].pEndPos.Y})", UserEnum.EN_LOG_TYPE.ltVision); //--------------------------------------------------------------------------- // Theta //--------------------------------------------------------------------------- SEQ_SPIND.vresult.stRecipeList[step_result].dTheta = 0; //--------------------------------------------------------------------------- step_result++; } //--------------------------------------------------------------------------- // 좌표계 변환. => Cam 기준 상대좌표. (3사분면 좌표계) stvisionResult.pntModel.X *= g_VisionManager._RecipeVision.ResolutionX / 1000.0; stvisionResult.pntModel.Y *= g_VisionManager._RecipeVision.ResolutionY / 1000.0; //--------------------------------------------------------------------------- int nTotal = stvisionResult.nTotalStep; double dXpos = MOTR.GetEncPos(EN_MOTR_ID.miSPD_X); double dYpos = MOTR.GetEncPos(EN_MOTR_ID.miPOL_Y); double dTHpos = MOTR.GetEncPos(EN_MOTR_ID.miPOL_TH); //Save X,Y Value for (int n = 0; n < nTotal; n++) { // + (Spindle) // □ (Cam) // Spindle X Pos Value > Cam X Pos Value // Spindle이 더가야하므로 Offset + 부호 // + (Spindle) // □ (Cam) // Spindle X Pos Value < Cam X Pos Value // Spindle이 덜가야하므로 Offset - 부호 stvisionResult.stRecipeList[n].dStartX = dXpos - stvisionResult.stRecipeList[n].pStartPos.X + g_VisionManager._RecipeVision.SpindleOffsetX; stvisionResult.stRecipeList[n].dEndX = dXpos - stvisionResult.stRecipeList[n].pEndPos.X + g_VisionManager._RecipeVision.SpindleOffsetX; stvisionResult.stRecipeList[n].dStartY = dYpos + stvisionResult.stRecipeList[n].pStartPos.Y - g_VisionManager._RecipeVision.SpindleOffsetY; stvisionResult.stRecipeList[n].dEndY = dYpos + stvisionResult.stRecipeList[n].pEndPos.Y - g_VisionManager._RecipeVision.SpindleOffsetY; fn_WriteLog($"-----------------------------Result Process------------------------", EN_LOG_TYPE.ltVision); fn_WriteLog($"{n} - Start Pos : {stvisionResult.stRecipeList[n].dStartX}, {stvisionResult.stRecipeList[n].dStartY}", EN_LOG_TYPE.ltVision); fn_WriteLog($"{n} - End Pos : {stvisionResult.stRecipeList[n].dEndX}, {stvisionResult.stRecipeList[n].dEndY}", EN_LOG_TYPE.ltVision); stvisionResult.stRecipeList[n].dPosTH = dTHpos; //--------------------------------------------------------------------------- // System Offset //--------------------------------------------------------------------------- stvisionResult.stRecipeList[n].dStartX += FM.m_stProjectBase.dPolishOffset_X; stvisionResult.stRecipeList[n].dEndX += FM.m_stProjectBase.dPolishOffset_X; stvisionResult.stRecipeList[n].dStartY += FM.m_stProjectBase.dPolishOffset_Y; stvisionResult.stRecipeList[n].dEndX += FM.m_stProjectBase.dPolishOffset_Y; stvisionResult.stRecipeList[n].dTilt += FM.m_stProjectBase.dPolishOffset_TI; //--------------------------------------------------------------------------- // Theta Offset 은 추가 스탭 작업 요함. // => Theta 가공은 Align 이후 특정 각도를 돌려서 가공을 하기위함 이므로. //stvisionResult.stRecipeList[n].dPosTH += FM.m_stProjectBase.dPolishOffset_TH; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Vision Align InPosition Error //--------------------------------------------------------------------------- // Interpolation Tilt. dPlateInterpolationPosY = dPlateCenterY + g_VisionManager.fn_GetTiltInterpolation(stvisionResult.stRecipeList[n].dTilt); //vresult.stRecipeList[n].dTiltOffset = g_VisionManager.fn_GetTiltInterpolation(stvisionResult.stRecipeList[n].dTilt); //Console.WriteLine($"TiltOffset- Offset - {n}:{stvisionResult.stRecipeList[n].dTiltOffset}, Tilt : {stvisionResult.stRecipeList[n].dTilt}"); //fn_WriteLog($"TiltOffset- Offset - {n}:{stvisionResult.stRecipeList[n].dTiltOffset}, Tilt : {stvisionResult.stRecipeList[n].dTilt}"); if (stvisionResult.stRecipeList[n].dStartX <dPlateInterpolationPosX - dXOffset || stvisionResult.stRecipeList[n].dStartX> dPlateInterpolationPosX + dXOffset) { fn_WriteLog($"Start X InPosition Error.{n}", EN_LOG_TYPE.ltVision); //bErr = true; } if (stvisionResult.stRecipeList[n].dEndX <dPlateInterpolationPosX - dXOffset || stvisionResult.stRecipeList[n].dEndX> dPlateInterpolationPosX + dXOffset) { //bErr = true; } if (stvisionResult.stRecipeList[n].dStartY <dPlateInterpolationPosY - dYOffset || stvisionResult.stRecipeList[n].dStartY> dPlateInterpolationPosY + dYOffset) { //bErr = true; } if (stvisionResult.stRecipeList[n].dEndY <dPlateInterpolationPosY - dYOffset || stvisionResult.stRecipeList[n].dEndY> dPlateInterpolationPosY + dYOffset) { //bErr = true; } } //File Save SEQ_SPIND.fn_LoadVisnResult(false); DM.MAGA[(int)EN_MAGA_ID.POLISH].SetTo((int)EN_PLATE_STAT.ptsPolish); }
private void fn_tmUpdate(object sender, EventArgs e) { //Timer //m_UpdateTimer.Stop(); m_UpdateTimer.IsEnabled = false; //Update Tool Info DM.STOR[(int)EN_STOR_ID.POLISH].fn_UpdateMap(ref lbStorg); DM.STOR[(int)EN_STOR_ID.CLEAN].fn_UpdateMap(ref lbStorg1); //Plate DM.MAGA[(int)EN_MAGA_ID.POLISH].fn_UpdateMap(ref lbPoliPlate); DM.MAGA[(int)EN_MAGA_ID.CLEAN].fn_UpdateMap(ref lbClenPlate); DM.MAGA[(int)EN_MAGA_ID.LOAD].fn_UpdateMap(ref lbLoadPlate); DM.MAGA[(int)EN_MAGA_ID.TRANS].fn_UpdateMap(ref lbTransPlate); //Magazine DM.MAGA[(int)EN_MAGA_ID.MAGA01].fn_UpdateMap(ref lbMagz01); DM.MAGA[(int)EN_MAGA_ID.MAGA02].fn_UpdateMap(ref lbMagz02); // DM.TOOL.fn_UpdateMap(ref lbSpdlPlate, ref lbSpdlTool, ref lbSpdlToolFce, ref lbNeedCheck); lbCrntRcpName.Text = string.Format("[{0}] {1}", LOT._bLotOpen ? "OPEN" : "", FM._sRecipeName); //lbCrntRcpName.Background = LOT._bLotOpen? Brushes.Lime : Brushes.WhiteSmoke; //SEQ._bRecipeOpen lbRcp.Background = LOT._bLotOpen ? Brushes.LimeGreen : Brushes.WhiteSmoke; lbReqPoli.Background = SEQ_SPIND._bReqUtil_Polish ? Brushes.Lime : Brushes.LightGray; lbReqPoli.Visibility = FM.fn_IsLvlMaster() ? Visibility.Visible : Visibility.Hidden; //JUNG/210113 lbSpdlToolFce.Visibility = FM.fn_IsLvlMaster() ? Visibility.Visible : Visibility.Hidden; lbNeedCheck.Visibility = FM.fn_IsLvlMaster() ? Visibility.Visible : Visibility.Hidden; //LDCBTM._dLoadCellValue * ONEGRAM_TO_NEWTON upLoadCell.UPValue = string.Format($"{LDCBTM.fn_GetBtmLoadCell(true)} N [{LDCBTM.fn_GetBtmLoadCell()} g]"); lbRPM.Content = string.Format("SPINDLE RPM : {0} / {1}", SEQ_SPIND.fn_GetSpindleSpeed(), SEQ_SPIND.fn_GetSpindleDir() ? "DIR : FWD" : "DIR : BWD"); //lbCrntFos.Content = string.Format($"[LOAD CELL] TOP : {IO.fn_GetTopLoadCell(true)} N"); lbCrntFos.Content = string.Format($"[LOAD CELL] TOP : {IO.fn_GetTopLoadCellAsBTM(true)} N"); //JUNG/200910/ lbUTLevel.Content = string.Format($"UTIL LEVEL : {IO.fn_GetUTAvgValue():F1}"); //JUNG/200423/Avg Value //JUNG/201119/Min,Max Reset if (SEQ_SPIND._bReqResetGraph) { SEQ_SPIND._bReqResetGraph = false; fn_SetGraphRange(); } // AddGraph if (nGraphTick > ug_LoadCellTop.UGDataCount) { ug_LoadCellTop.RemoveFirst(); } double dTopLoadCell = IO.fn_GetTopLoadCellAsBTM(true); //IO.fn_GetTopLoadCell(true); ug_LoadCellTop.UGValue = $"{dTopLoadCell} N"; //ug_LoadCellTop.UGMaxValue = 10; ug_LoadCellTop.AddPoint(new Point(nGraphTick++, dTopLoadCell)); ug_LoadCellTop.Refresh(); lbDCOM.Content = string.Format($"[DCOM] SET: {SEQ_SPIND._dForceRatio:F2} / READ: {IO.fn_GetDCOMValue()}"); if (SEQ_SPIND._bDrngPolishing) { lbPoliCnt.Content = string.Format($"POLISHING COUNT : {SEQ_SPIND.fn_GetCurrMillCnt(true)} / CYCLE: {SEQ_SPIND._nPolCycle+1} / STEP : {SEQ_SPIND._nPoliCnt+1}"); } else if (SEQ_SPIND._bDrngCleaning) { lbPoliCnt.Content = string.Format($"CLEANING COUNT : {SEQ_SPIND.fn_GetCurrMillCnt(true)} / CYCLE : {SEQ_SPIND._nClnCycle+1} / STEP : {SEQ_SPIND._nPoliCnt+1}"); } //lbFlowMT1.Content = string.Format($"[FLOW] POLISHING SLURY : {IO.fn_GetFlowMeter(EN_AINPUT_ID.aiPOL_SlurryFlow ):F1}"); //lbFlowMT2.Content = string.Format($"[FLOW] POLISHING DI : {IO.fn_GetFlowMeter(EN_AINPUT_ID.aiPOL_DIWaterFlow):F1}"); //lbFlowMT3.Content = string.Format($"[FLOW] CLEANING DI : {IO.fn_GetFlowMeter(EN_AINPUT_ID.aiCLN_DIWaterFlow):F1}"); lbLotNo.Text = string.Format($"LOT No : {LOT._sLotNo}"); lbStartTime.Content = string.Format($"[TOTAL] START TIME : {SEQ_TRANS._sStartTime}"); lbEndTime.Content = string.Format($"[TOTAL] END TIME : { SEQ_TRANS._sEndTime }"); lbMillStartTime.Content = (SEQ._bFlick3) ? string.Format($"[POL]START TIME : {SEQ_SPIND._sMillStartTime}") : string.Format($"[CLN]START TIME : {SEQ_SPIND._sCleanStartTime}"); lbMillEndTime.Content = (SEQ._bFlick3) ? string.Format($"[POL]END TIME : {SEQ_SPIND._sMillEndTime}") : string.Format($"[CLN]END TIME : { SEQ_SPIND._sCleanEndTime }"); if (SEQ_SPIND._bDrngPolishing) { pbPoli.Visibility = Visibility.Visible; tbPolibar.Visibility = Visibility.Visible; pbPoli.Value = SEQ_SPIND.fn_GetMillPercent(); } else { pbPoli.Visibility = Visibility.Hidden; tbPolibar.Visibility = Visibility.Hidden; } if (SEQ_SPIND._bDrngCleaning) { //pbClen .Visibility = Visibility.Hidden; //삭제 //tbClenbar.Visibility = Visibility.Hidden; //pbClen.Value = ((IO.DATA_ACS_TO_EQ[(int)EN_ACS_TO_EQ.ATE_Milling_Cnt] + (100 * SEQ_SPIND._nCleanCnt)) / 400.0) * 100.0; } else { pbClen.Visibility = Visibility.Hidden; tbClenbar.Visibility = Visibility.Hidden; } // lbSpdlState.Content = SEQ_SPIND.fn_GetSeqMsg(); lbPoliState.Content = SEQ_POLIS.fn_GetSeqMsg(); lbClenState.Content = SEQ_CLEAN.fn_GetSeqMsg(); lbTranState.Content = SEQ_TRANS.fn_GetSeqMsg(); // //m_UpdateTimer.Start(); m_UpdateTimer.IsEnabled = true; }