You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.4 KiB
C++

#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 的流程管理