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.
135 lines
5.1 KiB
C++
135 lines
5.1 KiB
C++
#pragma once
|
|
#include "CommPortMgr.h"
|
|
#include <atomic>
|
|
//单轨的工作步骤
|
|
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_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;//当前气缸是否松开
|
|
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 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;//当前循环后停止
|
|
|
|
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 的流程管理
|