#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 <vector>
|
#include <map>
|
#include <list>
|
#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
|
|
typedef std::function<void(void* pEiuipment, BOOL bAlive)> ONALIVE;
|
typedef std::function<void(void* pEiuipment, int code)> ONDATACHANGED;
|
typedef std::function<void(void* pEiuipment, int state, int alarmId, int unitId, int level)> ONALARM;
|
typedef std::function<void(void* pEiuipment, void* pReport)> ONVCREVENTREPORT;
|
typedef std::function<BOOL(void* pEiuipment, CJobDataB* pJobDataB)> ONPREFETCHEDOUTJOB;
|
typedef std::function<BOOL(void* pEiuipment, CJobDataB* pJobDataB, short& putSlot)> ONPRESTOREDJOB;
|
typedef struct _EquipmentListener
|
{
|
ONALIVE onAlive;
|
ONALIVE onCimStateChanged;
|
ONALARM onAlarm;
|
ONDATACHANGED onDataChanged;
|
ONVCREVENTREPORT onVcrEventReport;
|
ONPREFETCHEDOUTJOB onPreFethedOutJob;
|
ONPRESTOREDJOB onPreStoredJob;
|
} 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<std::pair<std::string, std::string>>& container);
|
int addStep(unsigned int addr, CStep* pStep);
|
CStep* getStep(unsigned int addr);
|
CStep* getStepWithName(const char* pszName);
|
std::map<unsigned int, CStep*>& 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 slot) { return 0; };
|
CPin* getPin(char* pszName);
|
std::vector<CPin*>& CEquipment::getInputPins();
|
std::vector<CPin*>& CEquipment::getOutputPins();
|
virtual int recvIntent(CPin* pPin, CIntent* pIntent);
|
virtual int fetchedOutJob(CJobDataB* pJobDataB);
|
virtual int storedJob(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 getIndexerOperationModeBaseValue();
|
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, ONWRITED onWritedBlock = nullptr);
|
|
|
|
// ÇëÇóÖ÷Åä·½Áбí
|
// unitNo: 0:local; Others:unit No
|
int masterRecipeListRequest(short unitNo);
|
|
// ÇëÇóÅä·½²ÎÊý
|
// 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);
|
|
// ÔÚÖ¸¶¨µÄ²ÛÁбíÖУ¬»ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄ¿Õ²Ûλ
|
CSlot* getAvailableSlotForGlass2(MaterialsType type, const std::vector<int>& candidates);
|
|
// »ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄ·Ç¿Õ²Ûλ
|
CSlot* getNonEmptySlot(MaterialsType type);
|
|
// »ñȡһ¸öÖ¸¶¨ÎïÁÏÀàÐÍ(G1,G2,G1&G2)µÄÇÒÒѾ¼Ó¹¤´¦ÀíµÄ²Ûλ
|
CSlot* getProcessedSlot(MaterialsType putSlotType);
|
CSlot* getProcessedSlot2(MaterialsType putSlotType, const std::vector<int>& candidates);
|
|
// »ñÈ¡²£Á§ÎïÁÏ
|
CGlass* getGlassFromSlot(int slotNo);
|
CGlass* getAnyGlass();
|
|
// ÑéÖ¤²£Á§ºÍ²ÛÊÇ·ñÆ¥Åä
|
BOOL ValidateGlassSlotMatch();
|
|
// ÊÇ·ñÓв£Á§
|
BOOL hasGlass();
|
|
// »ñȡָ¶¨IDµÄglass
|
CGlass * getGlass(const char* pszGlassId);
|
|
// Ö¸¶¨²ÛλÊÇ·ñ¿ÉÒÔ·ÅÖò£Á§
|
BOOL canPlaceGlassInSlot(const short slotIndex);
|
|
|
// ÒÔÏÂΪ´ÓCC-Link¶ÁÈ¡µ½µÄBit±ê־λ¼ì²âº¯Êý
|
public:
|
BOOL isAlive();
|
BOOL isCimOn();
|
BOOL isUpstreamInline();
|
BOOL isDownstreamInline();
|
BOOL isLocalAlarm();
|
BOOL isAutoRecipeChange();
|
BOOL isVCREnable(unsigned int index);
|
BOOL isLinkSignalOn(unsigned int path, unsigned int signal);
|
|
// Ö»ÔÚÄ£Äâ²âÊÔʱʹÓõĺ¯Êý£¬ÓÃÓÚÄ£ÄâÐźÅ
|
void setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn);
|
void setLinkSignalBlock(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 addJobDataB(CJobDataB* pJobDataB);
|
int removeJobDataB(int nCassetteSequenceNo, int nJobSequenceNo);
|
CJobDataB* getJobDataB(int nCassetteSequenceNo, int nJobSequenceNo);
|
int addJobDataS(CJobDataS* pJobDataS);
|
int removeJobDataS(int nCassetteSequenceNo, int nJobSequenceNo);
|
CJobDataS* getJobDataS(int nCassetteSequenceNo, int nJobSequenceNo);
|
BOOL compareJobDataB(CJobDataB* pJobDataB1, CJobDataB* pJobDataB2);
|
|
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<CPin*> m_inputPins;
|
std::vector<CPin*> 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_bLinkSignal[PATH_MAX][SIGNAL_MAX];
|
|
protected:
|
CCCLinkIEControl* m_pCclink;
|
std::map<unsigned int, CStep*> m_mapStep;
|
int m_nBaseAlarmId;
|
CRecipesManager m_recipesManager;
|
CSlot m_slot[SLOT_MAX];
|
|
private:
|
CEquipment* m_pArm;
|
std::list<CJobDataS> m_listJobDataS;
|
std::list<CJobDataB> m_listJobDataB;
|
};
|
}
|