#pragma once #include "CommPortMgr.h" //单轨的工作步骤 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_Unload_End,//下料完成21 _ETrack_Step_Unload_Err,//下料错误22 }; //轨道的类型 enum ETrackType { _ETrackType_NULL=0,// _ETrackType_Track_1,//轨道1 _ETrackType_Track_2,//轨道1 }; //发送给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,//红灯蜂鸣器开 }; //深圳信利:单轨道工作流程 class CTrackWorkFlow { public: CTrackWorkFlow(CString Name); ~CTrackWorkFlow(void); void SetComPar(int Port,int BaudRate); void WorkFlowStart(); 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); 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;}; private: void Load(); void MoveToWaitPos(); void MoveToPos(ETrackWorkStep WorkStep); void MarkProcess(); bool MarkProcessExt(); void ReadPlcMsgExt(); void AnalyzeRecvCmd(char *buf,int len); void ThrowEdge(); void UnLoad(); void CatchMark(); void ChangePlatXYGroupIdx(); CString GetSendPlcMsgStr(ETrackPlcCmd PlcCmd); void WriteRecordTimesToFile(); CString GetRecordFilePath(); private: CCommPortMgr m_TrackCOM;//通信用的串口管理 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;//当前循环后停止 }; extern CTrackWorkFlow gTrackWorkFlow1;//轨道1 的流程管理 extern CTrackWorkFlow gTrackWorkFlow2;//轨道2 的流程管理