예제 #1
0
        // register this using StartSRControl
        public static void SREventHandler(object sender, SRTakeDataHandler.SROpCompletedEventArgs e)
        {
            SRControl sr = (SRControl)e.UserState;
            // SRTakeDataHandler.SROp next = SRTakeDataHandler.NextOp(e.Op, e.OpStatus);
            sr.Log.TraceEvent(LogLevels.Verbose, 87266, "SR {0} operation {1} completed '{2}'",
                sr.Identifier, e.Op, INCCSR.SRAPIReturnStatusCode(e.OpStatus));
            try
            {
                switch (e.Op)
                {
                    case SRTakeDataHandler.SROp.Shutdown:

                        break;
                    case SRTakeDataHandler.SROp.Nothing:

                        break;
                    case SRTakeDataHandler.SROp.InitializeContext:

                        break;
                    case SRTakeDataHandler.SROp.InitializeSR:
                    case SRTakeDataHandler.SROp.ReInitializeSR:
                        if (!(e.OpStatus == INCCSR.SUCCESS || e.OpStatus == INCCSR.MEAS_CONTINUE))
                        {
                            StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)sender);
                            //Action<object> action = (object obj) =>
                            //{
                            //    StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)obj);
                            //};
                            //Task signifyingnothing = Task.Factory.StartNew(action, sender);
                        }
                        break;
                    case SRTakeDataHandler.SROp.StartSRDAQ:
                        if (!(e.OpStatus == INCCSR.SUCCESS || e.OpStatus == INCCSR.MEAS_CONTINUE))
                        {
                            StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)sender);
                            //Action<object> action = (object obj) =>
                            //{
                            //    StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)obj);
                            //};
                            //Task signifyingnothing = Task.Factory.StartNew(action, sender);

                        }
                        break;
                    case SRTakeDataHandler.SROp.WaitForResults:
                        if (!(e.OpStatus == INCCSR.SUCCESS || e.OpStatus == INCCSR.MEAS_CONTINUE))
                        {
                            StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)sender);
                            //Action<object> action = (object obj) =>
                            //{
                            //    StopThisSRAssayImmediately((SRTakeDataHandler.SRControlThread)obj);
                            //};
                            //Task signifyingnothing = Task.Factory.StartNew(action, sender);
                         }
                        else
                        {
                            SRTakeDataHandler.SRControlThread srct = (SRTakeDataHandler.SRControlThread)sender;
                            sr.Log.TraceEvent(LogLevels.Verbose, 87225, "Transform the results, or get the transformed results");
                            srct.sri.PendingComplete();                        // when we get here, the raw results are already available on the SR thread structure
                            if (srct.sri.DAQState == DAQInstrState.HVCalib)
                            {

                            }
                            else
                                srct.SRCtrl.TransformResults(srct.SRCtrl.Det.Id, srct.sri.RDT.Cycle); // convert to enhanced results
                            HandleEndOfCycleProcessing(srct.sri);
                        }
                        break;
                    case SRTakeDataHandler.SROp.CloseSR:
                        break;
                }
            }
            catch (AnalysisDefs.CancellationRequestedException)  // thrown from this method
            {
                StopActiveAssayImmediately();
            }
            catch (Exception oddex)
            {
                sr.Log.TraceEvent(LogLevels.Error, 643, "Internal error, stopping active processing, {0}", oddex.Message);
                if (sender != null)
                {
                    SRTakeDataHandler.SRControlThread srct = (SRTakeDataHandler.SRControlThread)sender;
                    HandleFatalGeneralError(srct.sri, oddex);
                }
                else
                {
                    // will blow if not really an Assay subclass, e.g. not running in the context of the full DAQCOntrol class 
                    CurState.State = DAQInstrState.Offline; // remaining buffers should now bypass DAQ section
                    gControl.StopLMCAssay(removeCurNCDFile: false); // stop the instruments
                    gControl.netlog.TraceException(oddex, false);
                    gControl.netlog.TraceEvent(LogLevels.Info, 429, "DAQ processing incomplete: {0}, processing stopped", oddex.Message);
                    //activeInstr.RDT.EndOfCycleProcessing(CurState.Measurement);
                    gControl.MajorOperationCompleted();  // signal the controlling loop we are done

                }

            }
        }
예제 #2
0
파일: Control.cs 프로젝트: tempbottle/INCC6
        internal void PrepSRDAQHandler()
        {
            SRTakeDataHandler sr = SRWrangler;  // creates if not there

            sr.Meas = CurState.Measurement;
        }
예제 #3
0
        static void StopThisSRAssayImmediately(SRTakeDataHandler.SRControlThread srct)
        {
            srct.sri.PendingComplete();
            // stop the single SR thread 
            srct.CancelMe();
            srct.sri.DAQState = DAQInstrState.Offline;
            srct.SRCtrl.Log.TraceEvent(LogLevels.Info, 428, "SR {0} DAQ cancelled", srct.sri.id.IdentName());

            // dev note: this still isn't working very well, need to completely fix the early termination logic, it should exit cleanly without extra cycle and results processing
            //srct.sri.RDT.EndOfCycleProcessing(NC.App.Opstate.Measurement);
            //srct.sri.selected = false;
            gControl.MajorOperationCompleted(); // the overall pend handle used by cmd line 
        }