예제 #1
0
    StateInst GetStateInst(COM_ReportState state, bool once = false)
    {
        StateInst tstate = new StateInst();

        tstate.stateId_ = (int)state.stateId_;
        tstate.tick_    = state.tick_;
        tstate.turn_    = state.turn_;
        tstate.once_    = once;
        return(tstate);
    }
예제 #2
0
        /// <summary>
        /// 状态转变事件函数
        /// </summary>
        /// <param name="act"></param>
        private void instOnTransitionedAction(StateMachine <StateInst, TriggerInst> .Transition act)
        {
            nlogger.Debug("On StateInst Transitioned.");

            TriggerInst trigger = act.Trigger;
            StateInst   source  = act.Source;
            StateInst   dest    = act.Destination;

            // 状态清零
            _instStateCounts = 0;

            // 触发事件 - 状态转变
            StateChangedEvent?.Invoke(dest);
        }
예제 #3
0
 /// <summary>
 /// 未定义事件函数
 /// </summary>
 /// <param name="st"></param>
 /// <param name="tg"></param>
 private void instOnUnhandledTrigger(StateInst st, TriggerInst tg)
 {
     nlogger.Error("Inst Unhandled trigger: state.");
 }
예제 #4
0
        /// <summary>
        /// 配置仪器相关的状态机
        /// </summary>
        protected void ConfigInstStateless()
        {
            // new object
            _instMachine     = new StateMachine <StateInst, TriggerInst>(() => _instState, s => _instState = s);
            _instTickTrigger = _instMachine.SetTriggerParameters <int>(TriggerInst.TimerTick);

            // on transition action
            _instMachine.OnTransitioned(instOnTransitionedAction);

            // on unhandled trigger
            _instMachine.OnUnhandledTrigger(instOnUnhandledTrigger);

            // StateInst.Idle
            // -> StateInst.Measure
            _instMachine.Configure(StateInst.Idle)
            .OnEntry(t => instIdleEntry())
            .OnExit(t => instIdleExit())
            .InternalTransition(_instTickTrigger, (tic, t) => instIdleTick(tic))
            .Permit(TriggerInst.StartMeasure, StateInst.Measure)
            .Ignore(TriggerInst.StartStore)
            .Ignore(TriggerInst.Stop);


            // StateInst.Measure
            // -> StateInst.StoreData
            // -> StateInst.Idle
            _instMachine.Configure(StateInst.Measure)
            .OnEntry(t => instMeasureEntry())
            .OnExit(t => instMeasureExit())
            .InternalTransition(_instTickTrigger, (tic, t) => instMeasureTick(tic))
            .Permit(TriggerInst.StartStore, StateInst.Store)
            .Permit(TriggerInst.Stop, StateInst.Idle);


            // StateInst.Store
            // -> StateInst.Idle
            _instMachine.Configure(StateInst.Store)
            .OnEntry(t => instStoreEntry())
            .OnExit(t => instStoreExit())
            .InternalTransition(_instTickTrigger, (tic, t) => instStoreTick(tic))
            .Permit(TriggerInst.Stop, StateInst.Idle)
            .Ignore(TriggerInst.StartMeasure);
        }