#pragma once #include "Component.h" #include #include #include "CPLC.h" #include #include #include "Recipe.h" #define ER_NOERROR 0 #define ER_NOTSELECT -1 #define ER_BUSY -2 #define STATE_READY 0 /* ¾ÍÐ÷ */ #define STATE_RUNNING 1 /* ÔËÐÐÖÐ */ #define STATE_STOP 2 /* Í£Ö¹ */ #define STATE_ERROR 3 /* ·¢Éú¹ÊÕÏ */ typedef std::function ONBONDSTATECHANGED; typedef std::function ONPLCSTATECHANGED; typedef std::function ONCIMSTATECHANGED; typedef std::function ONEFEMSTATECHANGED; typedef std::function ONRECVBROADCAST; typedef struct _BondListener { ONBONDSTATECHANGED onStateChanged; ONPLCSTATECHANGED onPlcStateChanged; ONCIMSTATECHANGED onCimStateChanged; ONEFEMSTATECHANGED onEfemStateChanged; ONRECVBROADCAST onRecvBroadcast; } BondListener; class CBonder { public: CBonder(); virtual ~CBonder(); public: void setListener(BondListener& listener); void setWorkDir(const char* pszWorkDir); const std::vector& getComponents(); int init(); int term(); void sendBroadcast(CComponent* pSender, CIntent* pIntent); void onRecvBroadcast(CComponent* pSender, CIntent* pIntent); int start(); int stop(); int clearError(); BOOL isRunning(); ULONGLONG getRunTime(); void onTimer(UINT nTimerid); int save(); int read(const char* pszFilepath); void setUnitId(const char* pszUnitId); void setEquipmentModelType(const char* pszModelType); void setSoftRev(const char* pszSoftRev); CComponent* GetComponent(const char* pszName);; int getRecipeList(); int getRecipeListInBlock(BEQ::IEquipment* pEquipment, BEQ::IUnit* pUnit); int runRecipe(BEQ::IUnit* pUnit, int id); UINT GetRecipeListThreadFunction(BEQ::IEquipment* pEquipment, BEQ::IUnit* pUnit); int loadReady(BEQ::IUnit* pUnit, const char* pszMaterielId, const char* pszRecipeId); int loadComplete(BEQ::IUnit* pUnit, int layer); int unloadComplete(BEQ::IUnit* pUnit, int layer); public: int writeInt(int unitId, int addr, int value); int writeData(MC::SOFT_COMPONENT softComponent, unsigned int addr, const char* pszData, unsigned int length, ONWRITE funOnWrite); int readData(MC::SOFT_COMPONENT softComponent, unsigned int addr, unsigned int length, ONREADDATA funOnRead); BOOL readDataBlocking(HANDLE hEvent, MC::SOFT_COMPONENT softComponent, unsigned int addr, unsigned int readLen, char* pszBuffer); private: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } void AddComponent(CComponent* pComponent); void Serialize(CArchive& ar); unsigned int getSystemByte(); const char* getCeidDataId(); CRecipe* getRecipe(int id); void clearRecipes(); public: BEQ::IEquipment* getEquipment(); BEQ::IUnit* getUnit(int index); std::string& getCurRecipeName(); private: std::string m_strWorkDir; std::vector m_components; int m_state; ULONGLONG m_ullRunTime; ULONGLONG m_ullStartTick; CRITICAL_SECTION m_criticalSection; BondListener m_listener; private: std::string m_strFilepath; std::string m_strUnitId; std::string m_strEquipmentModelType; std::string m_strSoftRev; BOOL m_bAreYouThereRequest; private: char* m_pPlcData; BEQ::IEquipment* m_pEquipment; std::map m_recipes; std::string m_strCurRecipeName; };