Example #1
0
        //---------------------------------------------------------------------------
        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.");
        }
Example #3
0
        //---------------------------------------------------------------------------
        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;
            }
        }
Example #4
0
        //---------------------------------------------------------------------------
        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;
            }
        }
Example #5
0
        //---------------------------------------------------------------------------
        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);
        }
Example #6
0
        //---------------------------------------------------------------------------
        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;
            }
        }
Example #7
0
        //---------------------------------------------------------------------------
        //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);
            }
        }
Example #8
0
        //---------------------------------------------------------------------------
        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();
        }
Example #9
0
        //---------------------------------------------------------------------------
        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);
        }
Example #10
0
        //---------------------------------------------------------------------------
        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);
            }
        }
Example #11
0
        //---------------------------------------------------------------------------
        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);
            }
        }
Example #12
0
        //---------------------------------------------------------------------------
        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);
        }
Example #13
0
        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();
        }
Example #14
0
        //-------------------------------------------------------------------------------------------------
        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";
                }
            }
        }
Example #15
0
        //---------------------------------------------------------------------------
        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();
        }
Example #16
0
        //---------------------------------------------------------------------------
        //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);
        }
Example #21
0
        //-------------------------------------------------------------------------------------------------
        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);
            }
        }