//--------------------------------------------------------------------------- private void DataGrid_MotorStatus_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!m_bConnect || m_nAxis < 0) { return; } m_nAxis = DataGrid_MotorStatus.SelectedIndex; // if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)m_nAxis)) { return; } m_dCmd = Math.Round(mc_Acs.fn_GetTargetPosition(m_nAxis), 3); m_dEnc = Math.Round(mc_Acs.fn_GetEncoderPosition(m_nAxis), 3); m_dJerk = Math.Round(mc_Acs.fn_GetParameterJerk(m_nAxis), 3); m_dVel = Math.Round(mc_Acs.fn_GetParameterVelocity(m_nAxis), 3); m_dAcc = Math.Round(mc_Acs.fn_GetParameterAcceleration(m_nAxis), 3); m_dDec = Math.Round(mc_Acs.fn_GetParameterAcceleration(m_nAxis), 3); TextBox_Cmd.Text = Convert.ToString(m_dCmd); TextBox_Enc.Text = Convert.ToString(m_dEnc); TextBox_Jerk.Text = Convert.ToString(m_dJerk); TextBox_Vel.Text = Convert.ToString(m_dVel); TextBox_Acc.Text = Convert.ToString(m_dAcc); TextBox_Dec.Text = Convert.ToString(m_dDec); }
//--------------------------------------------------------------------------- private void btHomeOffset_Click(object sender, RoutedEventArgs e) { // MOTR.InitHomeOffset(); fn_WriteLog("[MASTER] ACS Home Offset Clear."); }
//--------------------------------------------------------------------------- private void btJOGN_Click(object sender, RoutedEventArgs e) { if (m_nSelMotr < 0) { return; } if (DownBtn == null) { MOTR.Stop((EN_MOTR_ID)m_nSelMotr); return; } // switch (DownBtn.Name) { case "btJOGN": MOTR.MoveJog((EN_MOTR_ID)m_nSelMotr, false); break; case "btJOGP": MOTR.MoveJog((EN_MOTR_ID)m_nSelMotr, true); break; default: MOTR.Stop((EN_MOTR_ID)m_nSelMotr); break; } }
//--------------------------------------------------------------------------- private void btMoveN01_Click(object sender, RoutedEventArgs e) { // if (m_nSelMotr < 0) { return; } if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)m_nSelMotr)) { return; //JUNG/200608 } Button selbtn = sender as Button; switch (selbtn.Name) { default: break; case "btMoveN01": IO.fn_MovePTP_R(m_nSelMotr, -0.1); break; case "btMoveN10": IO.fn_MovePTP_R(m_nSelMotr, -1.0); break; case "btMoveP01": IO.fn_MovePTP_R(m_nSelMotr, +0.1); break; case "btMoveP10": IO.fn_MovePTP_R(m_nSelMotr, +1.0); break; } }
//--------------------------------------------------------------------------- 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 menuSave_Click(object sender, RoutedEventArgs e) { //Run Check if (SEQ._bAuto || SEQ._bRun) { return; } //Save switch ((EN_PAGE)m_nNowPage) { case EN_PAGE.IO: IO.fn_LoadIO(false); fn_WriteLog("[Setting Save] IO"); break; case EN_PAGE.OPTION: mc_Option.fn_DisplayOptionData(false); fn_WriteLog("[Setting Save] OPTION"); break; case EN_PAGE.VISION: fn_WriteLog("[Setting Save] VISION"); break; case EN_PAGE.ERROR: EPU.fn_LoadErrorData(false); fn_WriteLog("[Setting Save] ERROR"); break; case EN_PAGE.MOTOR: mc_Motor.fn_GridToBuff(); MOTR.Load(false, FM._sCurrJob); FM.fn_LoadMastOptn(false); //JUNG/200723 fn_WriteLog("[Setting Save] MOTOR"); break; case EN_PAGE.LAMP: mc_Lamp.fn_GridToBuff(); LAMP.fn_Load(false); fn_WriteLog("[Setting Save] LAMP"); break; case EN_PAGE.ACTUATOR: mc_Actr.fn_GridToBuff(); ACTR.fn_Load(false); fn_WriteLog("[Setting Save] ACTUATOR"); break; default: break; } }
//--------------------------------------------------------------------------- //MANUAL, Sequence private void THREAD_PROCESS_2() { bool bGo = false; double Start = 0; double Scan = 0; // try { while (m_bThreadRun[TH2]) { Thread.Sleep(1); if (!bGo) { Start = TICK._GetTickTime(); m_bWatchDog[TH2] = false; //Motor Data Update MOTR.fn_Update(SEQ._bRun); m_bWatchDog[TH2] = true; Scan = TICK._GetTickTime() - Start; bGo = true; m_tDelayTimer[TH2].Clear(); } if (Scan < THREAD_INTERVAL2) { if (!m_tDelayTimer[TH2].OnDelay(bGo, THREAD_INTERVAL2 - Scan)) { continue; } } bGo = false; //Scan Time Check m_nScanTime [TH2] = (uint)(TICK._GetTickTime() - m_nStartTime[TH2]); m_nStartTime[TH2] = (uint)TICK._GetTickTime(); } } catch (System.Exception ex) { m_bWatchDog[TH2] = false; System.Diagnostics.Trace.WriteLine(ex.Message); LOG.ExceptionTrace("[THREAD_PROCESS_2]", ex); } }
//--------------------------------------------------------------------------- private void UserButton_Click_5(object sender, RoutedEventArgs e) { if (!m_bConnect || m_nAxis < 0) { return; } //All Servo Off mc_Acs.fn_SetDisableAll(); // MOTR.fn_SetDisableSMC(); }
//--------------------------------------------------------------------------- private void btJOGP_PreviewMouseUp(object sender, MouseButtonEventArgs e) { if (m_nSelMotr < 0) { return; } // m_bDrngDown = false; DownBtn = null; MAN._bJog = false; MOTR.Stop((EN_MOTR_ID)m_nSelMotr); }
//--------------------------------------------------------------------------- private void Page_Loaded(object sender, RoutedEventArgs e) { m_UpdateTimer.IsEnabled = true; m_UpdateTimer.Start(); m_bConnect = MOTR._bConnect; // if (AcsApi == null) { AcsApi = MOTR.fn_GetAPI(); mc_Acs = new ACSControl(AcsApi); } }
//--------------------------------------------------------------------------- private void UserButton_Click_1(object sender, RoutedEventArgs e) { if (!m_bConnect || m_nAxis < 0) { return; } if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)m_nAxis)) { MOTR.SetServo((EN_MOTR_ID)m_nAxis, false); } else { mc_Acs.fn_SetDisabled(m_nAxis); } }
//--------------------------------------------------------------------------- private void btMove_PreviewMouseDown(object sender, MouseButtonEventArgs e) { if (!double.TryParse(tbSetPos.Text, out double dPos)) { return; } if (dPos < 0) { return; } MAN._dDirectPos = dPos; int nManNo = (int)MOTR.ManNoDirect(EN_MOTR_ID.miSPD_X) + (25 * m_nSelMotr); MAN.fn_ManProcOn(nManNo, true, false); }
private void UserButton_Click_4(object sender, RoutedEventArgs e) { if (!m_bConnect || m_nAxis < 0) { return; } for (int i = 0; i < motStatusdataTable.Rows.Count; i++) { if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)m_nAxis)) { continue; } mc_Acs.fn_SetEnabled(i); } MOTR.fn_SetEnableSMC(); }
//------------------------------------------------------------------------------------------------- private void fn_UpdateMotorParameter() { for (int i = 0; i < motParameterdataTable.Rows.Count; i++) { // if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)i)) { continue; } motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.VEL] = Math.Round(mc_Acs.fn_GetParameterVelocity(i), 3); motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.JERK] = Math.Round(mc_Acs.fn_GetParameterJerk(i), 3); motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.ACC] = Math.Round(mc_Acs.fn_GetParameterAcceleration(i), 3); motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.DEC] = Math.Round(mc_Acs.fn_GetParameterDeceleration(i), 3); motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.KDEC] = Math.Round(mc_Acs.fn_GetParameterKillDeceleration(i), 3); if (mc_Acs.fn_GetStateSoftwareRightLimit(i)) { motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.SWPOT] = "ON"; motParameterdataTable.Rows[i]["POTBACK"] = "Red"; } else { motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.SWPOT] = "OFF"; motParameterdataTable.Rows[i]["POTBACK"] = "LightGray"; } if (mc_Acs.fn_GetStateSoftwareLeftLimit(i)) { motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.SWNOT] = "ON"; motParameterdataTable.Rows[i]["NOTBACK"] = "Red"; } else { motParameterdataTable.Rows[i][(int)EN_MOTOR_PARAMETER.SWNOT] = "OFF"; motParameterdataTable.Rows[i]["NOTBACK"] = "LightGray"; } } }
//--------------------------------------------------------------------------- private void fn_tmUpdate(object sender, EventArgs e) { // m_UpdateTimer.Stop(); if (m_bDrngDown) { DownBtn.PerformClick(); } m_nSelMotr = cbMotr.SelectedIndex; if (m_nSelMotr >= 0) { lbCmdPos.Content = MOTR.GetCmdPos((EN_MOTR_ID)m_nSelMotr); lbEncPos.Content = MOTR.GetEncPos((EN_MOTR_ID)m_nSelMotr); } if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)m_nSelMotr)) //JUNG/200608 { btMoveN01.IsEnabled = false; btMoveN10.IsEnabled = false; btMoveP01.IsEnabled = false; btMoveP10.IsEnabled = false; } else { btMoveN01.IsEnabled = true; btMoveN10.IsEnabled = true; btMoveP01.IsEnabled = true; btMoveP10.IsEnabled = true; } m_UpdateTimer.Start(); }
//--------------------------------------------------------------------------- //Update Timer private void fn_tmUpdate(object sender, EventArgs e) { // //m_UpdateTimer.Stop(); m_UpdateTimer.IsEnabled = false; //Error Check EPU.fn_ErrorDisplay(); //Run Status fn_SetLabelColor(ref lbRun, SEQ._bRun, Brushes.Green, Brushes.DarkGray); fn_SetLabelText(ref lbRun, SEQ._bRun, "RUN", "STOP", Brushes.Black, Brushes.Chocolate); // bool a = SEQ._bRun && SEQ_CLEAN._bDrngCleaning && SEQ_CLEAN._bDrngRotateHome; bool b = (MOTR.IsAllHomeEnd() && MOTR.IsAllServoOn()) || a; //fn_SetLabelColor(ref btAllHome, MOTOR.IsAllHome(), Brushes.Lime, Brushes.LightGray); fn_SetLabel(ref lbAllHome, b? "ALL HOME" : "NEED INIT...", b ? Brushes.White : Brushes.Brown, b ? Brushes.Black : SEQ._bFlick1? Brushes.Aqua : Brushes.Yellow); fn_SetLabelColor(ref lbAuto, SEQ._bAuto, Brushes.Green, Brushes.DarkBlue); lbAuto.Content = SEQ._bAuto ? "AUTO" : "MANUAL"; lbAuto.Foreground = SEQ._bAuto ? Brushes.Black : Brushes.LightYellow; // btDoor_O.IsEnabled = !SEQ._bRun; btDoor_C.IsEnabled = !SEQ._bRun; lbAllHome.IsEnabled = !SEQ._bRun; lbAuto.IsEnabled = !SEQ._bRun; //btSDoor_O.IsEnabled = !SEQ._bRun; //btSDoor_C.IsEnabled = !SEQ._bRun; //btReset.Background = EPU.fn_GetHasErr()? Brushes.Green : SEQ._bFlick1 ? Brushes.Gray : Brushes.Yellow; //btDoor_O.Background = (!IO.XV[(int)EN_INPUT_ID.xSYS_DR_Right_KeyIn] || !IO.XV[(int)EN_INPUT_ID.xSYS_DR_Left_KeyIn]) ? Brushes.MintCream : Brushes.MintCream; //btDoor_C.Background = ( IO.XV[(int)EN_INPUT_ID.xSYS_DR_Right_KeyIn ] && IO.XV[(int)EN_INPUT_ID.xSYS_DR_Left_KeyIn]) ? Brushes.MintCream : Brushes.MintCream; bool bDoorOutput = IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_FrontLeft] || IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_FrontRight] || IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_Side]; bool bDoorKeyIn = IO.XV[(int)EN_INPUT_ID.xSYS_DR_Right_KeyIn] && IO.XV[(int)EN_INPUT_ID.xSYS_DR_Left_KeyIn] && IO.XV[(int)EN_INPUT_ID.xSYS_DR_SideDoor_KeyIn]; bool bDoorActrOk = IO.XV[(int)EN_INPUT_ID.xSYS_DR_MainClose_R] && IO.XV[(int)EN_INPUT_ID.xSYS_DR_MainClose_L] && IO.XV[(int)EN_INPUT_ID.xSYS_DR_SideDoorClose]; btDoor_O.Background = (!bDoorOutput && bDoorKeyIn && bDoorActrOk) ? G_COLOR_BTNNORMAL : Brushes.Lime; //JUNG/200525/삭제 //bool bDoorY = IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_FrontLeft] == true || IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_FrontRight] == true || // IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_Side ] == true; //btDoor_O .Background = bDoorY ? Brushes.Gray : Brushes.WhiteSmoke; //btSDoor_O.Background = ( IO.YV[(int)EN_OUTPUT_ID.ySYS_Door_Side ] == true) ? Brushes.Gray : Brushes.WhiteSmoke; // btLight.Background = IO.YV[(int)EN_OUTPUT_ID.ySYS_Light]? Brushes.Lime : new SolidColorBrush(Color.FromArgb(0xFF, 0xF7, 0xF7, 0xF7)); // m_UpdateTimer.IsEnabled = true; }
//--------------------------------------------------------------------------- public void fn_SaveToBuff() { for (int i = 0; i < MOTR.GetPartCnt(); i++) { FM.m_stMasterOpt.bAutoOff[i] = (bool)cbOffAR[i].IsChecked; } if (rbAuto.IsChecked == true) { FM.m_stMasterOpt.nRunMode = EN_RUN_MODE.AUTO_MODE; } else if (rbTEST.IsChecked == true) { FM.m_stMasterOpt.nRunMode = EN_RUN_MODE.TEST_MODE; } else if (rbMAN.IsChecked == true) { FM.m_stMasterOpt.nRunMode = EN_RUN_MODE.MAN_MODE; } FM.m_stMasterOpt.nUseSkipDoor = cbSkipDoor.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipLeak = cbSkipLeak.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipFan = cbSkipFan.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipAir = cbSkipAir.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipWaterLvl = cbSkipWtLvl.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipWaterLeak = cbSkipWtLeak.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipAccura = cbSkipAccura.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseSkipDP = cbSkipDP.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nToolSkip = cbSkipTool.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nPlateSkip = cbSkipPlate.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nStorageSkip = cbSkipStrg.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nMagaSkip = cbSkipMaga.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseVision = cbUseVisn.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseDirPos = cbUseDirPos.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseCalForce = cbUseCalFoc.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseRESTApi = cbUseREST.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseDI = cbUseOnlyDI.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nEPDOnlyMeasure = cbEPDOnlyMeasure.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseMOC = cbUseMOC.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseCleanPos = cbUseCleanPos.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUsePMC = cbUsePMC.IsChecked == true ? 1 : 0; FM.m_stMasterOpt.nUseDCOMReset = cbUseDCOMRst.IsChecked == true ? 1 : 0; //FM.m_stMasterOpt.nUseAutoSlury = cbUseAutoSlry.IsChecked == true ? 1 : 0; // int.TryParse(tbDrainTime.Text, out FM.m_stMasterOpt.nDrainTime); int.TryParse(tbSepBlowTime.Text, out FM.m_stMasterOpt.nSepBlowTime); int.TryParse(tbSuckBackTime.Text, out FM.m_stMasterOpt.nSuckBackTime); double.TryParse(tbTrPickOffset.Text, out FM.m_stMasterOpt.dPickOffset); double.TryParse(tbTrPlaceOffset.Text, out FM.m_stMasterOpt.dPlaceOffset); int.TryParse(tbUtilTimeout.Text, out FM.m_stMasterOpt.nUtilMaxTime); int.TryParse(tbDCOMCnt.Text, out FM.m_stMasterOpt.nDCOMCnt); double.TryParse(tbYIntercept.Text, out FM.m_stMasterOpt.dYIntercept); double.TryParse(tbYSlope.Text, out FM.m_stMasterOpt.dYSlope); double.TryParse(tbforceOffset.Text, out FM.m_stMasterOpt.dforceOffset); double.TryParse(tbYInterceptBT.Text, out FM.m_stMasterOpt.dYInterceptBT); //JUNG/200908 double.TryParse(tbYSlopeBT.Text, out FM.m_stMasterOpt.dYSlopeBT); double.TryParse(tbDCOMRatio.Text, out FM.m_stMasterOpt.dDCOMRatio); double.TryParse(tbSpdOffset.Text, out FM.m_stMasterOpt.dSpdOffset); double.TryParse(tbCalStart.Text, out FM.m_stMasterOpt.dStartDCOM); //double.TryParse(tbLDCBtmOffset .Text, out FM.m_stMasterOpt.dLDCBtmOffset); // FM.fn_LoadMastOptn(false); //JUNG/200511 }
//--------------------------------------------------------------------------- private void Page_Loaded(object sender, RoutedEventArgs e) { for (int i = 0; i < MOTR.GetPartCnt(); i++) { if (i == 0) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 1) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 2) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 3) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 4) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 5) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 6) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 7) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 8) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } if (i == 9) { cbOffAR[i].Visibility = Visibility.Visible; cbOffAR[i].Content = MOTR.fn_GetPartName(i); cbOffAR[i].IsChecked = FM.m_stMasterOpt.bAutoOff[i]; } } if (FM.m_stMasterOpt.nRunMode == EN_RUN_MODE.AUTO_MODE) { rbAuto.IsChecked = true; } else if (FM.m_stMasterOpt.nRunMode == EN_RUN_MODE.TEST_MODE) { rbTEST.IsChecked = true; } else if (FM.m_stMasterOpt.nRunMode == EN_RUN_MODE.MAN_MODE) { rbMAN.IsChecked = true; } cbSkipDoor.IsChecked = (FM.m_stMasterOpt.nUseSkipDoor == 1) ? true : false; cbSkipLeak.IsChecked = (FM.m_stMasterOpt.nUseSkipLeak == 1) ? true : false; cbSkipFan.IsChecked = (FM.m_stMasterOpt.nUseSkipFan == 1) ? true : false; cbSkipAir.IsChecked = (FM.m_stMasterOpt.nUseSkipAir == 1) ? true : false; cbSkipWtLvl.IsChecked = (FM.m_stMasterOpt.nUseSkipWaterLvl == 1) ? true : false; cbSkipWtLeak.IsChecked = (FM.m_stMasterOpt.nUseSkipWaterLeak == 1) ? true : false; cbSkipAccura.IsChecked = (FM.m_stMasterOpt.nUseSkipAccura == 1) ? true : false; cbSkipDP.IsChecked = (FM.m_stMasterOpt.nUseSkipDP == 1) ? true : false; cbSkipTool.IsChecked = (FM.m_stMasterOpt.nToolSkip == 1) ? true : false; cbSkipPlate.IsChecked = (FM.m_stMasterOpt.nPlateSkip == 1) ? true : false; cbSkipStrg.IsChecked = (FM.m_stMasterOpt.nStorageSkip == 1) ? true : false; cbSkipMaga.IsChecked = (FM.m_stMasterOpt.nMagaSkip == 1) ? true : false; cbUseVisn.IsChecked = (FM.m_stMasterOpt.nUseVision == 1) ? true : false; cbUseDirPos.IsChecked = (FM.m_stMasterOpt.nUseDirPos == 1) ? true : false; cbUseCalFoc.IsChecked = (FM.m_stMasterOpt.nUseCalForce == 1) ? true : false; cbUseREST.IsChecked = (FM.m_stMasterOpt.nUseRESTApi == 1) ? true : false; cbUseOnlyDI.IsChecked = (FM.m_stMasterOpt.nUseDI == 1) ? true : false; cbEPDOnlyMeasure.IsChecked = (FM.m_stMasterOpt.nEPDOnlyMeasure == 1) ? true : false; cbUseMOC.IsChecked = (FM.m_stMasterOpt.nUseMOC == 1) ? true : false; cbUseCleanPos.IsChecked = (FM.m_stMasterOpt.nUseCleanPos == 1) ? true : false; cbUsePMC.IsChecked = (FM.m_stMasterOpt.nUsePMC == 1) ? true : false; cbUseDCOMRst.IsChecked = (FM.m_stMasterOpt.nUseDCOMReset == 1) ? true : false; //cbUseAutoSlry.IsChecked = (FM.m_stMasterOpt.nUseAutoSlury == 1) ? true : false; // tbDrainTime.Text = FM.m_stMasterOpt.nDrainTime.ToString(); tbSepBlowTime.Text = FM.m_stMasterOpt.nSepBlowTime.ToString(); tbSuckBackTime.Text = FM.m_stMasterOpt.nSuckBackTime.ToString(); tbTopOffset.Text = FM.m_stMasterOpt.dUtilOffset.ToString(); tbTrPickOffset.Text = FM.m_stMasterOpt.dPickOffset.ToString(); tbTrPlaceOffset.Text = FM.m_stMasterOpt.dPlaceOffset.ToString(); tbUtilTimeout.Text = FM.m_stMasterOpt.nUtilMaxTime.ToString(); tbYIntercept.Text = FM.m_stMasterOpt.dYIntercept.ToString(); tbYSlope.Text = FM.m_stMasterOpt.dYSlope.ToString(); tbforceOffset.Text = FM.m_stMasterOpt.dforceOffset.ToString(); tbYInterceptBT.Text = FM.m_stMasterOpt.dYInterceptBT.ToString(); tbYSlopeBT.Text = FM.m_stMasterOpt.dYSlopeBT.ToString(); tbDCOMRatio.Text = FM.m_stMasterOpt.dDCOMRatio.ToString(); tbDCOMCnt.Text = FM.m_stMasterOpt.nDCOMCnt.ToString(); tbSpdOffset.Text = FM.m_stMasterOpt.dSpdOffset.ToString(); tbCalStart.Text = FM.m_stMasterOpt.dStartDCOM.ToString(); //tbLDCBtmOffset .Text = FM.m_stMasterOpt.dLDCBtmOffset.ToString(); fn_SetTimer(true); }
//--------------------------------------------------------------------------- //Update Timer private void fn_tmUpdate(object sender, EventArgs e) { //m_UpdateTimer.Stop(); // switch (m_nStep) { case 0: tbLoadMsg.Text = " Now Loading System Data..."; if (!m_tDelayTimer.OnDelay(true, 300)) { return; } m_tDelayTimer.Clear(); m_nStep++; break; case 1: //Load Default file Info. tbLoadMsg.Text = " Loading the Information..."; FM.fn_LoadLastInfo(true); tbLoadMsg.Text = " Loading the Project Info..."; FM.fn_LoadProject(true, FM._sCurrJob); tbLoadMsg.Text = " Loading the System Option..."; FM.fn_LoadSysOptn(true); tbLoadMsg.Text = " Loading the Master Option..."; FM.fn_LoadMastOptn(true); tbLoadMsg.Text = " Loading the Recipe Data..."; FM.fn_LoadRecipeInfo(true, FM._sRecipeName); tbLoadMsg.Text = " Loading the Password..."; FM.fn_LoadPassWord(true); tbLoadMsg.Text = " Loading SPC Data..."; SPC.Load(true); m_tDelayTimer.Clear(); m_nStep++; break; case 2: if (!m_tDelayTimer.OnDelay(true, 100)) { return; } tbLoadMsg.Text = " Loading the IO List..."; IO.fn_LoadIO(true); tbLoadMsg.Text = " Loading the Lamp/Buzzer Data..."; LAMP.fn_Load(true); tbLoadMsg.Text = " Loading the Actuator Data..."; ACTR.fn_Load(true); //tbLoadMsg.Text = " ACS IO Connection...(SIM)" ; IO.fn_ACSConnect(UserConst.ACS_CON_SIM); tbLoadMsg.Text = " ACS IO Connection..."; IO.fn_ACSConnect(UserConst.ACS_CON_NOR); m_tDelayTimer.Clear(); m_nStep++; break; case 3: //if (!m_tDelayTimer.OnDelay(true, 100)) return; tbLoadMsg.Text = " Loading the Error List..."; EPU.fn_LoadErrorData(true); tbLoadMsg.Text = " Loading the Lamp/Buzzer Data..."; EPU.fn_LoadLampData(true); m_tDelayTimer.Clear(); m_nStep++; break; case 4: if (!m_tDelayTimer.OnDelay(true, 500)) { return; } //tbLoadMsg.Text = " Loading the Motor List...(SIM)"; MOTR.fn_InitMotor(UserConst.ACS_CON_SIM); tbLoadMsg.Text = " Loading the Motor List..."; MOTR.fn_InitMotor(UserConst.ACS_CON_NOR); tbLoadMsg.Text = " Loading the Vision Recipe..."; g_VisionManager.fn_LoadVision(FM._sRecipeName); //tbLoadMsg.Text = " Loading the Motor Data..." ; FM.fn_LoadMastOptn(true); //tbLoadMsg.Text = " Loading the Motor DSTB..." ; MOTR.fn_LoadMotrDisturb(true); m_tDelayTimer.Clear(); m_nStep++; break; case 5: //if (!m_tDelayTimer.OnDelay(true, 500)) return; tbLoadMsg.Text = " Loading the Data Manager Map Data..."; DM.fn_LoadMap(true); tbLoadMsg.Text = " Loading the Sequence Data..."; SEQ.fn_LoadWorkInfo(true); m_tDelayTimer.Clear(); m_nStep++; break; case 6: //Row, Col Setting... tbLoadMsg.Text = " Apply Project..."; FM.ApplyProject(FM._sCurrJob); m_nStep++; break; case 7: //LoadCell tbLoadMsg.Text = " Initial Load Cell ..."; LDCBTM.fn_SetParam(); LDCBTM.fn_Open(LDCBTM._sSerialNo); //LDCBTM.fn_Open (FM.m_stMasterOpt.sLoadCellSN); LDCBTM.fn_Close(); //JUNG/201014/Retry LDCBTM.fn_Open(LDCBTM._sSerialNo); //PMC, Slurry Init //tbLoadMsg.Text = " Initial PMC IP,Port ..." ; PMC.fn_SetIpAddress(FM.m_stSystemOpt.sPMCIp, FM.m_stSystemOpt.nPMCPort); tbLoadMsg.Text = " Initial REST API ..."; REST.fn_SetURL(FM.m_stSystemOpt.sRestApiUrl); tbLoadMsg.Text = " Initial RFID Reader ..."; m_nStep++; break; case 8: if (IO._bConnect) { //RFID tbLoadMsg.Text = " Initial RFID Reader ..."; RFID.fn_Connect(); } m_nStep++; break; case 9: //if (!m_tDelayTimer.OnDelay(true, 500)) return; //Main Load fn_MainFormLoad(); m_UpdateTimer.Stop(); m_nStep++; break; default: break; } //Step Inc. pbStep.Value = m_nStep * 10; //m_UpdateTimer.Start(); }
//--------------------------------------------------------------------------- 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_UpdateMotorStatus() { for (int j = 0; j < motStatusdataTable.Rows.Count; j++) { // if (MOTR.fn_IsSMCMotor((EN_MOTR_ID)j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ENABLED] = MOTR[j].GetServo() ? "ON" : "OFF"; motStatusdataTable.Rows[j]["SBACK"] = MOTR[j].GetServo() ? "Green" : "LightGray"; motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.HOME] = MOTR[j].GetHomeEnd() ? "ON" : "OFF"; motStatusdataTable.Rows[j]["HBACK"] = MOTR[j].GetHomeEnd() ? "Green" : "LightGray"; motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ALARM] = MOTR[j].GetAlarm() ? "ON" : "OFF"; motStatusdataTable.Rows[j]["ABACK"] = MOTR[j].GetAlarm() ? "Red" : "LightGray"; continue; } if (mc_Acs.fn_GetStateEnabled(j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ENABLED] = "ON"; motStatusdataTable.Rows[j]["SBACK"] = "Green"; } else { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ENABLED] = "OFF"; motStatusdataTable.Rows[j]["SBACK"] = "LightGray"; } if (mc_Acs.fn_GetStateAlarmAll(j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ALARM] = "ON"; motStatusdataTable.Rows[j]["ABACK"] = "Red"; } else { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ALARM] = "OFF"; motStatusdataTable.Rows[j]["ABACK"] = "LightGray"; } if (mc_Acs.fn_GetStateMove(j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.MOVING] = "ON"; motStatusdataTable.Rows[j]["MBACK"] = "Green"; } else { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.MOVING] = "OFF"; motStatusdataTable.Rows[j]["MBACK"] = "LightGray"; } // motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.HOME] = MOTR[j].GetHomeEnd() ? "ON" : "OFF"; motStatusdataTable.Rows[j]["HBACK"] = MOTR[j].GetHomeEnd()? "Green" : "LightGray"; if (mc_Acs.fn_GetStateHardwareLeftLimit(j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.LIMIT_LEFT] = "ON"; motStatusdataTable.Rows[j]["PBACK"] = "Red"; } else { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.LIMIT_LEFT] = "OFF"; motStatusdataTable.Rows[j]["PBACK"] = "LightGray"; } if (mc_Acs.fn_GetStateHardwareRightLimit(j)) { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.LIMIT_RIGHT] = "ON"; motStatusdataTable.Rows[j]["NBACK"] = "Red"; } else { motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.LIMIT_RIGHT] = "OFF"; motStatusdataTable.Rows[j]["NBACK"] = "LightGray"; } motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.POSITION_R] = Math.Round(mc_Acs.fn_GetTargetPosition(j), 3); motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.POSITION_F] = Math.Round(mc_Acs.fn_GetEncoderPosition(j), 3); motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.JERK] = Math.Round(mc_Acs.fn_GetParameterJerk(j), 3); motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.VELOCITY_F] = Math.Round(mc_Acs.fn_GetParameterVelocity(j), 3); motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.ACC] = Math.Round(mc_Acs.fn_GetParameterAcceleration(j), 3); motStatusdataTable.Rows[j][(int)EN_MOTOR_STATUS.DEC] = Math.Round(mc_Acs.fn_GetParameterAcceleration(j), 3); } }