|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
#include "Program_SZ_XL_TrackWorkFlow.h"
|
|
|
|
|
#include "GlobalFunction.h"
|
|
|
|
|
#include "CommonFlowMgr.h"
|
|
|
|
|
#include "ProductMgr.h"
|
|
|
|
|
#include "ProgramCutMgr.h"
|
|
|
|
|
#include "WorkCmdContainer.h"
|
|
|
|
|
#include "Program_SZ_XL.h"
|
|
|
|
|
#include "MotionCard_PCI1245.h"
|
|
|
|
|
#include "WorkCmdMoveMotor.h"
|
|
|
|
|
#include "WorkCmdInvoker.h"
|
|
|
|
|
#include "WorkCmdWaitMotorStop.h"
|
|
|
|
|
#include "WorkCmdSetMotorSpeed.h"
|
|
|
|
|
#include "ObjComponentMgr.h"
|
|
|
|
|
#include "LogMgr.h"
|
|
|
|
|
#include "MsgBox.h"
|
|
|
|
|
#include "WorkTime.h"
|
|
|
|
|
#include "FileMgr.h"
|
|
|
|
|
#include "Motor.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PLC_READ_MSG_LEN 12 //<2F><><EFBFBD><EFBFBD>PLC <20><><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>(<28>ֽ<EFBFBD>)
|
|
|
|
|
|
|
|
|
|
#define TRACK_NAME_1 "<22><><EFBFBD><EFBFBD>1"
|
|
|
|
|
#define TRACK_NAME_2 "<22><><EFBFBD><EFBFBD>2"
|
|
|
|
|
int gStopTimes = 0;
|
|
|
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|
|
|
|
ETrackType gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
|
|
|
|
|
CTrackWorkFlow gTrackWorkFlow1(TRACK_NAME_1);//<2F><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>
|
|
|
|
|
CTrackWorkFlow gTrackWorkFlow2(TRACK_NAME_2);//<2F><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>
|
|
|
|
|
|
|
|
|
|
#define TRACK1_RECORD_FILE "\\CutPar\\TrackRecord1.txt"
|
|
|
|
|
#define TRACK2_RECORD_FILE "\\CutPar\\TrackRecord2.txt"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD><EFBFBD>߳<EFBFBD>(<28><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>)
|
|
|
|
|
UINT WorkFlowCtrlThread(LPVOID pParam)
|
|
|
|
|
{
|
|
|
|
|
CTrackWorkFlow *WorkFlow = (CTrackWorkFlow *)pParam;
|
|
|
|
|
WorkFlow->WorkFlowCtrl();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡplc <20><>Ϣ<EFBFBD><CFA2><EFBFBD>߳<EFBFBD>(<28><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>)
|
|
|
|
|
UINT ReadPlcMsgThread(LPVOID pParam)
|
|
|
|
|
{
|
|
|
|
|
CTrackWorkFlow *WorkFlow = (CTrackWorkFlow *)pParam;
|
|
|
|
|
WorkFlow->ReadPlcMsg();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
//ִ<><D6B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>(ִ<><D6B4>һ<EFBFBD><D2BB>)
|
|
|
|
|
UINT ExecuteStepThread(LPVOID pParam)
|
|
|
|
|
{
|
|
|
|
|
CTrackWorkFlow *WorkFlow = (CTrackWorkFlow *)pParam;
|
|
|
|
|
WorkFlow->ExecuteCurStep();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CTrackWorkFlow::CTrackWorkFlow(CString Name)
|
|
|
|
|
{
|
|
|
|
|
m_TrackName = Name;
|
|
|
|
|
m_ProductIdx = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Ʒ<EFBFBD><C6B7>λ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_TrackName == TRACK_NAME_1)
|
|
|
|
|
m_TrackType = _ETrackType_Track_1;
|
|
|
|
|
else
|
|
|
|
|
m_TrackType = _ETrackType_Track_2;
|
|
|
|
|
|
|
|
|
|
m_ComPort = 1;//ͨ<><CDA8><EFBFBD>ô<EFBFBD><C3B4>ں<EFBFBD>
|
|
|
|
|
m_ComBaudRate = 115200;//ͨ<><CDA8><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);//<2F><>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_OldWorkStep = _ETrack_Step_Stop;//֮ǰ<D6AE>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
m_bStopReadMsg = false;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ<EFBFBD><CDA3>ȡplc <20><>Ϣ
|
|
|
|
|
m_bAutoWorking = false;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ӹ<EFBFBD>
|
|
|
|
|
m_bLoadProduct = false;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>load <20>˲<EFBFBD>Ʒ
|
|
|
|
|
m_ReadMsgDelay = 200;
|
|
|
|
|
m_CutProductCnt = 0;//<2F>и<EFBFBD><D0B8><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_bCircleStop = false;//<2F><>ǰѭ<C7B0><D1AD><EFBFBD><EFBFBD>ֹͣ
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
CTrackWorkFlow::~CTrackWorkFlow(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4>ڲ<EFBFBD><DAB2><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::SetComPar(int Port, int BaudRate)
|
|
|
|
|
{
|
|
|
|
|
m_ComPort = Port;//ͨ<><CDA8><EFBFBD>ô<EFBFBD><C3B4>ں<EFBFBD>
|
|
|
|
|
m_ComBaudRate = BaudRate;//ͨ<><CDA8><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::WorkFlowStart()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>WorkFlow <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
AfxBeginThread(WorkFlowCtrlThread, this);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>plc ͨ<><CDA8><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|
|
|
|
if (m_TrackCOM.Open(m_ComPort, m_ComBaudRate))
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡplc <20><>Ϣ<EFBFBD><CFA2><EFBFBD>߳<EFBFBD>
|
|
|
|
|
AfxBeginThread(ReadPlcMsgThread, this);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CString LogStr;
|
|
|
|
|
LogStr.Format(_T("TrackCOM %d <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>"), m_ComPort);
|
|
|
|
|
gLogMgr->WriteDebugLog(LogStr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::WorkFlowCtrl()
|
|
|
|
|
{
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (gExitApp)
|
|
|
|
|
return;
|
|
|
|
|
Sleep(100);
|
|
|
|
|
if (m_CurWorkStep == m_OldWorkStep)//<2F>ޱ仯
|
|
|
|
|
continue;
|
|
|
|
|
if (m_OldWorkStep == _ETrack_Step_Unload)//unload <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|
|
|
|
{
|
|
|
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CancelUnloadRequest();
|
|
|
|
|
gStopTimes = 0;
|
|
|
|
|
}
|
|
|
|
|
m_OldWorkStep = m_CurWorkStep;//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
AfxBeginThread(ExecuteStepThread, this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ִ<>е<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::ExecuteCurStep()
|
|
|
|
|
{
|
|
|
|
|
if (gExitApp)
|
|
|
|
|
return;
|
|
|
|
|
switch (m_CurWorkStep)
|
|
|
|
|
{
|
|
|
|
|
/*case _ETrack_Step_Load_End://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
MoveToWaitPos();//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ȴ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Mark_Waiting://<2F>ȴ<EFBFBD><C8B4>ӹ<EFBFBD>
|
|
|
|
|
CatchMark();//ץȡ<D7A5><C8A1>λ
|
|
|
|
|
break;*/
|
|
|
|
|
case _ETrack_Step_Catch_mark_End://<2F>ȴ<EFBFBD><C8B4>ӹ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
MarkProcess();//<2F><><EFBFBD>㣬<EFBFBD>ռ<EFBFBD><D5BC>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
/*case _ETrack_Step_Mark_End://<2F>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ThrowEdge();//ȥ<>߿<EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Throw_Edge_End://ȥ<>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
UnLoad();//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Unload_End://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Load();//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Load_Err://<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
case _ETrack_Step_Catch_mark_Err://ץȡ<D7A5><C8A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
case _ETrack_Step_Mark_Err://<2F>и<EFBFBD><D0B8><EFBFBD><EFBFBD>̴<EFBFBD><CCB4><EFBFBD>
|
|
|
|
|
case _ETrack_Step_Unload_Err://<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
case _ETrack_Step_Throw_Edge_Err://ȥ<>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_TrackType == gCurLockTrackType)
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
//<2F>˳<EFBFBD><CBB3>Զ<EFBFBD>״̬
|
|
|
|
|
StopAutoWork();
|
|
|
|
|
}
|
|
|
|
|
break;*/
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CTrackWorkFlow::SetCurTrackWorkStep(ETrackWorkStep Step)
|
|
|
|
|
{
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Load || m_CurWorkStep == _ETrack_Step_Throw_Edge)
|
|
|
|
|
{
|
|
|
|
|
if (Step == _ETrack_Step_Unload_End)
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("Canot Set Track_Step_Unload_End");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_CurWorkStep = Step;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ӹ<EFBFBD>
|
|
|
|
|
bool CTrackWorkFlow::StartAutoWork()
|
|
|
|
|
{
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Unload)
|
|
|
|
|
{
|
|
|
|
|
if (gStopTimes < gProgram_SZ_XL->GetStopStepUnloadTimes())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n <20>ο<EFBFBD><CEBF><EFBFBD>ǿ<EFBFBD><C7BF>ֹͣ
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><EFBFBD><EFBFBD>ֹͣ!");
|
|
|
|
|
CString str;
|
|
|
|
|
str.Format("StopTimes = %ld", gStopTimes);
|
|
|
|
|
gLogMgr->WriteDebugLog(str);
|
|
|
|
|
gStopTimes++;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ֹͣ<CDA3>Զ<EFBFBD><D4B6>ӹ<EFBFBD>
|
|
|
|
|
StopAutoWork();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
gStopTimes = 0;//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ж<EFBFBD>λmark
|
|
|
|
|
Dbxy MarkPt1;
|
|
|
|
|
Dbxy MarkPt2;
|
|
|
|
|
if (!gObjComponentMgr->GetTwoMarkPt(MarkPt1, MarkPt2))//<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB>
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("û<EFBFBD>мӹ<EFBFBD>ͼ<EFBFBD><EFBFBD>!");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
m_bAutoWorking = true;
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F><><EFBFBD>Զ<EFBFBD>ģʽ<C4A3><CABD>Ҫ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ʼ
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>load <20>˲<EFBFBD>Ʒ
|
|
|
|
|
if (m_bLoadProduct)
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
if (MsgBox.ConfirmOkCancel("ȷ<EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>,ȡ<><C8A1>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"))
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Mark_Waiting);
|
|
|
|
|
else
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);//ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load);
|
|
|
|
|
}
|
|
|
|
|
CString Log = m_TrackName + " <20><>ʼ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//ֹͣ<CDA3>Զ<EFBFBD><D4B6>ӹ<EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::StopAutoWork()
|
|
|
|
|
{
|
|
|
|
|
CString Log = m_TrackName + " ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
m_bAutoWorking = false;
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CancelUnloadRequest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::ManualOperation(ETrackWorkStep TrackWorkStep)
|
|
|
|
|
{
|
|
|
|
|
//<2F>Զ<EFBFBD><D4B6>ӹ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>(<28>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>Load_End <20><><EFBFBD><EFBFBD>)
|
|
|
|
|
if (m_bAutoWorking && TrackWorkStep != _ETrack_Step_Load_End)
|
|
|
|
|
{
|
|
|
|
|
CString Log = m_TrackName + " <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>Load_End <20><><EFBFBD>Զ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
if (TrackWorkStep == _ETrack_Step_Load_End && gProgram_SZ_XL->IsbAutoWorkMode())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (TrackWorkStep == _ETrack_Step_Load_End)
|
|
|
|
|
{
|
|
|
|
|
//<2F>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ProductCarrierOpenClose(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(TrackWorkStep);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
void CTrackWorkFlow::ReadPlcMsg()
|
|
|
|
|
{
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (gExitApp)
|
|
|
|
|
break;
|
|
|
|
|
if (m_bStopReadMsg)
|
|
|
|
|
{
|
|
|
|
|
Sleep(100);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
ReadPlcMsgExt();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CTrackWorkFlow::ReadPlcMsgExt()
|
|
|
|
|
{
|
|
|
|
|
Sleep(m_ReadMsgDelay);
|
|
|
|
|
char buf[PLC_READ_MSG_LEN];
|
|
|
|
|
memset(buf, 0, sizeof(buf));
|
|
|
|
|
int ReadBytes = m_TrackCOM.Read(buf, PLC_READ_MSG_LEN);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (ReadBytes > 0)
|
|
|
|
|
{
|
|
|
|
|
AnalyzeRecvCmd(buf, PLC_READ_MSG_LEN);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
void CTrackWorkFlow::AnalyzeRecvCmd(char *buf, int len)
|
|
|
|
|
{
|
|
|
|
|
//<2F>ҵ<EFBFBD># <20><>λ<EFBFBD><CEBB>
|
|
|
|
|
int IdxEnd = -1;
|
|
|
|
|
for (int k = 0;k < len;k++)
|
|
|
|
|
{
|
|
|
|
|
if (buf[k] == '#')
|
|
|
|
|
{
|
|
|
|
|
IdxEnd = k;
|
|
|
|
|
CString s;
|
|
|
|
|
s.Format(_T("Idx # = %d"), IdxEnd);
|
|
|
|
|
gLogMgr->WriteDebugLog(s);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (IdxEnd < 0)//û<>ҵ<EFBFBD>
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (IdxEnd != len - 1)
|
|
|
|
|
buf[IdxEnd + 1] = '\0';
|
|
|
|
|
|
|
|
|
|
CString PlcMsg(buf);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->" + PlcMsg);
|
|
|
|
|
|
|
|
|
|
int IdxK = -1;//<2F><>һ<EFBFBD><D2BB>K <20><>λ<EFBFBD><CEBB>
|
|
|
|
|
for (int k = 0;k < IdxEnd;k++)
|
|
|
|
|
{
|
|
|
|
|
if (buf[k] == 'K')
|
|
|
|
|
{
|
|
|
|
|
IdxK = k;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (IdxK < 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3D1)#") != -1 || PlcMsg.Find("$(KQ4D1)#") != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->_ETrack_Step_Unload_End");
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Unload)//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_bCircleStop)//<2F><>ǰѭ<C7B0><D1AD>ֹͣ
|
|
|
|
|
{
|
|
|
|
|
m_bCircleStop = false;//ֹֻͣһ<D6B9><D2BB>
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//<2F>Զ<EFBFBD><D4B6>ָ<EFBFBD>check ״̬
|
|
|
|
|
CString Log = m_TrackName + " Circle Stop";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
StopAutoWork();//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (PlcMsg.Find("$(KQ3E)#") != -1 || PlcMsg.Find("$(KQ4E)#") != -1)//<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->_ETrack_Step_Unload_Err");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>plc <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
{
|
|
|
|
|
CString log;
|
|
|
|
|
CString msg = "$(KQ";
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Open_Product)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "G";
|
|
|
|
|
log = "SendPlcMsg: Track_1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "I";
|
|
|
|
|
log = "SendPlcMsg: Track_2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Close_Product)//<2F>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "F";
|
|
|
|
|
log = "SendPlcMsg: Track_1 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "H";
|
|
|
|
|
log = "SendPlcMsg: Track_2 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Vac_Sorb_On)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "9";
|
|
|
|
|
log = "SendPlcMsg: Track_1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "B";
|
|
|
|
|
log = "SendPlcMsg: Track_2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Vac_Sorb_Off)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "A";
|
|
|
|
|
log = "SendPlcMsg: Track_1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "C";
|
|
|
|
|
log = "SendPlcMsg: Track_2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_Start)//<2F>Զ<EFBFBD><D4B6><EFBFBD>ʼ
|
|
|
|
|
{
|
|
|
|
|
msg += "5";
|
|
|
|
|
log = "SendPlcMsg: <20>Զ<EFBFBD><D4B6><EFBFBD>ʼ";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_End)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
msg += "6";
|
|
|
|
|
log = "SendPlcMsg: <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Unload)//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "3";
|
|
|
|
|
log = "SendPlcMsg: Track_1 <20><><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "4";
|
|
|
|
|
log = "SendPlcMsg: Track_2 <20><><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Cancel_Unload)//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "D";
|
|
|
|
|
log = "SendPlcMsg: Track_1 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "E";
|
|
|
|
|
log = "SendPlcMsg: Track_2 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Red_Alam_On)//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
msg += "1";
|
|
|
|
|
log = "SendPlcMsg: <20><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Red_Alam_Off)//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
msg += "2";
|
|
|
|
|
log = "SendPlcMsg: <20><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
gLogMgr->WriteDebugLog(log);
|
|
|
|
|
msg += ")#\r\n";
|
|
|
|
|
return msg;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>PLC (bStopReadMsg <20>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ<EFBFBD><CDA3>ȡPLC <20><>Ϣ)
|
|
|
|
|
bool CTrackWorkFlow::SendMsgToPlc(ETrackPlcCmd PlcCmd, bool bStopReadMsg)
|
|
|
|
|
{
|
|
|
|
|
if (bStopReadMsg)
|
|
|
|
|
{
|
|
|
|
|
m_bStopReadMsg = true;//<2F><>ͣ<EFBFBD><CDA3>ȡ
|
|
|
|
|
Sleep(300);
|
|
|
|
|
}
|
|
|
|
|
CString Msg = GetSendPlcMsgStr(PlcCmd);
|
|
|
|
|
if (m_TrackCOM.IsOpen())
|
|
|
|
|
{
|
|
|
|
|
char * buf = Msg.GetBuffer();
|
|
|
|
|
int len = Msg.GetLength();
|
|
|
|
|
m_TrackCOM.WriteBuf(buf, len);//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
gLogMgr->WriteDebugLog("SendMsgToPlc--->" + Msg);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("Plc <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>!");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ȴ<EFBFBD>PLC <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
bool Ret = true;
|
|
|
|
|
//Ret = WaitPlcRevMsg(PlcCmd);
|
|
|
|
|
if (bStopReadMsg)
|
|
|
|
|
{
|
|
|
|
|
m_bStopReadMsg = false;//<2F>ָ<EFBFBD><D6B8><EFBFBD>ȡ
|
|
|
|
|
}
|
|
|
|
|
Sleep(gProgram_SZ_XL->GetPlcCmdSendDelay());
|
|
|
|
|
return Ret;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>/<2F>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::ProductCarrierOpenClose(bool bOpen)
|
|
|
|
|
{
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
if (bOpen)
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Open_Product;
|
|
|
|
|
else
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Close_Product;
|
|
|
|
|
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::VacSorbOnOff(bool bOn)
|
|
|
|
|
{
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
if (bOn)
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Vac_Sorb_On;
|
|
|
|
|
else
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Vac_Sorb_Off;
|
|
|
|
|
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::RadAlamOnOff(bool bOn)
|
|
|
|
|
{
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
if (bOn)
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Red_Alam_On;
|
|
|
|
|
else
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Red_Alam_Off;
|
|
|
|
|
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//֪ͨplc <20>Զ<EFBFBD><D4B6><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::SendAutoStartFlg(bool bStart)
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)//<2F>ù<EFBFBD><C3B9><EFBFBD>1 <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
if (bStart)
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Auto_Start;
|
|
|
|
|
else
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Auto_End;
|
|
|
|
|
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::CancelUnloadRequest()
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog(m_TrackName + " CancelUnloadRequest");
|
|
|
|
|
SendMsgToPlc(_ETrack_PlcCmd_Cancel_Unload, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F>ƶ<EFBFBD><C6B6><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
void CTrackWorkFlow::MoveToPos(ETrackWorkStep WorkStep)
|
|
|
|
|
{
|
|
|
|
|
double Coord = gProgram_SZ_XL->GetMoveCoord(m_TrackType, WorkStep);
|
|
|
|
|
|
|
|
|
|
CString MotorStr = (m_TrackType == _ETrackType_Track_1) ? (MOTOR_X) : (MOTOR_X2);
|
|
|
|
|
CMotor &Motor = *(CMotor::GetMotor(MotorStr));
|
|
|
|
|
|
|
|
|
|
CWorkCmdContainer CmdContainer;
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdSetMotorSpeed *pCmd = new CWorkCmdSetMotorSpeed();
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
pCmd->SetbSetMotorX();
|
|
|
|
|
else
|
|
|
|
|
pCmd->SetbSetMotorX2();
|
|
|
|
|
pCmd->SetSpeedType(_SpeedType_Move);
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdMoveMotor *pCmd = new CWorkCmdMoveMotor(Motor, Coord);
|
|
|
|
|
pCmd->SetMoveFlg(false);//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
//<2F>ȴ<EFBFBD><C8B4>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdWaitMotorStop *pCmd = new CWorkCmdWaitMotorStop();
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
pCmd->SetbWaitMotorX();
|
|
|
|
|
else
|
|
|
|
|
pCmd->SetbWaitMotorX2();
|
|
|
|
|
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
CWorkCmdInvoker WorkInvoker;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
WorkInvoker.Excute(CmdContainer);
|
|
|
|
|
|
|
|
|
|
Motor.NotifyObservers();
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::Load()
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load);
|
|
|
|
|
//ƽ̨<C6BD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F>Զ<EFBFBD>ģʽ
|
|
|
|
|
{
|
|
|
|
|
//<2F>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ProductCarrierOpenClose(false);
|
|
|
|
|
MoveToPos(_ETrack_Step_Load);
|
|
|
|
|
}
|
|
|
|
|
else//<2F>ֶ<EFBFBD>ģʽ<C4A3>ƶ<EFBFBD><C6B6><EFBFBD>unload <20><>λ<EFBFBD><CEBB>
|
|
|
|
|
{
|
|
|
|
|
MoveToPos(_ETrack_Step_Unload);
|
|
|
|
|
}
|
|
|
|
|
CString Log = m_TrackName + " Load";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldLoad())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load_End);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load_Stop);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F>Զ<EFBFBD>ģʽ
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źŸ<C5BA><C5B8><EFBFBD><EFBFBD><EFBFBD>PLC
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Load, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load_Err);
|
|
|
|
|
Log = m_TrackName + " Load Err";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F>ȴ<EFBFBD>PLC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Load_End)
|
|
|
|
|
break;
|
|
|
|
|
Sleep(200);
|
|
|
|
|
}
|
|
|
|
|
Log = m_TrackName + " Load End";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
else//<2F><><EFBFBD>Զ<EFBFBD>ģʽֱ<CABD><D6B1><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load_Stop);
|
|
|
|
|
Log = m_TrackName + " Load Stop";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ȴ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
void CTrackWorkFlow::MoveToWaitPos()
|
|
|
|
|
{
|
|
|
|
|
CString Log = m_TrackName + " MoveToWaitPos";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_To_Wait_Pos);
|
|
|
|
|
MoveToPos(_ETrack_Step_To_Wait_Pos);
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Mark_Waiting);
|
|
|
|
|
Log = m_TrackName + " Mark Waiting";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
m_bLoadProduct = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>load <20>˲<EFBFBD>Ʒ
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>л<EFBFBD>ƽ̨XY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::ChangePlatXYGroupIdx()
|
|
|
|
|
{
|
|
|
|
|
int idx = (m_TrackType == _ETrackType_Track_1) ? 0 : 1;
|
|
|
|
|
gMotionCard_PCI1245->SetCurGpIdx(idx);
|
|
|
|
|
}
|
|
|
|
|
//ץȡ<D7A5><C8A1>λ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ת
|
|
|
|
|
void CTrackWorkFlow::CatchMark()
|
|
|
|
|
{
|
|
|
|
|
//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>CatchMark
|
|
|
|
|
/*if (gCurLockTrackType != _ETrackType_NULL)
|
|
|
|
|
{
|
|
|
|
|
m_OldWorkStep = _ETrack_Step_NULL;//ǿ<>Ƹı<C6B8>֮ǰ<D6AE><C7B0>״̬
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gCurLockTrackType = m_TrackType;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark);
|
|
|
|
|
CString Log = m_TrackName + " CatchMark";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);*/
|
|
|
|
|
|
|
|
|
|
/*//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
VacSorbOnOff(true);
|
|
|
|
|
|
|
|
|
|
bool Ret = true;
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldMarking() == false)//<2F><><EFBFBD>μӹ<CEBC><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F>л<EFBFBD>ƽ̨XY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ChangePlatXYGroupIdx();
|
|
|
|
|
/ *CProduct &Product = gServer->m_RcvProduct;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ǰproduct <20>Ļ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
|
|
|
|
Dbxy BasePt = Product.GetProductBasePt();
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>2 Ҫƫ<D2AA>ƻ<EFBFBD><EFBFBD><D7BC>
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
{
|
|
|
|
|
Dbxy Track2Offset = gProgram_SZ_XL->GetTrack2Offset();
|
|
|
|
|
BasePt.x += Track2Offset.x;
|
|
|
|
|
BasePt.y += Track2Offset.y;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>obj
|
|
|
|
|
gProgramCutMgr->MoveObjData(BasePt);
|
|
|
|
|
//<2F>ƶ<EFBFBD>area
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
gObjComponentMgr->CalAllObjCenterPt();
|
|
|
|
|
Dbxy AllObjCenterPt = gObjComponentMgr->GetAllObjCenterPt();
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(AllObjCenterPt);
|
|
|
|
|
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>3
|
|
|
|
|
Dbxy MarkPt3;
|
|
|
|
|
if (gObjComponentMgr->GetMark3Pt(MarkPt3))
|
|
|
|
|
{
|
|
|
|
|
Ret = gCommonFlowMgr->CameraCatchMark3(Product);
|
|
|
|
|
}
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product);//ֻץȡһ<C8A1><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
if (!Product.IsSetRealMarkPt1())
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>2
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product);//ֻץȡһ<C8A1><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if (!Product.IsMarkReady())//mark ʶ<><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
//ץȡʧ<C8A1><CAA7>ʱ/<2F><><EFBFBD>Զ<EFBFBD>״̬ʱ
|
|
|
|
|
if (Ret == false || m_bAutoWorking == false)
|
|
|
|
|
{
|
|
|
|
|
VacSorbOnOff(false);//<2F><><EFBFBD>շſ<D5B7>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
}
|
|
|
|
|
}* /
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
if (Ret == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark_Err);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_TrackType == gCurLockTrackType)
|
|
|
|
|
{
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (m_CurWorkStep != _ETrack_Step_Catch_mark_End)//<2F>쳣ֹͣʱ
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>(<28><>ֹarea <20><>λ)
|
|
|
|
|
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
|
|
|
|
|
}
|
|
|
|
|
//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);*/
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::MarkProcess()
|
|
|
|
|
{
|
|
|
|
|
gWorkTime.StartRecordTime();//<2F><>ʱ<EFBFBD><CAB1>ʼ
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//SetCurTrackWorkStep(_ETrack_Step_Marking);
|
|
|
|
|
//XY <20><><EFBFBD>л<EFBFBD>
|
|
|
|
|
MarkProcessExt();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//SetCurTrackWorkStep(_ETrack_Step_Marking);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
/* gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//gCurLockTrackType = _ETrackType_NULL;//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
//VacSorbOnOff(false);//<2F><><EFBFBD>շſ<D5B7>
|
|
|
|
|
|
|
|
|
|
m_CutProductCnt++;//<2F>и<EFBFBD><D0B8><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7>ͼӹ<CDBC><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
WriteRecordTimesToFile();
|
|
|
|
|
gWorkTime.StopRecordTime();//ֹͣ<CDA3><D6B9>ʱ
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_NULL);//<2F>ÿ<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
bool CTrackWorkFlow::MarkProcessExt()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ƫ<EFBFBD><C6AB>
|
|
|
|
|
Dbxy MarkOffset = gProgram_SZ_XL->GetTrackMarkOffset(m_TrackType);
|
|
|
|
|
gCommonFlowMgr->SetAdjustOffsetAll(MarkOffset);
|
|
|
|
|
//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|
|
|
|
gProgram_SZ_XL->SetCurMarkingTrack(m_TrackType);
|
|
|
|
|
|
|
|
|
|
CProduct &Product = gServer->m_RcvProduct;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Dbxy BasePt = Product.GetProductBasePt();
|
|
|
|
|
//=======<3D>ƶ<EFBFBD>obj==============
|
|
|
|
|
gProgramCutMgr->MoveObjData(BasePt);
|
|
|
|
|
///--------<2D>ƶ<EFBFBD>area--------------------------
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
gObjComponentMgr->CalAllObjCenterPt();
|
|
|
|
|
Dbxy AllObjCenterPt = gObjComponentMgr->GetAllObjCenterPt();
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(AllObjCenterPt);*/
|
|
|
|
|
|
|
|
|
|
bool Ret;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>
|
|
|
|
|
if (!gProgram_SZ_XL->IsbSelMarkMode())//ȫ<><C8AB><EFBFBD>ӹ<EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
gObjComponentMgr->SelAllObj();
|
|
|
|
|
Ret = gProgramCutMgr->StartWork(Product, true);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD>
|
|
|
|
|
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();//ָ<>
|
|
|
|
|
CmdContainer.Clear();
|
|
|
|
|
//ȡ<><C8A1>ѡ<EFBFBD><D1A1>״̬
|
|
|
|
|
gObjComponentMgr->NotSelAllObj();
|
|
|
|
|
|
|
|
|
|
return Ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ȥ<>߿<EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::ThrowEdge()
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Throw_Edge);
|
|
|
|
|
//֪ͨplc <20><><EFBFBD><EFBFBD>
|
|
|
|
|
CString Log = m_TrackName + " Throw Edge";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldLoad())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_End);
|
|
|
|
|
else
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F>Զ<EFBFBD>ģʽ
|
|
|
|
|
{
|
|
|
|
|
//ƽ̨<C6BD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
MoveToPos(_ETrack_Step_Load);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Throw_Edge, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_Err);
|
|
|
|
|
Log = m_TrackName + " Throw Edge Err";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Throw_Edge_End)
|
|
|
|
|
break;
|
|
|
|
|
Sleep(200);
|
|
|
|
|
}
|
|
|
|
|
Log = m_TrackName + " Throw Edge End";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_Stop);
|
|
|
|
|
Log = m_TrackName + " Load Stop";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_End);
|
|
|
|
|
Log = m_TrackName + " Throw Edge End";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::UnLoad()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD>״̬
|
|
|
|
|
if (gProgram_SZ_XL->IsbCheckUnloadState())
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>ϻ<EFBFBD><CFBB>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD>Ϊunload<61><64><EFBFBD><EFBFBD>
|
|
|
|
|
if (gMotionCard_PCI1245->CheckUnloadState() == false)
|
|
|
|
|
{
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
|
|
|
|
|
if (OtherTrackWorkStep != _ETrack_Step_Unload)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("<EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>쳣!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ƽ̨<C6BD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
MoveToPos(_ETrack_Step_Unload);
|
|
|
|
|
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ProductCarrierOpenClose(true);
|
|
|
|
|
|
|
|
|
|
//֪ͨplc <20><><EFBFBD><EFBFBD>
|
|
|
|
|
CString Log = m_TrackName + " UnLoad";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldUnLoad())//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
else
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unload ,Ҫ<>ȴ<EFBFBD><C8B4><EFBFBD>unload <20><><EFBFBD><EFBFBD>
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())
|
|
|
|
|
{
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
Sleep(200);
|
|
|
|
|
if (m_bAutoWorking == false)//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>״̬,<2C>˳<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
|
|
|
|
|
if (OtherTrackWorkStep != _ETrack_Step_Unload)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Y <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,Ҫ<><D2AA>Y <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
|
|
|
|
MoveMotorYToSafePos();
|
|
|
|
|
//֪ͨPLC <20><><EFBFBD><EFBFBD>
|
|
|
|
|
SendMsgToPlc(_ETrack_PlcCmd_Unload, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F>Զ<EFBFBD>ģʽ
|
|
|
|
|
{
|
|
|
|
|
//<2F>ȴ<EFBFBD>PLC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Unload_End)
|
|
|
|
|
break;
|
|
|
|
|
Sleep(200);
|
|
|
|
|
}
|
|
|
|
|
m_bLoadProduct = false;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>load <20>˲<EFBFBD>Ʒ
|
|
|
|
|
}
|
|
|
|
|
else//<2F>ֶ<EFBFBD>ģʽֱ<CABD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>Y <20>ᵽ<EFBFBD><E1B5BD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::MoveMotorYToSafePos()
|
|
|
|
|
{
|
|
|
|
|
double DangerCoordStart;//Σ<>շ<EFBFBD>Χstart
|
|
|
|
|
double DangerCoordEnd;//Σ<>շ<EFBFBD>Χend
|
|
|
|
|
double SafeCoord;//<2F><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|
|
|
|
gProgram_SZ_XL->GetTrackMotorYCoord(m_TrackType, DangerCoordStart, DangerCoordEnd, SafeCoord);
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>Y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CMotor &MotorY = *(CMotor::GetMotor(MOTOR_Y));
|
|
|
|
|
double CoordY = gMotionCard_PCI1245->GetMotorCoord(MotorY);
|
|
|
|
|
|
|
|
|
|
if (DangerCoordStart <= CoordY && CoordY <= DangerCoordEnd)
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("Move MotorY To Safe Coord");
|
|
|
|
|
gCurLockTrackType = m_TrackType;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F>ƶ<EFBFBD>Y <20>ᵽ<EFBFBD><E1B5BD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|
|
|
|
CWorkCmdContainer CmdContainer;
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdSetMotorSpeed *pCmd = new CWorkCmdSetMotorSpeed();
|
|
|
|
|
pCmd->SetbSetMotorY();
|
|
|
|
|
pCmd->SetSpeedType(_SpeedType_Move);
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdMoveMotor *pCmd = new CWorkCmdMoveMotor(MotorY, SafeCoord);
|
|
|
|
|
pCmd->SetMoveFlg(false);//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
//<2F>ȴ<EFBFBD><C8B4>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CWorkCmdWaitMotorStop *pCmd = new CWorkCmdWaitMotorStop();
|
|
|
|
|
pCmd->SetbWaitMotorY();
|
|
|
|
|
CmdContainer.AddCmd(pCmd);
|
|
|
|
|
}
|
|
|
|
|
CWorkCmdInvoker WorkInvoker;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
WorkInvoker.Excute(CmdContainer);
|
|
|
|
|
|
|
|
|
|
MotorY.NotifyObservers();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("MotorY At Safe Coord");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CString CTrackWorkFlow::GetRecordFilePath()
|
|
|
|
|
{
|
|
|
|
|
CString Path = (m_TrackType == _ETrackType_Track_1) ? (TRACK1_RECORD_FILE) : (TRACK2_RECORD_FILE);
|
|
|
|
|
CString FilePath;
|
|
|
|
|
CFileMgr FileMgr;
|
|
|
|
|
FileMgr.GetFullFilePath(FilePath, Path);
|
|
|
|
|
return FilePath;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽<EFBFBD>ļ<EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::WriteRecordTimesToFile()
|
|
|
|
|
{
|
|
|
|
|
CString FilePath = GetRecordFilePath();
|
|
|
|
|
|
|
|
|
|
CFile file(FilePath, CFile::modeReadWrite | CFile::modeCreate);
|
|
|
|
|
CArchive ar(&file, CArchive::store);
|
|
|
|
|
|
|
|
|
|
ar << m_CutProductCnt;
|
|
|
|
|
}
|
|
|
|
|
void CTrackWorkFlow::ReadRecordTimesFromFile()
|
|
|
|
|
{
|
|
|
|
|
CString FilePath = GetRecordFilePath();
|
|
|
|
|
|
|
|
|
|
CFile file;
|
|
|
|
|
if (file.Open(FilePath, CFile::modeRead))
|
|
|
|
|
{
|
|
|
|
|
CArchive ar(&file, CArchive::load);
|
|
|
|
|
ar >> m_CutProductCnt;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CTrackWorkFlow::ResetRecordTimes()
|
|
|
|
|
{
|
|
|
|
|
m_CutProductCnt = 0;
|
|
|
|
|
WriteRecordTimesToFile();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|