#pragma once /*! * @breif 顺控 处理方法 * * @author sjq * @date 五月 2018 */ #include #include "CMethod.h" #include "PredifineForSeqServer.h" #include "CMethodFuncAsync.h" class CNodeSeq; class CRecoverNode; class CMethodSeq : public CMethod { public: CMethodSeq(CNodeSeq& seq); virtual ~CMethodSeq(); virtual bool execute(); virtual void interruptExecute(); void changeStateToStart();//将状态修改为正在执行状态 void changeStateToPause();//将状态修改 暂停 protected: virtual bool executeChilds();//执行所有功能 //开始执行所有的功能, 返回串行功能的执行结果 virtual ESeqCtrl_NodeState startExecuteChilds( std::vector& vec); //开始处理并行节点的 结果 virtual ESeqCtrl_NodeState startAsyncExecuteChilds( std::vector& vec); ESeqCtrl_NodeState doOneFunc(CNodeFunc& func, std::vector& vec); void changeStateToSuccess();//将状态修改为 执行成功状态 void changeStateToFailed();//将状态修改为 执行失败 void changeStateToStop();//将状态修改 终止 //用来计算 并行功能 的最终顺控状态 ESeqCtrl_NodeState getAsyncResultState( ESeqCtrl_NodeState oldState, ESeqCtrl_NodeState newState); bool updateSeqHistory();//更新历史表 private: bool addSeqHistory();//增加历史表 bool updateSeqRunning(bool onlyState = true);//运行状态变化 void notifyStateToHmi();//通知状态变更到hmi void clearAsyncVec(std::vector& vec); ESeqCtrl_NodeState doOneSysncFunc(CNodeFunc& func); ESeqCtrl_NodeState doOneAsysncFunc(CNodeFunc& func, std::vector& vec); protected: CNodeSeq& m_objSeq; std::vector m_vecAsyncThreads; };