#pragma once
|
#include "Log.h"
|
#include "CCLinkIEControl.h"
|
#include "CEqModeStep.h"
|
#include "CEqStatusStep.h"
|
#include "CEqAlarmStep.h"
|
#include "CEqProcessStep.h"
|
#include <map>
|
|
|
namespace SERVO {
|
#define BLOCK_BUFFER_MAX 1024
|
#define ALIVE_TIMEOUT 15
|
#define VCR_MAX 1
|
|
typedef std::function<void(void* pEiuipment, BOOL bAlive)> 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();
|
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);
|
std::map<unsigned int, CStep*>& getSteps();
|
virtual void init();
|
virtual void term();
|
virtual void onTimer(UINT nTimerid);
|
virtual void serialize(CArchive& ar);
|
virtual void onReceiveLBData(const char* pszData, size_t size);
|
|
|
// ÒÔÏÂΪ´Ó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); }
|
|
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;
|
|
// ÒÔÏÂΪ´Ó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<unsigned int, CStep*> m_mapStep;
|
int m_nBaseAlarmId;
|
};
|
}
|