#pragma once
|
|
#define USE_NETWORKTCP_AOI 0
|
#define USE_NETWORKTCP_Review 1
|
|
#if (USE_NETWORKTCP_AOI || USE_NETWORKTCP_Review)
|
|
|
|
#include "akNetwork/akTCPServer.h"
|
#include "akNetwork/akTCPSocket.h"
|
//#include "akAOISharedSystemTCP.h"
|
#endif
|
|
#include <vector>
|
|
#define INA_SIGNALNUM 32
|
#define INA_MAXMODULENUM 4
|
#define INA_MAXDEFECTNUM 1024
|
|
|
//¸ðµç ÁÂÇ¥ µ¥ÀÌÅÍÀÇ ´ÜÀ§´Â um [±èÅÂÇö 2018/9/10]
|
|
//m_nSignal ÀÇ¹Ì [±èÅÂÇö 2018/9/10]
|
//Review°¡ AOIÀÇ ½Ã±×³ÎÀ» °¨Áö Çϱâ À§Çؼ´Â m_ProtocalAOI.m_nSignal »óŸ¦ ½Ç½Ã°£ °¨Áö ÇÏ´Â ¹æ½Ä
|
|
struct _ProtocolAOI
|
{
|
public:
|
_ProtocolAOI()
|
{
|
memset(m_nSignal, 0, sizeof(char)*INA_SIGNALNUM);
|
|
};
|
public:
|
/*
|
Signal ÀúÀÇ
|
0 : GlassLoading
|
1 : ScanReady
|
2 : ScanStart
|
10 : ModuleMove
|
*/
|
char m_nSignal[INA_SIGNALNUM];
|
|
public:
|
int m_nModuleMoveX; //±Û¶ó½º ÁÂÇ¥ [±èÅÂÇö 2018/9/10]
|
int m_nModuleMoveY;
|
};
|
|
|
struct _ProtocalReviewModlueData
|
{
|
//¸ðµâ ÇöÀç ÁÂÇ¥ [±èÅÂÇö 2018/9/10]
|
int m_nModuleGlassPosX;
|
int m_nModuleGlassPosY;
|
|
int m_nPlanDefectCount; //¸®ºäÇÒ °áÇÔ °¹¼ö [±èÅÂÇö 2018/9/10]
|
int m_nReviewedDefectCount; //¸®ºäÇÑ °áÇÔ °¹¼ö
|
|
//¸®ºäÇÒ °áÇÔ À§Ä¡ [±èÅÂÇö 2018/9/10]
|
int m_nPlanReviewPosX[INA_MAXDEFECTNUM];
|
int m_nPlanReviewPosY[INA_MAXDEFECTNUM];
|
};
|
|
struct _ProtocolReview
|
{
|
public:
|
_ProtocolReview()
|
{
|
memset(m_nSignal, 0, sizeof(char)*INA_SIGNALNUM);
|
|
m_nModuleNum = 0;
|
memset(m_ModuleData, 0, sizeof(_ProtocalReviewModlueData)*INA_MAXMODULENUM);
|
}
|
|
_ProtocalReviewModlueData* GetModuleData(int nModuleIdx)
|
{
|
if (nModuleIdx>=INA_MAXMODULENUM) return NULL;
|
|
return &(m_ModuleData[nModuleIdx]);
|
}
|
|
|
void SetModuleNum(int nModuleNum)
|
{
|
TRACE("SetModuleNum\n");
|
m_nModuleNum = nModuleNum;
|
|
|
}
|
BOOL SetModuleGlassPosX(int nModuleIdx, int nGlassPosX)
|
{
|
TRACE("SetModuleGlassPosX\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return FALSE;
|
|
pModuleData->m_nModuleGlassPosX = nGlassPosX;
|
|
return TRUE;
|
}
|
|
BOOL SetModuleGlassPosY(int nModuleIdx, int nGlassPosY)
|
{
|
TRACE("SetModuleGlassPosY\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return FALSE;
|
|
pModuleData->m_nModuleGlassPosY = nGlassPosY;
|
|
return TRUE;
|
}
|
|
BOOL SetPlanDefectNum(int nModuleIdx, int nDefectCnt)
|
{
|
TRACE("SetPlanDefectNum\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return FALSE;
|
|
pModuleData->m_nPlanDefectCount = nDefectCnt;
|
return TRUE;
|
}
|
|
BOOL SetReviewedDefectNum(int nModuleIdx, int nReviewedDefectCnt)
|
{
|
TRACE("SetReviewedDefectNum\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return FALSE;
|
|
pModuleData->m_nReviewedDefectCount = nReviewedDefectCnt;
|
|
return TRUE;
|
}
|
|
BOOL SetPlanReviewPos(int nModuleIdx, int nDefectIdx, int nDefectPosX, int nDefectPosY)
|
{
|
TRACE("SetPlanReviewPos\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL || nDefectIdx>=INA_MAXDEFECTNUM) return FALSE;
|
|
pModuleData->m_nPlanReviewPosX[nDefectIdx] = nDefectPosX;
|
pModuleData->m_nPlanReviewPosY[nDefectIdx] = nDefectPosY;
|
|
return TRUE;
|
}
|
|
int GetReviewedDefectNum(int nModuleIdx)
|
{
|
TRACE("GetReviewedDefectNum\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return -1;
|
|
return pModuleData->m_nReviewedDefectCount;
|
}
|
int GetPlanDefectCount(int nModuleIdx)
|
{
|
TRACE("GetPlanDefectCount\n");
|
_ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx);
|
if (pModuleData==NULL) return -1;
|
|
return pModuleData->m_nPlanDefectCount;
|
}
|
|
public:
|
/*
|
Signal Á¤ÀÇ
|
0 : GlassLoading
|
1 : GlassLoading Complete
|
2 : Align Ready
|
3 : Align Complete
|
5 : ReviewEnd
|
|
*/
|
char m_nSignal[INA_SIGNALNUM];
|
|
//Review Data Section
|
public:
|
int m_nModuleNum;
|
_ProtocalReviewModlueData m_ModuleData[INA_MAXMODULENUM];
|
};
|
|
struct _IPCAOISystem
|
{
|
public:
|
_ProtocolAOI m_ProtocolAOI;
|
_ProtocolReview m_ProtocolReview;
|
};
|
|
|
|
interface akAOISharedParent
|
{
|
//INA_2_P : IIPCNetAOI to Parent
|
virtual void INA2P_RecvSignal(int nSystemType, int nSignal, int nParam1, int nParam2) = 0;
|
};
|
//
|
//interface IIPCNetAOI2Parent
|
//{
|
// //INA_2_P : IIPCNetAOI to Parent
|
// virtual void INA2P_RecvSignal(int nSystemType, int nSignal, int nParam1, int nParam2) = 0;
|
//};
|
|
|
#define UM_IPCNETAOISYSTEM WM_USER+0x1010
|
class CakAOISharedSystem
|
{
|
public:
|
CakAOISharedSystem(void);
|
virtual ~CakAOISharedSystem(void);
|
|
public:
|
enum emSystemType
|
{
|
ST_AOI = 0,
|
ST_Review = 1
|
};
|
public:
|
virtual bool Create(CWnd* pParent, emSystemType SystemType);
|
//½Ã±×³ÎÀÌ »ì¾Æ ÀÖÀ¸¸é return °ªÀÌ false [±èÅÂÇö 2018/9/10]
|
bool SetSignal(emSystemType nSystemType, int nSignalIndex, int nTimeMS = 500);
|
|
virtual void RecvSignal(emSystemType nSystemType, int nSignal);
|
|
_ProtocolAOI* getAOIProtocol(){return m_pIPCAOISystem ? &m_pIPCAOISystem->m_ProtocolAOI : NULL;};
|
_ProtocolReview* getReviewProtocol(){return m_pIPCAOISystem ? &m_pIPCAOISystem->m_ProtocolReview : NULL;};
|
|
void SetINA2P(akAOISharedParent* pAOS2P) { m_pAOS2P = pAOS2P; }//20191017
|
//void SetINA2P(IIPCNetAOI2Parent* pINA2P) { m_pINA2P = pINA2P; }
|
protected:
|
|
akAOISharedParent* m_pAOS2P; //20191017
|
//IIPCNetAOI2Parent* m_pINA2P;
|
static void threadSignal(void* arg);
|
virtual void processSignal();
|
|
protected:
|
struct _SignalTimerOff
|
{
|
_SignalTimerOff()
|
{
|
nTimeBitOff = 0;
|
pSignal = NULL;
|
}
|
DWORD nTimeBitOff; //Á¾·á ½Ã°£
|
char* pSignal;
|
};
|
|
|
protected:
|
emSystemType m_SystemType;
|
|
_IPCAOISystem* m_pIPCAOISystem;
|
int m_nThreadSignalFlag;
|
CRITICAL_SECTION m_csSignalProcess;
|
CMutex m_mxSignalProcess;
|
HANDLE m_hMapIPCAOISystem;
|
|
CWnd* m_pParent;// ¸Þ¼¼Áö Àü´Þ ´ë»ó
|
std::vector<_SignalTimerOff> m_vecSignalTimeOff;
|
|
//tcp/ip Åë½Å °ü·Ã [±èÅÂÇö2019/8/29]
|
public:
|
BOOL m_bUnuseTCPServer;
|
protected:
|
static void RecvMsgTCP(char* pMsg, int nMsglen, void* data);
|
|
#if USE_NETWORKTCP_AOI
|
_IPCAOISystem* m_pIPCAOISystemPre;
|
std::vector<int> m_vecSyncDataBuffer;
|
CakTCPServer m_TCP;
|
#else if USE_NETWORKTCP_Review
|
_IPCAOISystem* m_pIPCAOISystemPre;
|
std::vector<int> m_vecSyncDataBuffer;
|
CakTCPSocket m_TCP;
|
#endif
|
|
};
|