#pragma once #include "CCLinkIEControl.h" #include "CAttributeVector.h" namespace SERVO { typedef std::function ONSTEPEVENT; typedef struct _StepListener { ONSTEPEVENT onEvent; } StepListener; class CEquipment; class CStep { public: CStep(); virtual ~CStep(); public: unsigned WorkingProc(); void setListener(StepListener listener); void setCcLink(CCCLinkIEControl* pCcLink); void setEquipment(CEquipment* pEquipment); CEquipment* getEquipment(); void setName(const char* pszName); std::string& getName(); virtual void getAttributeVector(CAttributeVector& attrubutes); virtual void setWriteSignalDev(int dev); virtual void init(); virtual void CStep::term(); virtual void onSignal(BOOL bSignal); virtual int onReadData(); virtual int onComplete(); virtual int onTimeout(); protected: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } inline void nextStep(); inline void resetStep(); void convertString(const char* pszBuffer, int size, std::string& strOut); protected: StepListener m_listener; StationIdentifier m_station; std::string m_strName; CEquipment* m_pEquipment; CCCLinkIEControl* m_pCclink; CRITICAL_SECTION m_criticalSection; HANDLE m_hWorkThreadHandle; unsigned m_nWordThreadAddr; HANDLE m_hWorkStop; HANDLE m_hSignalOn; HANDLE m_hSignalOff; int m_nCurStep; int m_nWriteSignalDev; // ¶Ô·½BITµØÖ· }; }