#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 USSM_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // USSM_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef USSM_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "UsSMX64D.lib") #else #pragma comment(lib, "UsSMX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "UsSMD.lib") #else #pragma comment(lib, "UsSM.lib") #endif #endif #endif #ifdef USSM_EXPORTS #define USSM_API __declspec(dllexport) #define USSM_C_API extern "C" __declspec(dllexport) #else #define USSM_API __declspec(dllimport) #define USSM_C_API extern "C" __declspec(dllimport) #endif #include "DiosSMachine.h" #include "US_Model_Def.h" //事件-------------------------- //这些事件的值保留为空 #define DiosEvtSeqReady "ReadySeqEvt" #define DiosEvtSeqEnd "EndSeqEvt" #define DiosEvtSeqPost "SeqPostEvt" #define DiosEvtFramePrep "FramePrepEvt" #define DiosEvtFrameReady "FrameReadyEvt" //#define DiosEvtFrameProcess "FrameProcEvt" #define DiosEvtFrameEnd "FrameEndEvt" #define DiosEvtSeqExit "ExitSeqEvt" //Recover相关 #define DiosEvtSeqRecover "SeqRecoverEvt" #define DiosEvtFrameRecover "FrameRecoverEvt" //错误事件定义在DiosSMachine.h中 //{"Error":"Frame"} 或 {"Error":"Seq"} //状态点-------------------------- #define DiosPosSeqPrep "SeqPrep" #define DiosPosSeqPost "SeqPost" #define DiosPosSeqEnd "SeqEnd" #define DiosPosSeqReady "SeqReady" #define DiosPosFramePrep "FramePrep" #define DiosPosFrameReady "FrameReady" #define DiosPosFramePost "FramePost" #define DiosPosFrameError "FrameError" #define DiosPosFrameRecover "FrameRecover" #define DiosPosSeqError "SeqError" #define DiosPosSeqRecover "SeqRecover" //子状态机状态点-------------------------- #define DiosSubAcqStateMachine "FrameAcquiring" #define DiosPosFrameStart "FrameStart" #define DiosPosFrameAcq "FrameAcq" #define DiosPosFrameFreeze "FrameFreeze" #define DiosPosFramePause "FramePause" #define DiosPosFrameEnd "FrameEnd" //子状态机事件-------------------------- #define DiosEvtStopAcq "StopAcqEvt" class USSM_API USAcqSystem : public DiosSubSMachine { void InitUSAcqSystem(); public: USAcqSystem(void); USAcqSystem(const char *pName); virtual ~USAcqSystem(); //Active得根据设备单元的属性,自行调整了 //Actions---------------------------------------------------------------------- //Entry&Exit Action virtual DIOSSTMRET StateMachineEntry(DWORD timeout);//Begin状态点 virtual DIOSSTMRET StateMachineExit(DWORD timeout);//End状态点 //RoutePos Action virtual DIOSSTMRET StateMachineAction(const char *pAction, DWORD timeout); virtual DIOSSTMRET StateMachineGuard(const char *pGuard, DWORD timeout); //Real Actions DIOSSTMRET FrameStart(DWORD timeout); DIOSSTMRET FrameAcq(DWORD timeout); DIOSSTMRET FrameFreeze(DWORD timeout); DIOSSTMRET FramePause(DWORD timeout); DIOSSTMRET FrameEnd(DWORD timeout); //Events---------------------------------------------------------------------- virtual int StateMachineWaitForEvents( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); int WaitFrom_FrameStart( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); int WaitFrom_FrameAcq( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); int WaitFrom_FrameFreeze( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); int WaitFrom_FramePause( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); int WaitFrom_FrameEnd( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); }; class USSM_API USSMSystem : public DiosSMachine { HANDLE m_TransPosHandle; DiosSubSMachine *m_pAcqStateMachine; public: USSMSystem(void); virtual ~USSMSystem(); virtual void StopStateMachine(DWORD timeout); HANDLE GetMachineNotifyHandle(); //Actions---------------------------------------------------------------------- //Entry&Exit Action virtual DIOSSTMRET StateMachineEntry(DWORD timeout);//Begin状态点 virtual DIOSSTMRET StateMachineExit(DWORD timeout);//End状态点 //RoutePos Action virtual DIOSSTMRET StateMachineAction(const char *pAction, DWORD timeout); virtual DIOSSTMRET StateMachineGuard(const char *pGuard, DWORD timeout); //Real Actions virtual DIOSSTMRET SeqPrep(DWORD timeout); virtual DIOSSTMRET SeqPost(DWORD timeout); virtual DIOSSTMRET SeqReady(DWORD timeout); virtual DIOSSTMRET SeqEnd(DWORD timeout); virtual DIOSSTMRET FramePrep(DWORD timeout); virtual DIOSSTMRET FrameReady(DWORD timeout); virtual DIOSSTMRET FramePost(DWORD timeout); virtual DIOSSTMRET FrameError(DWORD timeout); virtual DIOSSTMRET FrameRecover(DWORD timeout); virtual DIOSSTMRET SeqError(DWORD timeout); virtual DIOSSTMRET SeqRecover(DWORD timeout); //Events---------------------------------------------------------------------- virtual int StateMachineWaitForEvents( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqPrep( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqPost( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqReady( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqEnd( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FramePrep( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FrameReady( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FrameAcquiring( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FramePost( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FrameError( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_FrameRecover( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqError( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); virtual int WaitFrom_SeqRecover( DiosStMRouteLine *pLocalEvts[], DWORD CountOfLocal, DiosStMRouteLine *pExternalEvts[], DWORD CountOfExternal, DiosStMRouteLine *pOutpathEvts[], DWORD CountOfOutpath, DWORD timeout ); };