#pragma once #include "CommPortMgr.h" #include //单轨的工作步骤 enum ETrackWorkStep { _ETrack_Step_NULL = 0, _ETrack_Step_Stop,//停止状态1 _ETrack_Step_Reset_Load_Request,//复位上料机所有请求信号2 _ETrack_Step_Load,//上料中3 _ETrack_Step_Load_End,//上料完成4 _ETrack_Step_Load_Stop,//上料完成,但是执行停止5 _ETrack_Step_Load_Err,//上料错误6 _ETrack_Step_To_Wait_Pos,//移动到等待位置7 _ETrack_Step_Mark_Waiting,//等待加工中8 _ETrack_Step_Catch_mark,//抓取定位9 _ETrack_Step_Catch_mark_End,//抓取定位完成10 _ETrack_Step_Catch_mark_Err,//抓取定位错误11 _ETrack_Step_Marking,//加工过程中12 _ETrack_Step_Mark_Stop,//加工停止13 _ETrack_Step_Mark_Err,//加工错误14 _ETrack_Step_Mark_End,//加工完成15 _ETrack_Step_Throw_Edge,//去边框16 _ETrack_Step_Throw_Edge_End,//去边框完成17 _ETrack_Step_Throw_Edge_Stop,//去边框完成,但是执行停止18 _ETrack_Step_Throw_Edge_Err,//去边框错误19 _ETrack_Step_Unload,//下料中20 _ETrack_Step_PulledOut,//等待拉走治具 _ETrack_Step_WaitBack,//等待送回空治具 _ETrack_Step_PushOut_Finished,//等待送回空治具 _ETrack_Step_Unload_End,//下料完成21 _ETrack_Step_Unload_Err,//下料错误22 }; //轨道的类型 enum ETrackType { _ETrackType_NULL=0,// _ETrackType_Track_1,//轨道1 _ETrackType_Track_2,//轨道2 }; //发送给plc 指令的类型 enum ETrackPlcCmd { _ETrack_PlcCmd_Auto_Start = 0,//自动开始 _ETrack_PlcCmd_Auto_End,//自动结束 _ETrack_PlcCmd_Load,//上料 _ETrack_PlcCmd_Unload,//下料 _ETrack_PlcCmd_Open_Product,//打开载盘 _ETrack_PlcCmd_Close_Product,//夹紧载盘 _ETrack_PlcCmd_Cancel_Unload,//取消下料 _ETrack_PlcCmd_Vac_Sorb_On,//真空吸附开 _ETrack_PlcCmd_Vac_Sorb_Off,//真空吸附关 _ETrack_PlcCmd_Red_Alam_On,//红灯蜂鸣器开 _ETrack_PlcCmd_Red_Alam_Off,//红灯蜂鸣器开 _ETrack_PlcCmd_Push_Jig_Out,//推出治具 _ETrack_PlcCmd_Check_Jig_In,//检测轨道治具到位 }; //深圳信利:单轨道工作流程 class CTrackWorkFlow { public: CTrackWorkFlow(CString Name); ~CTrackWorkFlow(void); void SetComPar(int Port,int BaudRate); void WorkFlowStart(bool bOpenCom=true); void WorkFlowCtrl(); void ExecuteCurStep(); bool StartAutoWork(); void StopAutoWork(); void ReadPlcMsg(); void ManualOperation(ETrackWorkStep TrackWorkStep); bool IsbAutoWorking(){return m_bAutoWorking;}; void SetCurTrackWorkStep(ETrackWorkStep Step); ETrackWorkStep GetCurTrackWorkStep(){return m_CurWorkStep;}; int GetCurTrackWorkStepInt(){return (int)m_CurWorkStep;}; void SendAutoStartFlg(bool bStart); void ProductCarrierOpenClose(bool bOpen); void VacSorbOnOff(bool bOn); bool PushJigOut(); bool IsJigOK();//检测轨道治具到位 void RadAlamOnOff(bool bOn); int GetCutProductCnt(){return m_CutProductCnt;}; void ReadRecordTimesFromFile(); void ResetRecordTimes(); bool SendMsgToPlc(ETrackPlcCmd PlcCmd,bool bStopReadMsg); void MoveMotorYToSafePos(); void CancelUnloadRequest(); void SetbCircleStop(bool b){m_bCircleStop = b;}; bool GetbCircleStop() { return m_bCircleStop ; }; BOOL m_bCarrierOpen = true;//当前气缸是否松开 bool IsTrackIdle();//是否轨道空闲中 void KillCurWorkThread(); private: void Load(); void MoveToWaitPos(); void MoveToPos(ETrackWorkStep WorkStep); void MarkProcess(); bool MarkProcessExt(); void ReadPlcMsgExt(); void AnalyzeRecvPlcCmd(char *buf,int len); void ThrowEdge(); void UnLoad(); void CatchMark(); void CatchMarkNewly(); void ChangePlatXYGroupIdx(); CString GetSendPlcMsgStr(ETrackPlcCmd PlcCmd); void WriteRecordTimesToFile(); CString GetRecordFilePath(); public: static CCommPortMgr m_TrackCOM;//通信用的串口管理 private: int m_ComPort;//通信用串口号 int m_ComBaudRate;//通信用波特率 bool m_bStopReadMsg;//是否暂停读取plc 消息 int m_ReadMsgDelay;//读取plc 消息的延时ms ETrackType m_TrackType;//轨道的类型 ETrackWorkStep m_CurWorkStep;//当前的工作步骤 ETrackWorkStep m_OldWorkStep;//之前的工作步骤(用来判断是否变化) CString m_TrackName;//轨道的名称 bool m_bAutoWorking;//是否在自动加工 int m_ProductIdx;//轨道对应产品工位的编号 bool m_bLoadProduct;//轨道上是否load 了产品 int m_CutProductCnt;//切割产品的数量 bool m_bCircleStop;//当前循环后停止 CWinThread * m_pthread=NULL; public: atomic_bool m_bPushJigOut = false;//推出指令发出后,是否推出了载具 atomic_bool m_bPullJigOut = false;//下料指令发出后,是否拉走了载具 atomic_bool m_bPushJigReady = false;//当前轨道,是否可推出治具 atomic_bool m_bJigOK = false;//当前轨道,治具是否到位 }; extern CTrackWorkFlow gTrackWorkFlow1;//轨道1 的流程管理 extern CTrackWorkFlow gTrackWorkFlow2;//轨道2 的流程管理 extern ETrackType gCurLockTrackType;