#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" #endif #include #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); memset(m_ModuleData, 0, sizeof(_ProtocalReviewModlueData)*INA_MAXMODULENUM); m_nModuleNum = 0; } _ProtocalReviewModlueData* GetModuleData(int nModuleIdx) { if (nModuleIdx>=INA_MAXMODULENUM) return NULL; return &(m_ModuleData[nModuleIdx]); } void SetModuleNum(int nModuleNum) { m_nModuleNum = nModuleNum; } BOOL SetModuleGlassPosX(int nModuleIdx, int nGlassPosX) { _ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx); if (pModuleData==NULL) return FALSE; pModuleData->m_nModuleGlassPosX = nGlassPosX; return TRUE; } BOOL SetModuleGlassPosY(int nModuleIdx, int nGlassPosY) { _ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx); if (pModuleData==NULL) return FALSE; pModuleData->m_nModuleGlassPosY = nGlassPosY; return TRUE; } BOOL SetPlanDefectNum(int nModuleIdx, int nDefectCnt) { _ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx); if (pModuleData==NULL) return FALSE; pModuleData->m_nPlanDefectCount = nDefectCnt; return TRUE; } BOOL SetReviewedDefectNum(int nModuleIdx, int nReviewedDefectCnt) { _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) { _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) { _ProtocalReviewModlueData* pModuleData = GetModuleData(nModuleIdx); if (pModuleData==NULL) return -1; return pModuleData->m_nReviewedDefectCount; } int GetPlanDefectCount(int nModuleIdx) { _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 */ public: 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 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 akIPCNetAOISystem { public: akIPCNetAOISystem(void); virtual ~akIPCNetAOISystem(void); public: enum emSystemType { ST_AOI = 0, ST_Review = 1 }; public: bool Create(CWnd* pParent); //½Ã±×³ÎÀÌ »ì¾Æ ÀÖÀ¸¸é 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(IIPCNetAOI2Parent* pINA2P) { m_pINA2P = pINA2P; } protected: IIPCNetAOI2Parent* m_pINA2P; static void threadSignal(void* arg); void processSignal(); protected: struct _SignalTimerOff { _SignalTimerOff() { nTimeBitOff = 0; pSignal = NULL; } DWORD nTimeBitOff; //Á¾·á ½Ã°£ char* pSignal; }; protected: _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 m_vecSyncDataBuffer; CakTCPServer m_TCP; #else if USE_NETWORKTCP_Review _IPCAOISystem* m_pIPCAOISystemPre; std::vector m_vecSyncDataBuffer; CakTCPSocket m_TCP; #endif };