#pragma once #include "Log.h" #include "ServoCommo.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" #include "CJobDataA.h" #include "CJobDataB.h" #include "CJobDataC.h" #include "CJobDataS.h" #include "CProcessData.h" #include "CPortStatusReport.h" #include "CSlot.h" namespace SERVO { #define SLOT_MAX PATH_MAX #define SIGNAL_UPSTREAM_INLINE 0 #define SIGNAL_UPSTREAM_TROUBLE 1 #define SIGNAL_INTERLOCK 2 #define SIGNAL_SEND_ABLE 3 #define SIGNAL_RECEIVE_ABLE 3 typedef std::function ONWRITEDRET; typedef std::function ONALIVE; typedef std::function ONDATACHANGED; typedef std::function ONALARM; typedef std::function ONVCREVENTREPORT; typedef std::function ONPREFETCHEDOUTJOB; typedef std::function ONPRESTOREDJOB; typedef std::function ONPROCESSSTATE; typedef std::function ONMAPMISMATCH; typedef struct _EquipmentListener { ONALIVE onAlive; ONALIVE onCimStateChanged; ONALARM onAlarm; ONDATACHANGED onDataChanged; ONVCREVENTREPORT onVcrEventReport; ONPREFETCHEDOUTJOB onPreFethedOutJob; ONPRESTOREDJOB onPreStoredJob; ONPROCESSSTATE onProcessStateChanged; ONMAPMISMATCH onMapMismatch; } EquipmentListener; class CEquipment { public: CEquipment(); virtual ~CEquipment(); public: virtual const char* getClassName() = 0; virtual void setListener(EquipmentListener listener); void setCcLink(CCCLinkIEControl* pCcLink); virtual BOOL isArm() { return FALSE; }; void setArm(CEquipment* pEquipment); CEquipment* getArm(); 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 initSlots() = 0; 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); virtual short getSlotUnit(short slotNo) { return 0; }; CPin* getPin(char* pszName); std::vector& CEquipment::getInputPins(); std::vector& CEquipment::getOutputPins(); CRecipeList* getRecipeList(int unitNo); virtual int recvIntent(CPin* pPin, CIntent* pIntent); virtual int fetchedOutJob(int port, CJobDataB* pJobDataB); virtual int storedJob(int port, CJobDataB* pJobDataB, short putSlot); virtual int onReceivedJob(int port, CJobDataS* pJobDataS); virtual int onSentOutJob(int port, CJobDataS* pJobDataS); virtual BOOL onPreFetchedOutJob(int port, CJobDataB* pJobDataB); virtual int onFetchedOutJob(int port, CJobDataB* pJobDataB); virtual BOOL onPreStoredJob(int port, CJobDataB* pJobDataB, short& putSlot); virtual int onStoredJob(int port, CJobDataB* pJobDataB); virtual int onProcessData(CProcessData* pProcessData); virtual int onSendAble(int port); virtual int onReceiveAble(int port); virtual int onProcessStateChanged(PROCESS_STATE state); virtual int getIndexerOperationModeBaseValue(); virtual bool isSlotProcessed(int slot) { return true; }; 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); int setDispatchingMode(DISPATCHING_MODE mode, ONWRITED onWritedBlock = nullptr); int indexerOperationModeChange(IDNEXER_OPERATION_MODE mode, ONWRITEDRET onWritedRetBlock); void printDebugString001(); // ÇëÇóÖ÷Åä·½Áбí // unitNo: 0:local; Others:unit No int masterRecipeListRequest(short unitNo, ONSYNCINGSTATECHANGED block); // ÇëÇóÅä·½²ÎÊý // masterRecipeId: Ö÷Åä·½id // localRecipeId: ±¾µØÅä·½id // unitNo: 0:local; Others:unit No int recipeParameterRequest(short masterRecipeId, short localRecipeId, short unitNo); // »ñȡָ¶¨µÄSlot CSlot* getSlot(int index); // »ñȡһ¸ö¿ÉÓõIJÛλ CSlot* getAvailableSlot(); // »ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄ¿Õ²Ûλ CSlot* getAvailableSlotForGlass(MaterialsType type); CSlot* getAvailableSlotForGlassExcludeSignal(MaterialsType type); // ÔÚÖ¸¶¨µÄ²ÛÁбíÖУ¬»ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄ¿Õ²Ûλ CSlot* getAvailableSlotForGlass2(MaterialsType type, const std::vector& candidates); // »ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄ·Ç¿Õ²Ûλ CSlot* getNonEmptySlot(MaterialsType type); // »ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄÇÒÒѾ­¼Ó¹¤´¦ÀíµÄ²Ûλ CSlot* getProcessedSlot(MaterialsType putSlotType); CSlot* getProcessedSlot2(MaterialsType putSlotType, const std::vector& candidates); CSlot* getInspFailSlot(); // »ñÈ¡²£Á§ÎïÁÏ CGlass* getGlassFromSlot(int slotNo); CGlass* getGlassWithCassette(int cassetteSequenceNo, int jobSequenceNo); CGlass* getAnyGlass(); CGlass* getGlass(const char* pszGlassId); CJobDataS* getJobDataSWithCassette(int cassetteSequenceNo, int jobSequenceNo); // ÑéÖ¤²£Á§ºÍ²ÛÊÇ·ñÆ¥Åä BOOL ValidateGlassSlotMatch(); // ÊÇ·ñÓв£Á§ BOOL hasGlass(); // Ö¸¶¨²ÛλÊÇ·ñ¿ÉÒÔ·ÅÖò£Á§ BOOL canPlaceGlassInSlot(const short slotIndex); // ÊÖ¶¯ÒƳýÎïÁÏ int removeGlass(int slotNo); // ×Ö·û´®¼ì²â½á¹ûת»» InspResult judgeStringToInspResult(std::string& strJudge); // ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ¼ì²âº¯Êý public: BOOL isAlive(); BOOL isCimOn(); BOOL isUpstreamInline(); BOOL isDownstreamInline(); BOOL isLocalAlarm(); BOOL isAutoRecipeChange(); BOOL isVCREnable(unsigned int index); BOOL isLinkSignalUpstreamOn(unsigned int path, unsigned int signal); BOOL isLinkSignalDownstreamOn(unsigned int path, unsigned int signal); // Ö»ÔÚÄ£Äâ²âÊÔʱʹÓõĺ¯Êý£¬ÓÃÓÚÄ£ÄâÐźŠvoid setLinkSignalUpstream(unsigned int path, unsigned int signal, BOOL bOn); void setLinkSignalUpstreamBlock(unsigned int path, BOOL* pSignal); void setLinkSignalDownstream(unsigned int path, unsigned int signal, BOOL bOn); void setLinkSignalDownstreamBlock(unsigned int path, BOOL* pSignal); 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); short decodeRecipeListReport(const char* pszData, size_t size); short decodeRecipeParameterReport(const char* pszData, size_t size); int decodeProcessDataReport(CStep* pStep, const char* pszData, size_t size); int decodeReceivedJobReport(CStep* pStep, int port, const char* pszData, size_t size); int decodeSentOutJobReport(CStep* pStep, int port, const char* pszData, size_t size); int decodeFetchedOutJobReport(CStep* pStep, int port, const char* pszData, size_t size); int decodeStoredJobReport(CStep* pStep, int port, const char* pszData, size_t size); int decodeVCREventReport(CStep* pStep, const char* pszData, size_t size); int decodePanelDataReport(CStep* pStep, const char* pszData, size_t size); int decodeFacDataReport(CStep* pStep, const char* pszData, size_t size); int decodeJobDataRequest(CStep* pStep, const char* pszData, size_t size); int decodeJobProcessStartReport(CStep* pStep, const char* pszData, size_t size); int decodeJobProcessEndReport(CStep* pStep, const char* pszData, size_t size); BOOL compareJobData(CJobDataB* pJobDataB, CJobDataS* pJobDataS); void setProcessState(PROCESS_STATE state); 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; // ÒÔÏÂΪ´Ó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]; BOOL m_bLinkSignalToUpstream[PATH_MAX][SIGNAL_MAX]; BOOL m_bLinkSignalToDownstream[PATH_MAX][SIGNAL_MAX]; protected: CCCLinkIEControl* m_pCclink; std::map m_mapStep; int m_nBaseAlarmId; CRecipesManager m_recipesManager; CSlot m_slot[SLOT_MAX]; PROCESS_STATE m_processState; private: CEquipment* m_pArm; }; }