SDC C-Project CF Review 프로그램
LYW
2021-07-01 4acd943c6f0beecd3ee573f77d8d6c7524fd5045
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
 
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이 
// 들어 있는 포함 파일입니다.
 
#pragma once
 
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
 
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#endif
 
#include "targetver.h"
 
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 일부 CString 생성자는 명시적으로 선언됩니다.
 
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
#define _AFX_ALL_WARNINGS
 
#include <afxwin.h>         // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h>         // MFC 확장입니다.
#include <afxdisp.h>        // MFC 자동화 클래스입니다.
 
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#endif // _AFX_NO_AFXCMN_SUPPORT
 
#include <afxcontrolbars.h>     // MFC의 리본 및 컨트롤 막대 지원
 
#include "resource.h"
#include "DisplayMessage.h"
#include "CHReviewResult/GlassResult.h"
#include "CHReviewSetting/MotorParameter.h"
 
#include <WinNetWk.h>
//#pragma comment(lib,"Mpr.lib")
 
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
 
// [2017:6:5]-[WEZASW] : 
// malloc 과 free Memory Leak
#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
// 
// // new Memory Leak
// #include <fstream>
// #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) 
#define REVIEW_SIMULATION_TEST_ENABLE 1
 
#define ID_TIMER_ALIVE            (WM_USER + 100)
#define ID_TIMER_DISABLE_MAG_BUTTON (WM_USER + 101)
#define ID_TIMER_AFM_ALIVE            (WM_USER + 102)
#define ID_TIMER_WSI_READY_ACK_TIME        (WM_USER + 103)
#define ID_TIMER_WSI_START_ACK_TIME        (WM_USER + 104)
#define ID_TIMER_WSI_LONGRUN_TEST_TIME        (WM_USER + 105)
#define ID_TIMER_DISABLE_AF_TRACKING_BUTTON (WM_USER + 106)
#define ID_TIMER_SEND_SIGNAL_ALIVE            (WM_USER + 107)
 
 
#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
#define _REVIEW_SERVER_LOG_PATH_                    _T("C:\\DIT_Review\\ReviewServerLog")
#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
#define _REVIEW_REF_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reference")
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _SYSTEM_SETTING_TITLE_                        _T("ReviewSystemSetting")
#define _RECIPE_EDITOR_TITLE_                        _T("ReviewRecipeEditor")
#define _REVIEW_LOGIN_LOG_PATH_                        _T("C:\\DIT_Review\\ReviewServerLog\\LoginLog")
#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_TEMPLATE_PATH                            _T("C:\\DIT_Review\\Recipe\\AlignImage")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
 
 
#define TOTAL_WINDOW_SIZE_X        1920
#define TOTAL_WINDOW_SIZE_Y        1040
 
#define TOTAL_TWO_MONITOR_WINDOW_SIZE_X        1920
#define TOTAL_TWO_MONITOR_WINDOW_SIZE_Y        1080
 
#define CAMERA_WINDOW_SIZE_X    920 //960
#define CAMERA_WINDOW_SIZE_Y    750
 
#define ALIGN_WINDOW_SIZE_X        960
#define ALIGN_WINDOW_SIZE_Y        TOTAL_WINDOW_SIZE_Y - CAMERA_WINDOW_SIZE_Y
 
 
#define OPTION_WINDOW_SIZE_X    150
#define OPTION_WINDOW_SIZE_Y    CMD_WINDOW_SIZE_Y + MAP_WINDOW_SIZE_Y
 
#define CMD_WINDOW_SIZE_X        1000
#define CMD_WINDOW_SIZE_Y        36
 
#define MAP_WINDOW_SIZE_X        840 //800
#define MAP_WINDOW_SIZE_Y        520
 
#define INFO_WINDOW_SIZE_X        386
#define INFO_WINDOW_SIZE_Y        480
 
#define TAB_WINDOW_SIZE_X        835 //795
#define TAB_WINDOW_SIZE_Y        480
 
#define GRAPH_WINDOW_SIZE_X        320
#define GRAPH_WINDOW_SIZE_Y        250
 
#define MAX_GLASS_RESULT_SIZE    30 //taek 210201 max 20개의 History를 가진다 //
#define TOTAL_GLASS_SLOT_COUNT    28
#define MAX_REVIEW_POINT_SIZE    500
 
#define LEFT_GANTRY                0
#define RIGHT_GANTRY            1
 
#define _MAGNIFICATION_X10_        0
#define _MAGNIFICATION_X20_        1
 
#define    UM_SIGNAL_SIGNAL_UPDATE            (WM_USER + 5000) // n
#define UM_PROCESS_STATUS_UPDATE        (WM_USER + 5001)
#define    UM_MOTOR_POSITION_UPDATE        (WM_USER + 5002)
#define    UM_MOTOR_STATUS_UPDATE            (WM_USER + 5003)
#define    UM_DIO_SIGNAL_UPDATE            (WM_USER + 5004)
#define UM_CONNECTION_STATUS_UPDATE        (WM_USER + 5005)
#define UM_LONG_RUN_COMMAND                (WM_USER + 5006)
#define UM_LONG_RUN_COUNT_UPDATE        (WM_USER + 5007) // n
#define UM_UPDATE_DEFECT_MAP            (WM_USER + 5008)
#define UM_SET_ALIGN_RESULT                (WM_USER + 5009) // n
#define UM_TRANSFER_DATA_UPDATE            (WM_USER + 5010) // n
#define UM_PROCESS_REMAIN_REVIEW        (WM_USER + 5011)
#define UM_PROCESS_REVIEW_START_MOTOR    (WM_USER + 5012) // n
#define UM_CAMERA_STATUS_UPDATE            (WM_USER + 5014)
#define UM_DEFECT_FILTER_UPDATE            (WM_USER + 5015)
#define UM_REVIEW_RESULT_UPDATE            (WM_USER + 5016)
#define    UM_SIGNAL_IO_SIGNAL_UPDATE        (WM_USER + 5017)
#define UM_PROCESS_REMAIN_WSI            (WM_USER + 5018)
#define UM_MODULE_CHANGE_MESSAGE        (WM_USER + 5019)
#define UM_LIGHT_LEVEL_UPDATE            (WM_USER + 5020)
#define UM_MAGNIFICATION_UPDATE            (WM_USER + 5021)
#define UM_AFM_LEVEL_UPDATE                (WM_USER + 5022)
#define UM_SELECTED_MODULE_INDEX_UPDATE (WM_USER + 5023)
#define    UM_THETA_MOTOR_INFO_UPDATE        (WM_USER + 5024)
#define UM_UPDATE_DEFECT_MAP_DEFAULT    (WM_USER + 5025)
#define UM_TEST_MESSAGE_MOVE_JOG        (WM_USER + 5026)
#define UM_REVIEW_DEFECT_RESULT_UPDATE    (WM_USER + 5027)
#define UM_WSI_RESULT_UPDATE    (WM_USER + 5028) //1218 // 포스트 메세지로 처리 
#define UM_DEFOCUS_LIST_UPDATE           (WM_USER + 5029) //20190819chm
#define UM_UPDATE_DEFECT_MAP2            (WM_USER + 5030)
#define UM_HISTORY_MOUSEWHELL            (WM_USER + 5031)
#define  WM_OFFSETTOOL_MESSAGE2 (WM_USER + 9998)
#define  WM_OFFSETTOOL_MESSAGE (WM_USER + 9999)
 
 
 
#include <GdiPlus.h>
using namespace Gdiplus;
 
static ULONG_PTR    gpGdiplusToken = NULL;
static UINT            gpGdiplusTokenCount = 0;
 
//enum PCControlStatus        { PCControl_BypassMode=0, PCControl_AutoMode, PCControl_ManualMode, PCControl_ReviewMode, PCControl_GlassLoading, PCControl_AlignStart, PCControl_AlignEnd, PCControl_ReviewStart, PCControl_ReviewEnd, PCControl_GlassUnloading, PCControl_LightON, PCControl_LightOFF };
 
 
enum PCControlSignal        { PCControlSignal_0=0, PCControlSignal_1, PCControlSignal_2, PCControlSignal_3, PCControlSignal_4, PCControlSignal_5, PCControlSignal_6, PCControlSignal_7 ,PCControlSignal_8, PCControlSignal_9, PCControlSignal_10, PCControlSignal_11, PCControlSignal_12, PCControlSignal_13, PCControlSignal_14, PCControlSignal_15, PCControlSignal_Count };
// enum LibraryType    { Lib_Simulate=0, Lib_Sapera, Lib_FlyCapture, Lib_Pylon, Lib_JAI  };
// enum LightType        { Light_SP200=0, Light_PSD1010 };
// enum RevolverType    { Revolver_Nikon=0, LinearTurret };
//enum ProcessMode    { ProcessModeNone=0, ProcessModeBypass, ProcessModeAuto, ProcessModeManual, ProcessModeReview  };
//enum ProcessStatus    { ProcessNA=-1, ProcessLoading, ProcessAlignStart, ProcessAlignEnd, ProcessReviewStart, ProcessReviewEnd, ProcessUnloading, ProcessLightOn, ProcessLightOff };
 
#define    COPYDATA_SYSTEMSETTING2REVIEWSYSTEM            1500
#define    COPYDATA_RECIPEEDITOR2REVIEWSYSTEM            1600
 
 
// [2017:1:13]-[WEZASW] : 다중 모니터에서의 ReviewSystem Display
enum MonitorPosition    {MonitorPos_CENTER=0, MonitorPos_TOP, MonitorPos_BOTTOM, MonitorPos_LEFT, MonitorPos_RIGHT, MonitorPos_Count};
 
 
#include "SequenceProcessor.h"
#include <afxcontrolbars.h>
#include <afxwin.h>
#include <afxcontrolbars.h>
#include <afxcontrolbars.h>
#include <afxcontrolbars.h>
 
enum MsgSystem2Rev
{
    MsgSystem2Rev_None = -1,
 
    MsgSystem2Rev_StandardCameraMotorPos,
    MsgRev2System_StandardCameraMotorPos,
 
    MsgSystem2Rev_FindAlignMark,
    MsgRev2System_FindAlignMark,
 
    MsgSystem2Rev_ChangeSysConfig,
    MsgRev2System_ChangeSysConfig,
 
    // [2017:5:2]-[WEZASW] : TFE Measurement 설비 UNIT Test(Signal 수동 발생)를 위한 추가
    MsgSystem2Rev_SendAlignAlarmSignal,
    MsgRev2System_SendAlignAlarmSignal,
 
    MsgSystem2Rev_SendNoPPIDSignal,
    MsgRev2System_SendNoPPIDSignal
};
 
typedef struct _COPYDATA_SYSTEM2REV
{
    _COPYDATA_SYSTEM2REV()
    {
        Message = MsgSystem2Rev_None;
        nFirstAlignFindPixelX = 0;
        nFirstAlignFindPixelY = 0;
        nSecondAlignFindPixelX = 0;
        nSecondAlignFindPixelY = 0;
        dStandardCameraMotorPosX = 0.0;
        dStandardCameraMotorPosY = 0.0;
        ZeroMemory(strTemplateImagePath1, sizeof(char)*MAX_PATH);
        ZeroMemory(strTemplateImagePath2, sizeof(char)*MAX_PATH);
    }
 
    ~_COPYDATA_SYSTEM2REV()
    {
 
    }
 
    _COPYDATA_SYSTEM2REV(const _COPYDATA_SYSTEM2REV& rhs)
    {
        if (this != &rhs) 
        {
            Message    = rhs.Message;
            nFirstAlignFindPixelX = rhs.nFirstAlignFindPixelX;
            nFirstAlignFindPixelY = rhs.nFirstAlignFindPixelY;
            nSecondAlignFindPixelX = rhs.nSecondAlignFindPixelX;
            nSecondAlignFindPixelY = rhs.nSecondAlignFindPixelY;
            dStandardCameraMotorPosX = rhs.dStandardCameraMotorPosX;
            dStandardCameraMotorPosY = rhs.dStandardCameraMotorPosY;
            memcpy(strTemplateImagePath1, rhs.strTemplateImagePath1, sizeof(char)*MAX_PATH);
            memcpy(strTemplateImagePath2, rhs.strTemplateImagePath2, sizeof(char)*MAX_PATH);
        }        
    }
 
    _COPYDATA_SYSTEM2REV& operator=( const _COPYDATA_SYSTEM2REV& rhs)
    {
        if (this != &rhs) 
        {
            Message = rhs.Message;
            nFirstAlignFindPixelX = rhs.nFirstAlignFindPixelX;
            nFirstAlignFindPixelY = rhs.nFirstAlignFindPixelY;
            nSecondAlignFindPixelX = rhs.nSecondAlignFindPixelX;
            nSecondAlignFindPixelY = rhs.nSecondAlignFindPixelY;
            dStandardCameraMotorPosX = rhs.dStandardCameraMotorPosX;
            dStandardCameraMotorPosY = rhs.dStandardCameraMotorPosY;
            memcpy(strTemplateImagePath1, rhs.strTemplateImagePath1, sizeof(char)*MAX_PATH);
            memcpy(strTemplateImagePath2, rhs.strTemplateImagePath2, sizeof(char)*MAX_PATH);
        }
        return *this;
    }
 
    MsgSystem2Rev    Message;
    int                nFirstAlignFindPixelX;
    int                nFirstAlignFindPixelY;
    int                nSecondAlignFindPixelX;
    int                nSecondAlignFindPixelY;
    double            dStandardCameraMotorPosX;
    double            dStandardCameraMotorPosY;
    char            strTemplateImagePath1[MAX_PATH];
    char            strTemplateImagePath2[MAX_PATH];
}COPYDATA_SYSTEM2REV, *PCOPYDATA_SYSTEM2REV;
 
 
// [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
enum MsgRecipe2Rev
{
    MsgRecipe2Rev_None = -1,
    MsgRecipe2Rev_StandardCameraGlassPos,
    MsgRev2Recipe_StandardCameraGlassPos,
    MsgRecipe2Rev_RecipeCreate,                    // Recipe(PPID) 추가
    MsgRev2Recipe_RecipeCreate,
    MsgRecipe2Rev_RecipeChange,                    // Recipe(PPID) 변경
    MsgRev2Recipe_RecipeChange,
    MsgRecipe2Rev_RecipeDelete,                    // Recipe(PPID) 삭제
    MsgRev2Recipe_RecipeDelete,
    MsgRecipe2Rev_RecipeModify,                    // Recipe(PPID) Parameter 수정
    MsgRev2Recipe_RecipeModify
};
 
typedef struct _COPYDATA_RECIPE2REV
{
    _COPYDATA_RECIPE2REV()
    {
        Message                        = MsgRecipe2Rev_None;
        dStandardCameraGlassPosX    = 0.0;
        dStandardCameraGlassPosY    = 0.0;
        nPPID                        = -1;
    }
 
    ~_COPYDATA_RECIPE2REV()
    {
    }
 
    MsgRecipe2Rev    Message;
    double            dStandardCameraGlassPosX;
    double            dStandardCameraGlassPosY;
    int                nPPID;
} COPYDATA_RECIPE2REV, *PCOPYDATA_RECIPE2REV;
 
 
#define COPYDATA_RESETCOMM        1421
#define    DEFAULT_MESSAGE            (WM_USER + COPYDATA_RESETCOMM)
 
typedef struct _RESETCOMM
{
    _RESETCOMM::_RESETCOMM()
    {
        iIntaval = 0;
        iIdentTimer = 0;
        iIdentMessage = 0;
        bSignal = FALSE;
        ZeroMemory(strRequestFile, sizeof(char)*MAX_PATH);
        ZeroMemory(strWindowTitle, sizeof(char)*MAX_PATH);
    }
 
    _RESETCOMM::_RESETCOMM(const _RESETCOMM& other)
    {
        if (this != &other)
        {
            iIntaval = other.iIntaval;
            iIdentTimer = other.iIdentTimer;
            iIdentMessage = other.iIdentMessage;
            bSignal = other.bSignal;
            CopyMemory(strWindowTitle,other.strWindowTitle,sizeof(char)*MAX_PATH);
            CopyMemory(strRequestFile,other.strRequestFile,sizeof(char)*MAX_PATH);
        }
    }
 
    _RESETCOMM& _RESETCOMM::operator=(const _RESETCOMM& other)
    {
        if (this != &other)
        {
            iIntaval = other.iIntaval;
            iIdentTimer = other.iIdentTimer;
            iIdentMessage = other.iIdentMessage;
            bSignal = other.bSignal;
            CopyMemory(strWindowTitle,other.strWindowTitle,sizeof(char)*MAX_PATH);
            CopyMemory(strRequestFile,other.strRequestFile,sizeof(char)*MAX_PATH);
        }
 
        return *this;
    }
 
    int        iIntaval;    
    int        iIdentTimer;
    int        iIdentMessage;
    BOOL    bSignal;
    char    strWindowTitle[MAX_PATH];
    char    strRequestFile[MAX_PATH];
 
 
 
}RESETCOMM, *PRESETCOMM;
 
#define COPYDATA_AOISERVER_NAME                        _T("! Inspection ! D.I.T")
#define COPYDATA_REVIEWSYSTEM_NAME                    _T("ReviewSystem")
#define    COPYDATA_AOISERVER_2_REVIEWSYSTEM            1700
#define MAX_MESSAGE_DATA_COUNT                        10
 
union UMessageData
{
    int        nValue;
    double    dValue;
};
 
enum AOIServer2ReviewSystem
{
    Message_AOIServer2ReviewSystem_None = 0, 
    Message_AOIServer2ReviewSystem_AlignResult,
    Message_ReviewSystem2AOIServer_AlignResultAck
};
 
struct SAOIServerMessage
{
    SAOIServerMessage()
    {
        memset(this, 0, sizeof(SAOIServerMessage));
    }
    int                nMessage;
    UMessageData    uMessageData[MAX_MESSAGE_DATA_COUNT];
    char            strMessageString[MAX_PATH];
};
 
BOOL KillProcess(CString ProcessName);BOOL getStateProcess(CString ProcessName);