66 lines
1.9 KiB
C++

#pragma once
/*!
* @breif 顺控 处理方法
*
* @author sjq
* @date 五月 2018
*/
#include <vector>
#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<CMethodFuncAsync* >& vec);
//开始处理并行节点的 结果
virtual ESeqCtrl_NodeState startAsyncExecuteChilds(
std::vector<CMethodFuncAsync* >& vec);
ESeqCtrl_NodeState doOneFunc(CNodeFunc& func,
std::vector<CMethodFuncAsync* >& 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<CMethodFuncAsync* >& vec);
ESeqCtrl_NodeState doOneSysncFunc(CNodeFunc& func);
ESeqCtrl_NodeState doOneAsysncFunc(CNodeFunc& func,
std::vector<CMethodFuncAsync* >& vec);
protected:
CNodeSeq& m_objSeq;
std::vector<CMethodFuncAsync* > m_vecAsyncThreads;
};