#pragma once
|
#include "Component.h"
|
#include <vector>
|
#include <functional>
|
#include "CPLC.h"
|
#include <list>
|
#include <map>
|
#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<void(void* pFrom, int)> ONBONDSTATECHANGED;
|
typedef std::function<void(void* pFrom, int)> ONPLCSTATECHANGED;
|
typedef std::function<void(void* pFrom, int)> ONCIMSTATECHANGED;
|
typedef std::function<void(void* pFrom, const char* pszAddr, int port, int)> ONEFEMSTATECHANGED;
|
typedef std::function<void(void* pFrom, void*)> 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<CComponent*>& 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<CComponent*> 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<int, CRecipe*> m_recipes;
|
std::string m_strCurRecipeName;
|
};
|