#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 #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 m_vecSyncDataBuffer; CakTCPServer m_TCP; #else if USE_NETWORKTCP_Review _IPCAOISystem* m_pIPCAOISystemPre; std::vector m_vecSyncDataBuffer; CakTCPSocket m_TCP; #endif };