#pragma once #include "Log.h" #include "CCLinkIEControl.h" #include "CSample.h" #include "CPin.h" #include "CEqModeStep.h" #include "CEqStatusStep.h" #include "CEqAlarmStep.h" #include "CEqProcessStep.h" #include "CEqCimModeChangeStep.h" #include "CEqModeChangeStep.h" #include "CEqCimMessageCmdStep.h" #include "CEqCimMessageClearStep.h" #include "CEqDateTimeSetCmdStep.h" #include "CEqVCREnableStep.h" #include "CEqPortChangeStep.h" #include "CEqReadIntStep.h" #include "CEqCassetteTransferStateStep.h" #include "CEqCassetteCtrlCmdStep.h" #include "CEqJobEventStep.h" #include "CEqVcrEventStep.h" #include "CEqCurrentRecipeChangeStep.h" #include "CEqWriteStep.h" #include "CEqReadStep.h" #include #include #include #include "CGlass.h" #include "CRecipesManager.h" namespace SERVO { #define BLOCK_BUFFER_MAX 1024 #define ALIVE_TIMEOUT 15 #define VCR_MAX 1 typedef std::function ONALIVE; typedef std::function ONDATACHANGED; typedef std::function ONALARM; typedef std::function ONVCREVENTREPORT; typedef struct _EquipmentListener { ONALIVE onAlive; ONALIVE onCimStateChanged; ONALARM onAlarm; ONDATACHANGED onDataChanged; ONVCREVENTREPORT onVcrEventReport; } EquipmentListener; // Memory Block ½á¹¹Ì嶨Òå typedef struct _MemoryBlock { unsigned int type; unsigned int start; unsigned int end; unsigned int size; char buffer[BLOCK_BUFFER_MAX]; } MemoryBlock; // ALIVE typedef struct _ALIVE { BOOL flag; int count; BOOL alive; } ALIVE; class CEquipment { public: CEquipment(); virtual ~CEquipment(); public: virtual const char* getClassName() = 0; virtual void setListener(EquipmentListener listener); void setCcLink(CCCLinkIEControl* pCcLink); void setBaseAlarmId(int nBaseId); int getBaseAlarmId(); void setID(int nID); int getID(); void setName(const char* pszName); std::string& getName(); void setDescription(const char* pszDescription); std::string& getDescription(); void setStation(int network, int station); const StationIdentifier& getStation(); virtual void getAttributeVector(CAttributeVector& attrubutes); void setReadBitBlock(unsigned int start, unsigned int end); MemoryBlock& getReadBitBlock(); void setWriteBitBlock(unsigned int start, unsigned int end); MemoryBlock& getWriteBitBlock(); void getProperties(std::vector>& container); int addStep(unsigned int addr, CStep* pStep); CStep* getStep(unsigned int addr); CStep* getStepWithName(const char* pszName); std::map& getSteps(); virtual void init(); virtual void term(); virtual void initPins() = 0; virtual void initSteps(); virtual void onTimer(UINT nTimerid); virtual void serialize(CArchive& ar); virtual void onReceiveLBData(const char* pszData, size_t size); virtual int onStepEvent(CStep* pStep, int code); virtual CPin* addPin(PinType type, char* pszName); CPin* getPin(char* pszName); std::vector& CEquipment::getInputPins(); std::vector& CEquipment::getOutputPins(); virtual int recvIntent(CPin* pPin, CIntent* pIntent); virtual BOOL glassWillArrive(CGlass* pGlass); virtual int outputGlass(int port); virtual int glassArrived(CGlass* pGlass); void getGlassList(std::list& list); CGlass* getFrontGlass(); BOOL removeClass(CGlass* pGlass); bool isAlarmStep(SERVO::CStep* pStep); bool isVcrEventStep(SERVO::CStep* pStep); bool isCassetteTransferStateStep(SERVO::CStep* pStep); bool isPortTypeStep(SERVO::CStep* pStep); bool isPortModeStep(SERVO::CStep* pStep); bool isPortCassetteTypeStep(SERVO::CStep* pStep); bool isPortTransferModeStep(SERVO::CStep* pStep); bool isPortEnableStep(SERVO::CStep* pStep); bool isPortTypeAutoChangeEnableStep(SERVO::CStep* pStep); bool isCimMessageConfirmStep(SERVO::CStep* pStep); int setEqMode(short mode); int setCimMode(BOOL bOn); int setCimMessage(const char* pszMessage, short id, short nTouchPanelNo); int clearCimMessage(short id, short nTouchPanelNo); int setDateTime(short year, short month, short day, short hour, short minute, short second); // ÇëÇóÖ÷Åä·½Áбí // unitNo: 0:local; Others:unit No int masterRecipeListRequest(short unitNo); // ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ¼ì²âº¯Êý public: BOOL isAlive(); BOOL isCimOn(); BOOL isUpstreamInline(); BOOL isDownstreamInline(); BOOL isLocalAlarm(); BOOL isAutoRecipeChange(); BOOL isVCREnable(unsigned int index); protected: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } BOOL isBitOn(const char* pszData, size_t size, int index); inline BOOL equalBool(BOOL b1, BOOL b2); void addGlassToList(CGlass* pGlass); int decodeRecipeListReport(const char* pszData, size_t size); protected: EquipmentListener m_listener; int m_nID; std::string m_strName; std::string m_strDescription; CRITICAL_SECTION m_criticalSection; StationIdentifier m_station; MemoryBlock m_blockReadBit; MemoryBlock m_blockWriteBit; std::vector m_inputPins; std::vector m_outputPins; std::list m_glassList; // ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ protected: ALIVE m_alive; BOOL m_bCimState; // ON/OFF BOOL m_bUpstreamInline; BOOL m_bDownstreamInline; BOOL m_bLocalAlarm; BOOL m_bAutoRecipeChange; BOOL m_bVCREnable[VCR_MAX]; protected: CCCLinkIEControl* m_pCclink; std::map m_mapStep; int m_nBaseAlarmId; CRecipesManager m_recipesManager; }; }