Example #1
0
        protected override QState StateRunInit(IQEvent qEvent)
        {
            LogMessage("StateRunInit", qEvent);

            if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog && !qEvent.QSignal.ToString().Equals("Empty") && !qEvent.QSignal.ToString().Equals("Init") && !qEvent.QSignal.ToString().Equals("SigTimeout"))
            {
                Log.Info(this, "{0}, ProcessName:{1}, StateName:StateRunInit, QEvent:{2}, QSignal:{3}, Message: Initialization completed.", LoggerCategory.StateTransition, _processName, qEvent.ToString(), qEvent.QSignal.ToString());
            }

            LogMessage("StateRunInit", qEvent);

            if (qEvent.IsSignal(QSignals.Entry))
            {
                _isStateInitialized = false;
                ClearDeferredSignals();
            }

            // Initialization completed. Signal to stop state.
            if (qEvent.IsSignal(QSignals.Exit))
            {
                if (!_workcell.Process.IsErrorState && !this._isErrorstate)
                {
                    this.stateHistory = this.targetState;
                    ClearDeferredSignals();
                    _isStateInitialized = true;
                }
            }
            return(stateProcess);
        }
        private QState StateWaitForInputCarrierComplete(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                if (RecallDeferredSignal(HSTWorkcell.SigInputRFIDReadComplete))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigInputRFIDReadComplete);
                }

                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigInputRFIDReadComplete))
            {
                var inputDataCarrier = (Carrier)(qEvent as QEvent).EventObject;

                if (inputDataCarrier != null)
                {
                    _currentRunCarrier = inputDataCarrier;
                }


                TransitionTo(stateCheckGetputServerConnection);
                return(null);
            }
            return(stateRun);
        }
Example #3
0
        private QState StateWaitPrecisorTurnOnAllVacuums(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                if (RecallDeferredSignal(HSTWorkcell.SigPrecisorVacuumOn))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigPrecisorVacuumOn);
                    return(null);
                }

                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigPrecisorVacuumOn))
            {
                if (HSTMachine.Workcell.HSTSettings.Install.EnableFlattenerAsPrecisor)
                {
                    _controller.RetractInputEEFlattener();
                }
                TransitionTo(statePlaceHgaZUpToParkPosition);
                return(null);
            }

            return(stateRun);
        }
Example #4
0
        private QState StateRunCheckHGAReadyForPick(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                Controller.StartWorkingOnPlacingToPrecisor = false;
                if (RecallDeferredSignal(HSTWorkcell.SigHGAsReadyToPickAtInputLifter))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigHGAsReadyToPickAtInputLifter);
                }

                if (RecallDeferredSignal(HSTWorkcell.SigInputEEStartDycemCleaning))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigInputEEStartDycemCleaning);
                }

                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigInputEEStartDycemCleaning))
            {
                TransitionTo(statePerformCleaningWithDycem);
                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigHGAsReadyToPickAtInputLifter))
            {
                InputEEMovesDownToInputStationPickPositionProcessCycleTimeStopWatch.Start();
                TransitionTo(statePickHgaZDown);
                return(null);
            }
            return(stateRun);
        }
Example #5
0
        private QState StateCheckNextZoneReady(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob) || qEvent.IsSignal(_sigTimeout))
            {
                try
                {
                    if (_controller.NextZoneReady())
                    {
                        TransitionTo(stateOutputTurnSectionReleaseCarrier);
                    }
                    else
                    {
                        //lai: reduce from 200 march12-2016
                        _qTimer.FireIn(new TimeSpan(0, 0, 0, 0, 150), new QEvent(_sigTimeout));
                    }
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.Stop, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                }
                return(null);
            }
            return(stateRun);
        }
Example #6
0
        private QState StateWaitForOutputCarrierComplete(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                _retryCountSaveTDF      = 0;
                _retryCountSendSeatrack = 0;
                if (RecallDeferredSignal(HSTWorkcell.SigOutputProcessDataComplete))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigOutputProcessDataComplete);
                }

                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigOutputProcessDataComplete))
            {
                var outputData = (object[])(qEvent as QEvent).EventObject;
                if (outputData != null)
                {
                    _currentFolaTagInfo      = (FolaTagData)outputData[0];
                    _currentOutputRunCarrier = (Carrier)outputData[1];
                }

                TransitionTo(stateSentSeatrackData);
                return(null);
            }
            return(stateRun);
        }
Example #7
0
        protected QState Monitoring(IQEvent qEvent)
        {
            if (qEvent.IsSignal(SigStateJob))
            {
                if (RecallDeferredSignal(HSTWorkcell.SigRunTestScript))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigRunTestScript);
                    return(null);
                }
                return(null);
            }
            if (qEvent.IsSignal(HSTWorkcell.SigRunTestScript))
            {
                ResetAllVariables();
                _commandLines = System.IO.File.ReadAllLines(HSTMachine.Workcell.HSTSettings.Install.TestScript);

                CommandQueue = new Queue <string>();

                for (int i = 0; i < _commandLines.Length; i++)
                {
                    CommandQueue.Enqueue(_commandLines[i]);
                }

                ProcessNextCommand();

                return(null);
            }
            return(base.TopState);
        }
Example #8
0
        private QState StateSaveTDFDataFile(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob) || qEvent.IsSignal(_sigTimeout))
            {
                try
                {
                    if (_workcell.HSTSettings.Install.EnabledTDFFileSystem || _workcell.HSTSettings.Install.EnabledSaveTDFFileOnly)
                    {
                        _controller.SaveTDFDataToLocalFile(_currentFolaTagInfo, _currentOutputRunCarrier);
                    }

                    TransitionTo(stateWaitForOutputCarrierComplete);
                }
                catch (Exception ex)
                {
                    if (_retryCountSaveTDF < 2)
                    {
                        Thread.Sleep(200);
                        Log.Error(this, "Failed to get ISI data. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCountSendSeatrack, ex.Message, this.CurrentStateName);
                        TransitionTo(stateSaveTDFDataFile);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCountSaveTDF++;
                }
                return(null);
            }
            return(stateRun);
        }
Example #9
0
        private QState StatePlaceHGAZDown(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob) || qEvent.IsSignal(_sigTimeout))
            {
                try
                {
                    if (_controller.IsSafeToMoveDown(true))
                    {
                        OutputEEDownToLifterPositionTravellingTimeStopWatch.Start();

                        _controller.PlaceHGAMoveDown();
                        OutputEEDownToLifterPositionTravellingTimeStopWatch.Stop();

                        if (HSTMachine.Workcell != null)
                        {
                            if (HSTMachine.Workcell.getPanelOperation() != null)
                            {
                                if (HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel() != null)
                                {
                                    UIUtility.Invoke(HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel(), () =>
                                    {
                                        HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel().labelOutputDownToLifterPositionTravellingTime.Text = OutputEEDownToLifterPositionTravellingTimeStopWatch.ElapsedTime.ToString();
                                    });
                                }
                            }
                        }

                        if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                        {
                            if (CommonFunctions.Instance.CollisionAvoidanceBetweenPrecisorNestAndOutputEEMovingDownToOutputCarrierProcessCycleTimeStopWatch.Count > 0)
                            {
                                ProcessStopWatch PSW = CommonFunctions.Instance.CollisionAvoidanceBetweenPrecisorNestAndOutputEEMovingDownToOutputCarrierProcessCycleTimeStopWatch.First();
                                PSW.Stop();
                                CommonFunctions.Instance.LogProcessCycleTime("Collision Avoidance Between Precisor Nest And Output EE Moving Down To Output Carrier Process Cycle Time.csv", PSW.GetElapsedTime(), PSW.CarrierID, PSW.GetStartTime(), PSW.GetStopTime());
                                CommonFunctions.Instance.CollisionAvoidanceBetweenPrecisorNestAndOutputEEMovingDownToOutputCarrierProcessCycleTimeStopWatch.Dequeue();
                            }
                        }

                        OutputEEPlacesDownHGAOntoOutputCarrierProcessCycleTimeStopWatch.Start();

                        TransitionTo(statePlaceHGAVacuumOff);
                    }
                    else
                    {
                        _qTimer.FireIn(new TimeSpan(0, 0, 0, 0, 200), new QEvent(_sigTimeout));
                        return(null);
                    }
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.OK, ErrorButton.NoButton, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                }
                return(null);
            }
            return(stateRun);
        }
Example #10
0
        private QState StateWaitForSigOutputCarrierReadyForPlace(IQEvent qEvent)
        {
            WaitOutputCarrierReadyForPlaceTimeStopWatch.Start();
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                if (RecallDeferredSignal(HSTWorkcell.SigOutputCarrierReadyForPlace))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigOutputCarrierReadyForPlace);
                }
                if (RecallDeferredSignal(HSTWorkcell.SigOutputEEAxisSafeToPlacePrecisorNestAtParkedPosition))
                {
                    UpdateSignalRecipient(HSTWorkcell.SigOutputEEAxisSafeToPlacePrecisorNestAtParkedPosition);
                }
                return(null);
            }

            if (qEvent.IsSignal(HSTWorkcell.SigOutputCarrierReadyForPlace))
            {
                OutputCarrierReadyForPlaceSignalReceived = true;
            }

            if (qEvent.IsSignal(HSTWorkcell.SigOutputEEAxisSafeToPlacePrecisorNestAtParkedPosition))
            {
                PrecisorNestIsAtParkPositionSignalReceived = true;
            }

            if (OutputCarrierReadyForPlaceSignalReceived && PrecisorNestIsAtParkPositionSignalReceived)
            {
                if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                {
                    Log.Info(this, "{0}, ProcessName:{1}, StateName:StateWaitForSigOutputCarrierReadyForPlace, Received QSignal:{2} and transition to new State:StatePlaceHGAZDown because OutputCarrierReadyForPlaceSignalReceived is true && PrecisorNestIsAtParkPositionSignalReceived is true", LoggerCategory.StateTransition, _processName, qEvent.QSignal.ToString());
                }
                OutputCarrierReadyForPlaceSignalReceived   = false;
                PrecisorNestIsAtParkPositionSignalReceived = false;

                TransitionTo(statePlaceHGAZDown);
                WaitOutputCarrierReadyForPlaceTimeStopWatch.Stop();

                if (HSTMachine.Workcell != null)
                {
                    if (HSTMachine.Workcell.getPanelOperation() != null)
                    {
                        if (HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel() != null)
                        {
                            UIUtility.Invoke(HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel(), () =>
                            {
                                HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel().labelWaitCarrierReadyForPlaceTime.Text = WaitOutputCarrierReadyForPlaceTimeStopWatch.ElapsedTime.ToString();
                            });
                        }
                    }
                }
                return(null);
            }

            return(stateRun);
        }
Example #11
0
        private QState StatePublishSigProbeDone(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigRecover))
            {
                if (errorMessage != null)
                {
                    ErrorButton response = (ErrorButton)(((QEvent)qEvent).EventObject);
                    switch (response)
                    {
                    case ErrorButton.Continue:
                    {
                        PublishSignal(new QEvent(HSTWorkcell.SigProbeDone));
                        TransitionTo(stateCheckProbeFunctionalTest);
                    }
                    break;

                    default:
                        errorMessage = null;
                        System.Windows.Forms.MessageBox.Show(string.Format("Unhandled Button: {0}", response.ToString()), response.ToString());
                        return(null);
                    }
                    return(null);
                }
            }

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    TestProbeHandlerMovesUpAfterMeasurementCompleteProcessCycleTimeStopWatch.Stop();
                    if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                    {
                        CommonFunctions.Instance.LogProcessCycleTime("Test Probe Handler Moves Up After Measurement Complete Process Cycle Time.csv", TestProbeHandlerMovesUpAfterMeasurementCompleteProcessCycleTimeStopWatch.ElapsedTime);
                    }

                    if (_workcell.IsAllMeasurementFailed)
                    {
                        throw new Exception("All measurement results failed, Please verify the communications with test electronics work properly");
                    }
                    else
                    {
                        PublishSignal(new QEvent(HSTWorkcell.SigProbeDone));
                        TransitionTo(stateCheckProbeFunctionalTest);
                    }
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.Continue, ErrorButton.NoButton, ErrorButton.Stop);
                    TransitionToErrorState(btnlst, ex);
                }
            }
            return(stateRun);
        }
        private QState StateISIDataProcess(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob) || qEvent.IsSignal(_sigTimeout))
            {
                try
                {
                    if (CommonFunctions.Instance.MeasurementTestRecipe.DeltaISI_Enable)
                    {
                        //_controller.GetSLDRData(_currentRunCarrier);
                        _controller.GetSLDRData_New(_currentRunCarrier);
                        _controller.CheckSLDRDataCorrect(_currentRunCarrier);
                    }

                    Carrier IncomingOutputCarrier = _currentRunCarrier.DeepCopy();
                    IncomingOutputCarrier.RFIDData = _currentRunCarrier.RFIDData;

                    lock (CommonFunctions.Instance.InputCarriersLock)
                    {
                        foreach (Carrier carrier in CommonFunctions.Instance.InputCarriers.ToArray())
                        {
                            if (carrier.CarrierID == IncomingOutputCarrier.CarrierID)
                            {
                                carrier.CarrierCurrentLocation = CarrierLocation.BufferStation;
                                break;
                            }
                        }
                    }
                    _workcell.Process.InputEEProcess.Controller.IncomingCarrier = _currentRunCarrier.DeepCopy();

                    //Public to get ISI data
                    QF.Instance.Publish(new QEvent(HSTWorkcell.SigInputGetISIDataComplete));

                    TransitionTo(stateWaitForInputCarrierComplete);
                }
                catch (Exception ex)
                {
                    if (_retryCount < 2)
                    {
                        Thread.Sleep(200);
                        Log.Error(this, "Failed to get ISI data. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(stateISIDataProcess);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRun);
        }
Example #13
0
        private QState StateRunInitCompleteMoveToParkPosition(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigRecover))
            {
                if (errorMessage != null)
                {
                    ErrorButton response = (ErrorButton)(((QEvent)qEvent).EventObject);
                    switch (response)
                    {
                    case ErrorButton.Stop:
                    {
                        _retryCount = 0;
                    }
                    break;

                    default:
                        errorMessage = null;
                        System.Windows.Forms.MessageBox.Show(string.Format("Unhandled Button: {0}", response.ToString()), response.ToString());
                        return(null);
                    }
                    return(null);
                }
            }

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    if (!_workcell.IsIgnoreHomeAxisForByPass)
                    {
                        _controller.GoToParkPosition(false);
                    }

                    if (HSTWorkcell.disableBoundaryCheck)
                    {
                        PublishSignal(new QEvent(HSTWorkcell.SigTestProbeBoundaryCheckComplete));
                    }
                    TransitionTo(stateCheckProbeFunctionalTest);
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.OK, ErrorButton.NoButton, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                }
                return(null);
            }
            return(stateRunInit);
        }
        private QState StateReportGetputError(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigRecover))
            {
                if (errorMessage != null)
                {
                    ErrorButton response = (ErrorButton)(((QEvent)qEvent).EventObject);
                    switch (response)
                    {
                    case ErrorButton.OK:     // Reject, treat as bad carrier
                    {
                        PublishSignal(new QEvent(HSTWorkcell.SigEndRunProcess));
                    }
                    break;

                    default:
                        errorMessage = null;
                        System.Windows.Forms.MessageBox.Show(string.Format("Unhandled Button: {0}", response.ToString()), response.ToString());
                        return(null);
                    }
                    return(null);
                }
            }

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    CommonFunctions.Instance.ActivePopupGetputErrorMessage = true;
                    if (FISManager.Instance.IsFISConnected)
                    {
                        HSTException.Throw(HSTErrors.TestElectronecsGetputErrorDetection2, new Exception(CommonFunctions.Instance.GetputErrorMessage));
                    }
                    else
                    {
                        HSTException.Throw(HSTErrors.TestElectronecsGetputErrorDetection, new Exception(CommonFunctions.Instance.GetputErrorMessage));
                    }
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.OK, ErrorButton.NoButton, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                    return(null);
                }
            }
            return(stateRun);
        }
Example #15
0
        private QState StateCheckVaccuum(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    _controller.CheckPnpPartPresent(false);
                    TransitionTo(stateRunInitCompleteMoveToParkPosition);
                    _retryCount = 0;
                }
                catch (Exception ex)
                {
                    if (_retryCount < 1)
                    {
                        Log.Error(this, "Failed to perform Input EE Vacuum check. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRunInit);
        }
Example #16
0
        private QState StateRunInitCompleteMoveToParkPosition(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    if (!_workcell.IsIgnoreHomeAxisForByPass)
                    {
                        _controller.DoJobMoveZToPark(false, false);
                    }

                    if (HSTWorkcell.disableBoundaryCheck)
                    {
                        PublishSignal(new QEvent(HSTWorkcell.SigOutputEEBoundaryCheckComplete));
                    }
                    TransitionTo(stateWaitForPrecisorReadyForPick);
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.OK, ErrorButton.NoButton, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                }
                return(null);
            }
            return(stateRunInit);
        }
Example #17
0
 protected override QState StateStartup(IQEvent qEvent)
 {
     if (qEvent.IsSignal(SigInitialized))
     {
     }
     return(base.StateStartup(qEvent));
 }
Example #18
0
        private QState StatePickHgaVacuumOn(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    _controller.DoJobVacuum(true);
                    TransitionTo(statePickHgaZUpToParkPosition);
                }
                catch (Exception ex)
                {
                    // Pick fail also Z Up First.
                    // Check again at Up Height
                    if (_retryCount < 1)
                    {
                        Log.Error(this, "Failed to turn on vacuum channel on Input EE during pick HGAs. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRun);
        }
Example #19
0
        private QState StatePickHgaPublishPickDone(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                InputEEPicksUpHGAsFromInputStationProcessCycleTimeStopWatch.Stop();
                if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                {
                    CommonFunctions.Instance.LogProcessCycleTime("Input EE Picks Up HGAs From Input Station Process Cycle Time.csv", InputEEPicksUpHGAsFromInputStationProcessCycleTimeStopWatch.ElapsedTime);
                }

                _currentInputCarrier = _controller.IncomingCarrier.DeepCopy();
                if (_currentInputCarrier == null)
                {
                    throw new Exception("input carrier object is null");
                }

                _workcell.Process.PrecisorStationProcess.Controller.IncomingCarrier = _currentInputCarrier.DeepCopy();
                QF.Instance.Publish(new QEvent(HSTWorkcell.SigHGAsPickDoneAtInputLifter));
                QF.Instance.Publish(new QEvent(HSTWorkcell.SigHGAsInputEECompletePick));

                InputEEPlacesDownHGAOntoPrecisorNestProcessCycleTimeStopWatch.Start();

                TransitionTo(stateRunCheckHGAReadyForPlace);
                return(null);
            }
            return(stateRun);
        }
        private QState StatePublishSigCarrierInInputStation(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    _workcell.Process.InputStationProcess.Controller.IncomingCarrier         = _currentInputCarrier.DeepCopy();
                    _workcell.Process.InputStationProcess.Controller.IncomingCarrierSettings = _currentInputCarrierSettings;

                    //lai
                    if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                    {
                        Log.Info(this, "{0}, ProcessName:{1}, In InputTurnStationProcess' StatePublishSigCarrierInInputStation', _currentInputCarrier: Carrier ID:{2}, " +
                                 "HGA1:{3}, HGA2:{4}, HGA3:{5}, HGA4:{6}, HGA5:{7}, " +
                                 "HGA6:{8},  HGA7:{9}, HGA8:{10}, HGA9:{11}, HGA10:{12}", LoggerCategory.StateTransition, _processName, _currentInputCarrier.CarrierID,
                                 _currentInputCarrier.Hga1.Hga_Status, _currentInputCarrier.Hga2.Hga_Status, _currentInputCarrier.Hga3.Hga_Status, _currentInputCarrier.Hga4.Hga_Status, _currentInputCarrier.Hga5.Hga_Status,
                                 _currentInputCarrier.Hga6.Hga_Status, _currentInputCarrier.Hga7.Hga_Status, _currentInputCarrier.Hga8.Hga_Status, _currentInputCarrier.Hga9.Hga_Status, _currentInputCarrier.Hga10.Hga_Status);
                    }

                    QF.Instance.Publish(new QEvent(HSTWorkcell.SigCarrierPresentInInputStation));
                    TransitionTo(stateInputTurnSectionTurnBackward);
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.Stop, ErrorButton.NoButton);
                    TransitionToErrorState(btnlst, ex);
                    return(null);
                }
                return(null);
            }
            return(stateRun);
        }
Example #21
0
        protected bool IsSigStateJob(IQEvent qEvent, string state)
        {
            if (qEvent.IsSignal(SigStateJob))
            {
                EventParam evtParam = ((QEvent)qEvent).EventObject as EventParam;
                if (evtParam == null)
                {
                    return(false);
                }
                if (evtParam.Consumer == null)
                {
                    return(false);
                }

                if (evtParam.Consumer == state)
                {
                    return(true);
                }
                else
                {
                    if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog && !qEvent.QSignal.ToString().Equals("Empty") && !qEvent.QSignal.ToString().Equals("Init") && !qEvent.QSignal.ToString().Equals("SigTimeout"))
                    {
                        Log.Info(this, "{0}, ProcessName:{1}, StateName:In IsSigStateJob, Unable to consume signal {2}. Handler:{3}, Consumer:{4}", LoggerCategory.StateTransition, _processName, qEvent.QSignal.ToString(), state, evtParam.Consumer);
                    }
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Example #22
0
        private QState StatePlaceHgaZUpToParkPosition(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    InputEELeavesPrecisorNestAfterHGAPlaceProcessCycleTimeStopWatch.Start();

                    InputEEUpFromPrecisorNestPositionTravellingTimeStopWatch.Start();
                    _controller.DoJobMoveZToPark(false);
                    InputEEUpFromPrecisorNestPositionTravellingTimeStopWatch.Stop();

                    if (HSTMachine.Workcell != null)
                    {
                        if (HSTMachine.Workcell.getPanelOperation() != null)
                        {
                            if (HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel() != null)
                            {
                                UIUtility.Invoke(HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel(), () =>
                                {
                                    HSTMachine.Workcell.getPanelOperation().getOperationStatusPanel().labelInputUpFromPrecisorNestPositionTravellingTime.Text = InputEEUpFromPrecisorNestPositionTravellingTimeStopWatch.ElapsedTime.ToString();
                                });
                            }
                        }
                    }

                    InputEELeavesPrecisorNestAfterHGAPlaceProcessCycleTimeStopWatch.Stop();
                    if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                    {
                        CommonFunctions.Instance.LogProcessCycleTime("Input EE Leaves Precisor Nest After HGA Place Process Cycle Time.csv", InputEELeavesPrecisorNestAfterHGAPlaceProcessCycleTimeStopWatch.ElapsedTime);
                    }

                    ProcessStopWatch PSW1 = new ProcessStopWatch(_controller.IncomingCarrier.CarrierID, new Stopwatch());
                    if (HSTMachine.Workcell.HSTSettings.Install.EnableDebugLog)
                    {
                        CommonFunctions.Instance.CollisionAvoidanceBetweenInputEEAndPrecisorNestLeavingInputStationProcessCycleTimeStopWatch.Enqueue(PSW1);
                    }

                    TransitionTo(statePlaceHgaPublishPlaceDone);
                }
                catch (Exception ex)
                {
                    if (_retryCount < 1)
                    {
                        Log.Error(this, "Failed to home Input EE. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.OK, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRun);
        }
        private QState StateStandbyInputTurnSection(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    _controller.InputTurnSectionTurnTo0Deg(out _timeUsed);
                    _controller.InhibitInputConveyor(true);
                    _controller.InhibitInputTurnStation(false);
                    Thread.Sleep(1000);
                    _controller.InhibitInputTurnStation(true);
                    _lastSeaveyorIDInposStatus = _controller.IsInputLineReady();
                    TransitionTo(stateRunStart);
                    _retryCount = 0;
                }
                catch (Exception ex)
                {
                    if (_retryCount < 3)
                    {
                        Log.Error(this, "Failed to standby Input Turn Station. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.Stop, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRunInit);
        }
Example #24
0
        protected override QState StateRunInit(IQEvent qEvent)
        {
            TestProbeMovesDownToPrecisorNestProbePositionProcessCycleTimeStopWatch = new Stopwatch();
            HGAMeasurementTestAtTestProbeProcessCycleTimeStopWatch = new Stopwatch();
            TestProbeHandlerMovesUpAfterMeasurementCompleteProcessCycleTimeStopWatch = new Stopwatch();
            TestProbeStabilityProcessCycleTimeStopWatch = new Stopwatch();

            //Time Monitoring
            TestProbeDownToTestPositionTravellingTimeStopWatch = new Stopwatch();
            TestTimeStopWatch = new Stopwatch();
            TestProbeUpFromTestPositionTravellingTimeStopWatch = new Stopwatch();

            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                if (HSTWorkcell.disableBoundaryCheck)
                {
                    TransitionTo(stateRunInitCompleteMoveToParkPosition);
                }
                else
                {
                    TransitionTo(stateMoveToHomePosition);
                }
                return(null);
            }
            return(base.StateRunInit(qEvent));
        }
        private QState StateInputTurnSectionTurnBackward(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    Thread.Sleep(2000);
                    _controller.InputTurnSectionTurnTo0Deg(out _timeUsed);
                    TransitionTo(stateCheckForNextCarrier);
                }
                catch (Exception ex)
                {
                    if (_retryCount < 3)
                    {
                        Log.Error(this, "Failed to turn Input Turn Station to 90 degrees. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.Stop, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                    return(null);
                }
                return(null);
            }
            return(stateRun);
        }
Example #26
0
        private QState StateBoundaryCheck(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    if (!_workcell.IsIgnoreHomeAxisForByPass)
                    {
                        _controller.BoundaryCheck();
                    }
                    TransitionTo(statePublishInputEEBoundaryCheckComplete);
                    _retryCount = 0;
                }
                catch (Exception ex)
                {
                    if (_retryCount < 1)
                    {
                        Log.Error(this, "Failed to perform boundary check on Input EE. Retry count: {0}, Exception: {1}, StateName: {2}", _retryCount, ex.Message, this.CurrentStateName);
                        TransitionTo(this.targetState);
                    }
                    else
                    {
                        ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.NoButton);
                        TransitionToErrorState(btnlst, ex);
                    }
                    _retryCount++;
                }
                return(null);
            }
            return(stateRunInit);
        }
Example #27
0
        private QState StatePublishSigOutputCarrierPlaceDone(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                if (HSTMachine.Workcell.HSTSettings.Install.OperationMode == OperationMode.Bypass && HSTMachine.Workcell.HSTSettings.Install.BypassMeasurementTestAtTestProbe == true)
                {
                    // Do nothing
                }
                else
                {
                    _workcell.Process.OutputStationProcess.Controller.IncomingTestedCarrier = CommonFunctions.Instance.TestedCarrierQueue.First();
                }

                if (CheckDeferredSignal(HSTWorkcell.SigOutputCarrierReadyForPlace))
                {
                    RemoveDeferredSignal(HSTWorkcell.SigOutputCarrierReadyForPlace);
                }

                _controller.PlaceHGAMoveUp();
                PublishSignal(new QEvent(HSTWorkcell.SigOutputCarrierPlaceDone));

                TransitionTo(stateWaitForPrecisorReadyForPick);
            }
            return(stateRun);
        }
        private QState StateCheckGetputServerConnection(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);

            if (qEvent.IsSignal(SigStateJob))
            {
                try
                {
                    if (FISManager.Instance.IsFISConnected)
                    {
                        TransitionTo(stateISIDataProcess);
                    }
                    else
                    {
                        throw new Exception("Can't connect to data server, please check GetputServer program or check network connection!!");
                    }
                }
                catch (Exception ex)
                {
                    ButtonList btnlst = new ButtonList(ErrorButton.Retry, ErrorButton.NoButton, ErrorButton.Abort);
                    TransitionToErrorState(btnlst, ex);
                }

                return(null);
            }
            return(stateRun);
        }
        protected QState StartRunning(IQEvent qEvent)
        {
            LogMessage("Getput Monitoring", qEvent);
            if (qEvent.IsSignal(SigStateJob))
            {
                if (HSTWorkcell.terminatingHSTApps)
                {
                    return(null);
                }

                try
                {
                    if (HSTMachine.Workcell.IsMainFormloaded)
                    {
                        if (HSTMachine.Workcell.HSTSettings.Install.OperationMode == OperationMode.Auto)
                        {
                            //FISManager.Instance.Launch();
                            //FISManager.Instance.StartGetPutServer();
                            FISManager.Instance.TestConnection();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(this, "GetputserverMonitoringProcess failed: Exception: {0}, StateName: {1}", ex.Message, this.CurrentStateName);
                }

                _loopTimeOut = new TimeSpan(0, 0, 0, 0, 500);
                _stateTimer.FireIn(_loopTimeOut, new QEvent(SigStateJob));

                return(null);
            }

            return(base.TopState);
        }
        private QState StateRunStart(IQEvent qEvent)
        {
            LogStateInfo(_processName, System.Reflection.MethodBase.GetCurrentMethod().Name, qEvent);
            machineStop = false;

            if (HSTMachine.Workcell.HSTSettings.Install.OperationMode == OperationMode.Simulation ||
                HSTMachine.Workcell.HSTSettings.Install.OperationMode == OperationMode.DryRun)
            {
                SimulatedInputCarriersSettingsQueue = new Queue <CarrierSettings>();

                foreach (CarrierSettings carrier in HSTMachine.Workcell.HSTSettings.SimulatedPart.Carriers)
                {
                    SimulatedInputCarriersSettingsQueue.Enqueue(carrier);
                }
            }

            if (qEvent.IsSignal(SigStateJob))
            {
                if (_workcell.IsMachineHomed)
                {
                    TransitionTo(stateDoAutoClearCarrier);
                }
                return(null);
            }
            return(stateRun);
        }