SDC C-Project CF Review 프로그램
LYW
2021-08-25 03152a241b9463c582b56896f5f5f73717497ab4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#pragma once
 
 
#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);
    }
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;
};
 
 
 
 
#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;};
protected:
    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;
    
};