#pragma once //全局类型定义 using namespace std;/*使用标准库的名字空间*/ //STL 标准头文件 #include #include #include #include #include #include #include #include #include #include //屏蔽编译警告 #pragma warning(disable : 4800) #pragma warning(disable : 4244) #pragma warning(disable : 4996) #pragma warning(disable : 4018) #pragma warning(disable : 4477) #pragma warning(disable : 4005) #define PI 3.14159265358979323846 #define EE 2.71828 //#define COORD_EPS 0.001 //坐标误差精度(0.001 表示在坐标比较中,两个点的距离小于1um 就认为是相等) #define COORD_EPS 0.00001 #define VAR_PAR_CNT 20//可变参数的数量 //软件中的延时时间 #define FIRST_OPEN_DELAY 5000 //打开软件后等待这个时间再开始检测状态 #define READ_INFO_FAST_DELAY 300 //读取信息延时ms (快速) #define READ_INFO_SLOW_DELAY 2000 //读取信息延时ms (慢速) #define READ_PLC_INFO_DELAY 300 //读取Plc 信息延时ms #define READ_ROBOT_STATE_DELAY 3000 //读取传片机状态 信息延时ms #define READ_TEK_INFO_DELAY 500 //读取TEK 示波器信息延时ms #define READ_LASER_POWER_TIMER_DELAY 600 // 界面读取激光功率的timer 延时 #define READ_LASER_DIS_METER_TIMER_DELAY 800 // 界面读取激光测距仪的timer 延时 #define READ_LASER_STATE_DELAY 2000 //读取激光器信息延时ms #define READ_SECS_VAR_DELAY 200 //更新secs 变量的延时ms #define CTRL_HOST_JOB_DELAY 500 //控制服务器job 延时ms #define CTRL_CYCLIC_RUN_DELAY 3000 //控制服务器job 延时ms #define RGB_WHITE RGB(255,255,255) //白色 #define RGB_BLACK RGB(0,0,0) //黑色 #define RGB_GREEN RGB(0,255,0) //绿色 #define RGB_GREEN1 RGB(29,241,135) //绿色 #define RGB_GREEN2 RGB(228,249,157) //浅绿色 #define RGB_RED RGB(255,0,0) //红色 #define RGB_PINK RGB(255,55,120) //粉红色 #define RGB_PINK1 RGB(231,61,175) //粉红色 #define RGB_YELLOW RGB(255,255,0) //黄色 #define RGB_BLUE RGB(0,0,255) //蓝色 #define RGB_BLUE1 RGB(153,217,234) //天蓝色 #define RGB_BLUE2 RGB(49,240,243) //天蓝色2 #define RGB_NODE_BLUE RGB(0,63,255) //节点蓝色 #define RGB_PURPLE RGB(163,73,164) //紫色 #define RGB_GRAY RGB(240,240,240) //灰色 #define RGB_GRAY1 RGB(160,160,160) //深灰色 #define RGB_GRAY2 RGB(217,217,217) //浅灰色 #define STR_NULL "" #define STR_INPUT_ERROR "无效指令: " #define STR_INPUT_SYMBOL '>' #define OK_STATE_STR "正常" #define WARNING_STATE_STR "警告" #define WARNING_STR "报警" #define STATE_STR_D "状态D"//用来区分要使用的门禁状态 #define NO_USE_STR "不使用" #define SEL_ALL_STR "ALL" #define COMMUNICATION_ERR "Communication Error" #define DEVICE_NOT_CONNECT "Device Not Conect" #define SP_POWER_NAME "内部功率" #define LIGHT_PATH_POWER_NAME "激光功率" #define PRODUCT_SUFACE_POWER_NAME "有效功率" //用于查询和保存的recipe 参数名字 #define RECIPE_PAR_NAME_LASER_FRE "RECIPE_PAR_NAME_LASER_FRE" #define RECIPE_PAR_NAME_LASER2_FRE "RECIPE_PAR_NAME_LASER2_FRE" #define RECIPE_PAR_NAME_LASER_CURR_1 "RECIPE_PAR_NAME_LASER_CURR_1" #define RECIPE_PAR_NAME_LASER_CURR_2 "RECIPE_PAR_NAME_LASER_CURR_2" #define RECIPE_PAR_NAME_LASER_EDI_1 "RECIPE_PAR_NAME_LASER_EDI_1" #define RECIPE_PAR_NAME_LASER_EDI_2 "RECIPE_PAR_NAME_LASER_EDI_2" #define RECIPE_PAR_NAME_PRF2_DELAY "RECIPE_PAR_NAME_PRF2_DELAY" #define RECIPE_PAR_NAME_SCAN_SPEED "RECIPE_PAR_NAME_SCAN_SPEED" #define RECIPE_PAR_NAME_OVERLAP_RATIO_X "RECIPE_PAR_NAME_OVERLAP_RATIO_X" #define RECIPE_PAR_NAME_OVERLAP_RATIO_Y "RECIPE_PAR_NAME_OVERLAP_RATIO_Y" #define RECIPE_PAR_NAME_FOCUS_ADJUST_VAL "RECIPE_PAR_NAME_FOCUS_ADJUST_VAL" #define RECIPE_PAR_NAME_SCAN_AREA "RECIPE_PAR_NAME_SCAN_AREA" #define RECIPE_PAR_NAME_AREA_IDX "RECIPE_PAR_NAME_AREA_IDX" #define RECIPE_PAR_NAME_N2_STATE "RECIPE_PAR_NAME_N2_STATE" //是否开关N2 #define RECIPE_PAR_NAME_OFFSET_TAB "RECIPE_PAR_NAME_OFFSET_TAB" //补偿表 #define RECIPE_PAR_NAME_N2_VAL "RECIPE_PAR_NAME_N2_VAL"//N2流量大小 #define RECIPE_PAR_NAME_USE_CUR_N2VAL "RECIPE_PAR_NAME_USE_CUR_N2VAL"//使用当前Recipe的N2流量值 #define RECIPE_PAR_NAME_LASER1_POW "RECIPE_PAR_NAME_LASER1_POW" #define RECIPE_PAR_NAME_LASER2_POW "RECIPE_PAR_NAME_LASER2_POW" #define RECIPE_PAR_NAME_ROTATO_DIMMER_ANG "RECIPE_PAR_NAME_ROTATO_DIMMER_ANG" //旋转衰减器1的角度 #define RECIPE_PAR_NAME_ROTATO_DIMMER_ANG2 "RECIPE_PAR_NAME_ROTATO_DIMMER_ANG2" //旋转衰减器2的角度 #define RECIPE_PAR_NAME_FIX_SCAN_SPEED "RECIPE_PAR_NAME_FIX_SCAN_SPEED"//固定扫描速度 #define RECIPE_PAR_NAME_FIX_SCAN_LINE_GAP "RECIPE_PAR_NAME_FIX_SCAN_LINE_GAP"//固定扫描线间隔 #define RECIPE_PAR_NAME_EDI_CHECK_SCOPE "RECIPE_PAR_NAME_EDI_CHECK_SCOPE"//功率密度卡控精度 #define RECIPE_PAR_NAME_SCAN_LINE_START_IDX "RECIPE_PAR_NAME_SCAN_LINE_START_IDX"//开始扫描线的索引值 #define RECIPE_PAR_NAME_LASER_EDI_OFFSET_1 "RECIPE_PAR_NAME_LASER_EDI_OFFSET_1" #define RECIPE_PAR_NAME_LASER_EDI_OFFSET_2 "RECIPE_PAR_NAME_LASER_EDI_OFFSET_2" #define RECIPE_PAR_NAME_ALIGNER_ANG "RECIPE_PAR_NAME_ALIGNER_ANG"//准直角度 #define RECIPE_PAR_NAME_CASSETTE_TIER_COUNT "RECIPE_PAR_NAME_CASSETTE_TIER_COUNT" //料盒层数 #define RECIPE_PAR_NAME_RUNTIMES "RECIPE_PAR_NAME_RUNTIMES" //执行次数 #define LASER_DEVICE_PI_CLOSE_POW_VOL "LASER_DEVICE_PI_CLOSE_POW_VOL" #define LASER_DEVICE_PI_CLOSE_POW_CURR "LASER_DEVICE_PI_CLOSE_POW_CURR" #define RECIPE_PAR_MAX_LASER_CURR_1 "RECIPE_PAR_MAX_LASER_CURR_1" #define RECIPE_PAR_MAX_LASER_CURR_2 "RECIPE_PAR_MAX_LASER_CURR_2" #define RECIPE_PAR_MAX_LASER_EDI_1 "RECIPE_PAR_MAX_LASER_EDI_1" #define RECIPE_PAR_MAX_LASER_EDI_2 "RECIPE_PAR_MAX_LASER_EDI_2" #define RECIPE_PAR_MAX_LASER_FRE "RECIPE_PAR_MAX_LASER_FRE" #define RECIPE_PAR_MAX_LASER_PULSE_DELAY "RECIPE_PAR_MAX_LASER_PULSE_DELAY" #define RECIPE_PAR_MIN_FOCUS_ADJUST "RECIPE_PAR_MIN_FOCUS_ADJUST" #define RECIPE_PAR_MAX_FOCUS_ADJUST "RECIPE_PAR_MAX_FOCUS_ADJUST" #define RECIPE_PAR_MIN_SCAN_SPEED "RECIPE_PAR_MIN_SCAN_SPEED" #define RECIPE_PAR_MAX_SCAN_SPEED "RECIPE_PAR_MAX_SCAN_SPEED" #define RECIPE_PAR_MAX_FIX_SCAN_LINE_GAP "RECIPE_PAR_MAX_FIX_SCAN_LINE_GAP" #define RECIPE_PAR_MAX_LASER_POW_1 "RECIPE_PAR_MAX_LASER_POW_1" #define RECIPE_PAR_MAX_LASER_POW_2 "RECIPE_PAR_MAX_LASER_POW_2" #define RECIPE_PAR_MAX_DIMMER_ANG_1 "RECIPE_PAR_MAX_DIMMER_ANG_1" #define RECIPE_PAR_MAX_DIMMER_ANG_2 "RECIPE_PAR_MAX_DIMMER_ANG_2" #define LAIPU_LASER_DATA_PATH _T("E:\\LaipuLaserData") #define RECIPE_OFFSET_TBL_NULL "Empty" #define RECIPE_OFFSET_PAR_LASER1_EDI "LASER1_EDI_OFFSET" #define RECIPE_OFFSET_PAR_LASER2_EDI "LASER2_EDI_OFFSET" #define RECIPE_OFFSET_PAR_LASER1_CURR "LASER1_CURR_OFFSET" #define RECIPE_OFFSET_PAR_LASER2_CURR "LASER2_CURR_OFFSET" #define bOPEN true #define bCLOSE false #define THOW_EXCEPTION true //抛出异常 #define COMM_BAUD_RATE_115200 115200 //串口波特率115200 #define COMM_BAUD_RATE_9600 9600 //串口波特率9600 #define ON_TERMINAL 5001 #define BOOL_STR_TRUE "TRUE" #define BOOL_STR_FALSE "FALSE" #define BOOL_STR_YES "YES" #define BOOL_STR_NO "NO" #define STR_LASER_1 "Laser1" #define STR_LASER_2 "Laser2" #define BOOL_STR_ON "ON" #define BOOL_STR_OFF "OFF" //鼠标工具的类型 enum MOUSE_TOOL { _TOOL_POINT=0, _TOOL_RECT, _TOOL_LINE, _TOOL_PLINE,//多线段 _TOOL_CIRCLE, _TOOL_MOVE, _TOOL_MOVE2,//指定基点移动 _TOOL_ROTATO, _TOOL_COPY, _TOOL_MEASURE,//测量 _TOOL_ZOOM,//缩放 _TOOL_CUT,//修剪 _TOOL_ADD_NODE,//添加节点 _TOOL_DEL_NODE,//删除节点 _TOOL_BREAK_NODE,//打断节点 _TOOL_MOVE_NODE,//移动节点 _TOOL_TEXT,//文字 _TOOL_BARCODE,//条码 _TOOL_ONE_POINT,//一个点 _TOOL_STRETCH,//拉伸工具 _TOOL_PT_MOVE_TO_CCD,//设置特定用途的点 _TOOL_SET_MARK_PT,//手动指定定位点 _TOOL_LASER_COORD,//设置激光中心位置 }; enum OBJ_TYPE { _TYPE_BASE = 0, _TYPE_PLINE,//多线段1 _TYPE_POINT,//点2 _TYPE_CIRCLE,//圆3 _TYPE_COMPOSITE,//一般组合类型4 _TYPE_TXT,//字符串5 _TYPE_BARCODE,//条码6 _TYPE_STR,//string 7 _TYPE_CHAR,//字符8 _TYPE_ARC,//圆弧 }; enum X_OR_Y { _X=0, _Y, _XY, }; enum CATCH_PT_TYPE//抓取点的类型 { _CATCH_NODE = 0,//结点 _CATCH_INTERSECT,//线段的交点 _CATCH_ORTHO,//正交 _CATCH_CUT_TRACK,//元件切割道交点 }; enum STATUS//鼠标工具的状态值,用于确定每一步做什么事情 { _STATUS_1 = 0, _STATUS_2, _STATUS_3, _STATUS_4, _STATUS_5, _STATUS_6, _STATUS_END }; enum OBJ_OP_TYPR { _OP_MOVE = 0, _OP_ROTATO, _OP_MIRROR, _OP_STRETCH,//拉伸 _OP_REVERSE,//反转数据点 _OP_SCALE,//按比例缩放 }; inline bool IsDbEqual(double a,double b) { if((abs(a-b))=B) { pt.y = (T+B)/2; } return pt; } inline DbSize DbRect::GetSize() { DbSize size; size.w = R - L; size.h = T - B; if(size.w<0) size.w = 0; if(size.h<0) size.h = 0; return size; } //底部中心点 inline Dbxy DbRect::GetBottomCenterPt() { Dbxy pt; pt.x = (L+R)/2; pt.y = B; return pt; } inline double DbRect::Width() { return R-L; } inline double DbRect::Height() { return T-B; } #endif //封装所有对象操作的参数,便于统一发送格式 struct SObjOperatePar{ SObjOperatePar() { MoveX = MoveY = 0; Angle = 0; OldSize = NewSize = Diff = 0; Scale = 1; } OBJ_OP_TYPR OpType;//操作类型 X_OR_Y xy;//标识xy 方向 Dbxy BasePt;//基准点 double MoveX;//移动量 double MoveY; double Angle;//360 度角 double OldSize; double NewSize; double Diff; double Scale;//缩放比例 }; typedef pair PointType; //创建圆的参数 class CCirclePar { public: CCirclePar(void) { Radius = 1; DEdgeCnt = 32; bMerge = true; StartAng = 0; EndAng = 360; bReverse = false; } public: Dbxy CenterPt;//圆心 double Radius;//半径 int DEdgeCnt;//边数 bool bMerge;//是否合并 bool bReverse;//是否反向 double StartAng;//起始角度360 度角 double EndAng;//结束角度 }; //状态的类型 enum EModuleStateType { _ModuleStateType_OK,//正常 _ModuleStateType_Warning,//警告 _ModuleStateType_ERR,//异常 }; class CDlgItemStr { public: CDlgItemStr(void) { m_ID = 0; }; public: int m_ID;//编号 CString m_Str;//显示的内容 }; //偏移旋转参数 class COffsetRotatoPar { public: COffsetRotatoPar() { Reset(); }; void Reset() { m_Offset.x = 0; m_Offset.y = 0; m_RotatoAng = 0;//旋转角度(30度角) m_bValid = false;//是否有效 }; public: bool m_bValid;//是否有效 Dbxy m_Offset;//偏移量 double m_RotatoAng;//旋转角度(30度角) }; enum CAlamLightStateType { _AlamLightStateType_NULL=0, _AlamLightStateType_Off,//关闭 _AlamLightStateType_On,//打开 _AlamLightStateType_Flash,//闪烁 }; //警示灯状态 class CAlamLightState { public: CAlamLightState(void) { m_LightRedState = _AlamLightStateType_NULL;//红灯状态 m_LightYellowState = _AlamLightStateType_NULL;//黄灯状态 m_LightGreenState = _AlamLightStateType_NULL;//绿灯状态 m_LightAlamState = _AlamLightStateType_NULL;//蜂鸣器状态 }; public: CAlamLightStateType m_LightRedState;//红灯状态 CAlamLightStateType m_LightYellowState;//黄灯状态 CAlamLightStateType m_LightGreenState;//绿灯状态 CAlamLightStateType m_LightBlueState;//蓝灯状态 CAlamLightStateType m_LightAlamState;//蜂鸣器状态 }; //常用读取的点位信号类型(增加后每个项目工程InitCommReadBitVec 函数要相应增加,否则下标会溢出报错) //后面的编号是为了快速强制设置用的 enum eCommReadSignalType { _ReadSignalType_Null = 0, _ReadSignalType_MachineGate1,//光闸信号1 _ReadSignalType_MachineGate2,//光闸信号2 _ReadSignalType_PlateVacuum,//平台wafer 真空信号 _ReadSignalType_LaserDimmer1,//衰减器信号1 _ReadSignalType_LaserDimmer2,//衰减器信号2 _ReadSignalType_RedLight,//红灯 _ReadSignalType_AlamState,//蜂鸣器状态 _ReadSignalType_ArmProduct,//机械手产品信号 _ReadSignalType_ArmReady,//机械手准备信号 _ReadSignalType_ArmTrasmitting,//机械手传输信号 _ReadSignalType_LaserPowLock,//激光电源按钮锁定 _ReadSignalType_ThimbleSignal1,//顶针盘信号1 _ReadSignalType_ThimbleSignal2,//顶针盘信号2 _ReadSignalType_ArmAutoState,//机械手自动状态[14] _ReadSignalType_Smif1Working,//SMIF忙信号1 _ReadSignalType_Smif2Working,//SMIF忙信号1 _ReadSignalType_ArmWorking,//机械手忙信号 _ReadSignalType_Port1MappingEnd,//Port1 mapping完成信号 _ReadSignalType_Port2MappingEnd,//Port2 mapping完成信号 _ReadSignalType_Pod1Signal_1,//料盒1 信号1 [20] _ReadSignalType_Pod2Signal_1,//料盒2 信号1 [21] _ReadSignalType_WaferPosAligner,//准直器wafer 信号 _ReadSignalType_WaferPosArm,//机械手wafer 信号1 (load 用arm) _ReadSignalType_Port1MappingCommit,//Port1 Mapping 确认 _ReadSignalType_Port2MappingCommit,//Port2 Mapping 确认 _ReadSignalType_ArmAutoTransfer,//自动传片测试中 _ReadSignalType_CassetteDoorSignal_1,//料盒门信号1 [27] _ReadSignalType_CassetteDoorSignal_2,//料盒门信号2 [28] _ReadSignalType_Pod1Signal_2,//料盒1 信号2 (有的设备有两个Sensor) [29] _ReadSignalType_Pod2Signal_2,//料盒2 信号2 (有的设备有两个Sensor) [30] _ReadSignalType_Pod1WaferOutSensor,//料盒1 wafer 溢出传感器[31] _ReadSignalType_Pod2WaferOutSensor,//料盒2 wafer 溢出传感器[32] _ReadSignalType_Pod1PushInSignal,//料盒1 进入机台到位信号(有料盒,有wafer 的时候才会ON) _ReadSignalType_Pod2PushInSignal,//料盒2 进入机台到位信号 _ReadSignalType_Pod1PushOutSignal,//料盒1 退出机台到位信号 _ReadSignalType_Pod2PushOutSignal,//料盒2 退出机台到位信号 _ReadSignalType_WaferPosArm2,//机械手wafer 信号2 (双臂机械手Unload用的arm) _ReadSignalType_OxygenCheckSignal,//氧气浓度检测信号(On为满足条件<100ppm) _ReadSignalType_Pod1Signal_3,//料盒1 信号3 (8寸料盒) _ReadSignalType_Pod2Signal_3,//料盒2信号3 (8寸料盒) _ReadSignalType_Pod1Signal_4,//料盒1 信号4 (8寸料盒) _ReadSignalType_Pod2Signal_4,//料盒2信号4 (8寸料盒) _ReadSignalType_Pod1WaferSensor,//料盒1 wafer 传感器(用来检测料盒中是否有wafer) _ReadSignalType_Pod2WaferSensor,//料盒2 wafer 传感器(用来检测料盒中是否有wafer) _ReadSignalType_Pod1WaferAdjustSensor1,////料盒1 wafer 规料传感器1 (用来把wafer 弄整齐) _ReadSignalType_Pod1WaferAdjustSensor2,////料盒1 wafer 规料传感器2 (用来把wafer 弄整齐) _ReadSignalType_Pod2WaferAdjustSensor1,////料盒1 wafer 规料传感器1 (用来把wafer 弄整齐) _ReadSignalType_Pod2WaferAdjustSensor2,////料盒1 wafer 规料传感器2 (用来把wafer 弄整齐) _ReadSignalType_Max,//最大值 }; enum eLaserDeviceType { _LaserDeviceType_MainLaser1=0,//绿光1 _LaserDeviceType_MainLaser2,//绿光2 _LaserDeviceType_RedLaser,//红光 }; //load port 的类型 enum eWaferLoadPortType { _LoadPortType_Null = 0, _LoadPortType_Port1, _LoadPortType_Port2, }; //料盒的类型 enum eCassetteType { _CassetteType_Slot13 = 0,//13层料盒 _CassetteType_Slot25,//25层料盒 }; //两个点位控制的开关状态 enum eTwoIOPtCtrlState { _TwoIOPtCtrlState_Null = 0, //两个点位都没有读到 _TwoIOPtCtrlState_Off,//关闭 _TwoIOPtCtrlState_On,//打开 };