#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 #include #include #include "CPanel.h" namespace SERVO { #define BLOCK_BUFFER_MAX 1024 #define ALIVE_TIMEOUT 15 #define VCR_MAX 1 typedef std::function ONALIVE; typedef struct _EquipmentListener { ONALIVE onAlive; ONALIVE onCimStateChanged; } 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 onTimer(UINT nTimerid); virtual void serialize(CArchive& ar); virtual void onReceiveLBData(const char* pszData, size_t size); 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(CPanel* pPanel); virtual int outputGlass(int port); virtual int glassArrived(CPanel* pPanel); // ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ¼ì²âº¯Êý public: BOOL isAlive(); BOOL isCimOn(); BOOL isUpstreamInline(); BOOL isDownstreamInline(); BOOL isLocalAlarm(); BOOL isAutoRecipeChange(); BOOL isVCREnable(unsigned int index); private: BOOL isBitOn(const char* pszData, size_t size, int index); inline BOOL equalBool(BOOL b1, BOOL b2); protected: inline void Lock() { EnterCriticalSection(&m_criticalSection); } inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } void addPanelToList(CPanel* pPanel); 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_panelList; // ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ private: 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]; private: CCCLinkIEControl* m_pCclink; std::map m_mapStep; int m_nBaseAlarmId; }; }