#pragma once #include "module.h" #include "WorkCmdContainer.h" #include "EnumDirection.h" #include "WorkCmdInvoker.h" //简易执行指令的流程 enum eExcuteFlowType { _ExcuteFlow_Null = 0, _ExcuteFlow_Foup_LoadMap_Port1, _ExcuteFlow_Foup_LoadMap_Port2, _ExcuteFlow_Foup_Unload_Port1, _ExcuteFlow_Foup_Unload_Port2, _ExcuteFlow_Manual_Anneal_Start,//启动手动退火 }; //打光斑测试参数 class CLaserSpotMarkPar { public: CLaserSpotMarkPar(void) { m_SpotGap = 2;//光斑点的X 方向间隔mm m_SpotOffsetZ = 0.1;//光斑点的Z 轴间隔mm m_SpotCntZ = 30;//正向点数 m_SpotCntF = 30;//负向点数 m_SpotMarkDelay = 2;//每个点开光时间ms }; public: double m_SpotGap;//光斑点的X 方向间隔mm double m_SpotOffsetZ;//光斑点的Z 轴间隔mm int m_SpotCntZ;//正向点数 int m_SpotCntF;//负向点数 int m_SpotMarkDelay;//每个点开光时间s }; class CLaserSpotPt { public: CLaserSpotPt(void) { m_AdjustZVal = 0;//Z轴调整值 }; public: Dbxy m_Coord; double m_AdjustZVal;//Z轴调整值 }; //XY 运动测试参数 class CXyMoveTestPar { public: CXyMoveTestPar(void) { m_CycleTimes = 10;//循环次数 m_MoveSpeed = 200;// 移动速度X }; public: int m_CycleTimes;//循环次数 double m_MoveSpeed;// 移动速度 }; //运动测试移动点的数据 class CMovePtData { public: CMovePtData(void) { }; public: Dbxy m_MaxCoord;//最大值 Dbxy m_MinCoord;//最小值 Dbxy m_AvgCoord;//平均值 vector m_PtVec;//测量点 }; class CTestLine { public: CTestLine(void) { }; public: Dbxy m_pt1; Dbxy m_pt2; }; //管理常用 的流程 class CCommonFlowMgr :public CModule { public: CCommonFlowMgr(void); ~CCommonFlowMgr(void); virtual CMFCPropertyGridProperty *CreatGridProperty(); virtual MODULE GetModuleType(){return _COMMON_FLOW_PROP;}; virtual void OnAppInitialize(); virtual void Draw(CDC* pDC); virtual CString GetParDirName(); bool InitDeviceFlow(bool bConfirmMsgBox); bool IsbConnectObj(){return m_bConnectObj;}; bool IsbShowErrMsg(){return m_bShowErrMsg;}; bool IsbStopWorkMsg(){return m_bStopWorkMsg;}; bool IsbShowStartMsg(){return m_bShowStartMsg;}; void SetErrMsg(CString s){m_ErrMsg = s;}; CString GetErrMsg(){return m_ErrMsg;}; bool MoveToPos(Dbxy MovePt,Dbxy TargetPt,double MotorZCoord); bool CheckDeviceInitState(); double GetOneLineScanSpeed(){return m_OneLineScanSpeed;}; void SetOneLineScanSpeed(double val){m_OneLineScanSpeed = val;}; void OneLineLaserTest(); bool AtLaserSafePlace(Dbxy PlatformCoord); void ManualMoveAsixXY(double MoveDis,DIRECTION MoveDir); void ManualMoveAsixZ(double dis); CXyMoveTestPar GetCurXyMoveTestPar(){return m_CurXyMoveTestPar;}; void SetCurXyMoveTestPar(CXyMoveTestPar par){m_CurXyMoveTestPar = par;}; void XyMoveTestFlow(); bool IsbXyMoveTesting(){return m_bXyMoveTesting;}; void XYMoveSaveCoord(); void OpenMoveTestObj(); void InitMoveRetList(CListCtrl &List); void InsertMoveRetList(CListCtrl &List); bool LaserPowCheckFlow(); CLaserSpotMarkPar GetLaserSpotMarkPar(){return m_LaserSpotMarkPar;}; void SetLaserSpotMarkPar(CLaserSpotMarkPar par){m_LaserSpotMarkPar = par;}; void CreatLaserSpotMarkPt(); void LaserSpotMarkFlow(); void SetbLaserSpotMarkMode(bool b); bool IsbLaserSpotMarkMode(){return m_bLaserSpotMarkMode;}; bool IsbIniMotorZ(){return m_bIniMotorZ;}; bool IsbIniPlatfrom(){return m_bIniPlatfrom;}; int GetLightAlamTime(){return m_LightAlamTime;}; int CollectMultiMovePoint(); void CollectMultiPointVecToFile(); void PlanenessMeasureFlow(); bool CheckLaserBeamFlow(); bool CheckRecipeEnergyDensityFlow(double Laser1Curr); bool MoveToPowMeasureFlow(); bool IsbKeepJobN2Air(){return m_bKeepJobN2Air;}; bool ManualTransferWaferFlow(); void JobQueueCtrlFlow(); void PauseJobQueueCtrlFlow(); void StopJobQueueCtrlFlow(); bool ExcuteSimpleFlowType(eExcuteFlowType FlowType); void AutoFindFocusFlow(); void ManualCtrlPlatWaferFlow(bool bWaferOn); void CloseLaserLddFlow(); bool IsbAutomationWorking(){return m_bAutomationWorking;}; bool IsbStopAutomationWork(){return m_bStopAutomationWork;}; void StartAutomationWorkFlowThread(); void StartAutomationWorkFlow(); void StopAutomationWorkFlow(); private: bool CommWorkStart(); void CommWorkEnd(); void CreatAnnealScanCmd(CWorkCmdInvoker &CmdInvoker); void InsertMoveRetListExt(CListCtrl &List,int line,int Idx,CMovePtData &MovePtData,X_OR_Y Xy); void OneLineLaserTestExt(Dbxy Pt1,Dbxy Pt2); void CalXYMoveTestResult(int MeasurePtCnt); bool LaserPowCheckFlowExt(); void DrawLaserSpotPt(CDC* pDC); bool CheckLaserSpotData(); void DrawTestLineVec(CDC* pDC); void CreatAutoFindFocusInvokerCmd(CWorkCmdInvoker &WorkCmdInvoker,bool bToLaserFocus); void CreatPowCheckPrepareCmd(CWorkCmdInvoker &CmdInvoker); private: //共通设定 bool m_bNeedInit;//是否需要初始化才能进行操作 bool m_bShowStartMsg;//在开始加工时是否对话框提示 bool m_bShowErrMsg;//运行时出错后对话框提示 CString m_ErrMsg;//错误信息 bool m_bStopWorkMsg;//点了停止按钮后是否提示对话框 double m_OneLineScanSpeed;//单条扫描线的速度 //初始化相关参数----------------------------------------------------- bool m_bIniConfirmMsgBox;//是否弹出初始化确认对话框 bool m_bIniPlatfrom;//是否初始化电机平台 bool m_bIniMotorZ;//是否初始化电机Z bool m_bInitedToProductPt;//初始化完成后是否返回上料点 bool m_bConnectObj;//是否连接多个obj 数据 bool m_bSetLightState;//是否设置警示灯状态 double m_MotorZSafeCoord;//Z 轴的安全坐标位置(保存值) int m_CurDrawLineCnt;//当前绘制的线段计数器 int m_DrawLineGapCnt;//每间隔几条线绘制一次(保存值) int m_TransferTestDelay;//传片测试延时ms int m_OneLineAnnealTimeAdjsut;//单条线段退火时间的调整量ms CXyMoveTestPar m_CurXyMoveTestPar;//当前的XY 运动测试参数 bool m_bXyMoveTesting;//是否正在XY 移动测试 int m_MoveTestDelay;//移动测试延时ms vector m_XyMoveTestVec;//移动测试坐标结果容器 vector m_MovePtDataVec;//测量点结果容器 bool m_bLaserSpotMarkMode;//当前是否为打光斑模式 vector m_LaserSpotPtVec;//光斑点容器 CLaserSpotMarkPar m_LaserSpotMarkPar;//打光斑的参数 int m_LightAlamTime;//蜂鸣器时间 vector m_CTestLineVec; bool m_bKeepJobN2Air;//在job 运行时一直保持吹气 bool m_bCtrlN2Air;//是否控制氮气开关(调试时可以关闭) bool m_bAutomationWorking;//是否正在自动生产中 bool m_bStopAutomationWork;//停止自动运行 }; extern CCommonFlowMgr *gCommonFlowMgr;