66 lines
1.9 KiB
C
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;
|
|||
|
|
};
|