|
|
|
|
#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"
|
|
|
|
|
#include "ClientMgr.h"
|
|
|
|
|
#include "SocketMgr.h"
|
|
|
|
|
#include <thread>
|
|
|
|
|
|
|
|
|
|
#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"
|
|
|
|
|
|
|
|
|
|
CCommPortMgr CTrackWorkFlow::m_TrackCOM;//ͨ<><CDA8><EFBFBD>õĴ<C3B5><C4B4>ڹ<EFBFBD><DAB9><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<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(bool bOpenCom /*= true*/)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>WorkFlow <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
AfxBeginThread(WorkFlowCtrlThread, this);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>plc ͨ<><CDA8><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|
|
|
|
if (bOpenCom&&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 (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
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><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();
|
|
|
|
|
if ((!gTrackWorkFlow1.m_bAutoWorking)&&(!gTrackWorkFlow2.m_bAutoWorking))
|
|
|
|
|
{
|
|
|
|
|
SendMsgToPlc(_ETrack_PlcCmd_Auto_End, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#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 (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
AnalyzeRecvPlcCmd(buf, PLC_READ_MSG_LEN);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
void CTrackWorkFlow::AnalyzeRecvPlcCmd(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;
|
|
|
|
|
CString logstrH = "ReadPlcMsg:" + PlcMsg + " ==>";
|
|
|
|
|
CString logstrT = "δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>!";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if (PlcMsg.Find("$(KQ3D1)#") != -1 || PlcMsg.Find("$(KQ4D1)#") != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
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 + " ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
StopAutoWork();//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3E)#") != -1 || PlcMsg.Find("$(KQ4E)#") != -1)//<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg==>_ETrack_Step_Unload_Err");
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
///-------------------------<2D><><EFBFBD><EFBFBD>1-------------------------------------///
|
|
|
|
|
if (gTrackWorkFlow1.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 (PlcMsg.Find("$(KQ3D1)#") != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
if (gTrackWorkFlow1.m_bCircleStop)//<2F><>ǰѭ<C7B0><D1AD>ֹͣ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bCircleStop = false;//ֹֻͣһ<D6B9><D2BB>
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//<2F>Զ<EFBFBD><D4B6>ָ<EFBFBD>check ״̬
|
|
|
|
|
CString Log = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow1.StopAutoWork();//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3E)#") != -1)//<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ5D1)#") != -1)//<2F>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bPushJigOut = true;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5D1)#] ==><3E><><EFBFBD><EFBFBD>1<EFBFBD>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ5E)#") != -1)//<2F>ξ<EFBFBD>δ<EFBFBD><CEB4>λ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bJigOK = false;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ξ<EFBFBD>δ<EFBFBD><EFBFBD>λ!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5E)#] ==><3E><><EFBFBD><EFBFBD>1<EFBFBD>ξ<EFBFBD>δ<EFBFBD><CEB4>λ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ7D1)#") != -1)//<2F>ξߵ<CEBE>λ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bJigOK = true;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ξߵ<EFBFBD>λ!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ7D1)#]==><3E><><EFBFBD><EFBFBD>1<EFBFBD>ξߵ<CEBE>λ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///------------------------<2D><><EFBFBD><EFBFBD>2-------------------------------------///
|
|
|
|
|
if (gTrackWorkFlow2.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 (PlcMsg.Find("$(KQ4D1)#") != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
if (gTrackWorkFlow2.m_bCircleStop)//<2F><>ǰѭ<C7B0><D1AD>ֹͣ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bCircleStop = false;//ֹֻͣһ<D6B9><D2BB>
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//<2F>Զ<EFBFBD><D4B6>ָ<EFBFBD>check ״̬
|
|
|
|
|
CString Log = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow2.StopAutoWork();//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ4E)#") != -1)//<2F><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ6D1)#") != -1)//<2F>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bPushJigOut = true;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6D1)#] ==><3E><><EFBFBD><EFBFBD>2<EFBFBD>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ6E)#") != -1)//<2F>ξ<EFBFBD>δ<EFBFBD><CEB4>λ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bJigOK = false;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ξ<EFBFBD>δ<EFBFBD><EFBFBD>λ!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6E)#] ==><3E><><EFBFBD><EFBFBD>2<EFBFBD>ξ<EFBFBD>δ<EFBFBD><CEB4>λ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ8D1)#") != -1)//<2F>ξߵ<CEBE>λ
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bJigOK = true;
|
|
|
|
|
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ξߵ<EFBFBD>λ!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ8D1)#]==><3E><><EFBFBD><EFBFBD>2<EFBFBD>ξߵ<CEBE>λ");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gLogMgr->WriteDebugLog(logstrH + logstrT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#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: $(KQG)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "I";
|
|
|
|
|
log = "SendPlcMsg: $(KQI)# ==><3E><><EFBFBD><EFBFBD>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: $(KQF)# ==> <20><><EFBFBD><EFBFBD>1 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "H";
|
|
|
|
|
log = "SendPlcMsg: $(KQH)# ==><3E><><EFBFBD><EFBFBD>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: $(KQ9)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "B";
|
|
|
|
|
log = "SendPlcMsg: $(KQB)# ==><3E><><EFBFBD><EFBFBD>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: $(KQA)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "C";
|
|
|
|
|
log = "SendPlcMsg: $(KQC)# ==><3E><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_Start)//<2F>Զ<EFBFBD><D4B6><EFBFBD>ʼ(<28>̵<EFBFBD>)
|
|
|
|
|
{
|
|
|
|
|
msg += "5";
|
|
|
|
|
log = "SendPlcMsg: $(KQ5)# ==><3E>Զ<EFBFBD><D4B6><EFBFBD>ʼ";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_End)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶƣ<C6B5>
|
|
|
|
|
{
|
|
|
|
|
msg += "6";
|
|
|
|
|
log = "SendPlcMsg: $(KQ6)# ==> <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Unload)//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "3";
|
|
|
|
|
log = "SendPlcMsg: $(KQ3)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "4";
|
|
|
|
|
log = "SendPlcMsg: $(KQ4)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Push_Jig_Out)//<2F><><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "J";
|
|
|
|
|
log = "SendPlcMsg: $(KQJ)# ==><3E><><EFBFBD><EFBFBD>1 <20>Ƴ<EFBFBD><C6B3>ξ<EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "K";
|
|
|
|
|
log = "SendPlcMsg: $(KQK)# ==><3E><><EFBFBD><EFBFBD>2 <20>Ƴ<EFBFBD><C6B3>ξ<EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Check_Jig_In)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "L";
|
|
|
|
|
log = "SendPlcMsg: $(KQL)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "M";
|
|
|
|
|
log = "SendPlcMsg: $(KQM)# ==><3E><><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><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: $(KQD)# ==><3E><><EFBFBD><EFBFBD>1 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "E";
|
|
|
|
|
log = "SendPlcMsg: $(KQE)# ==><3E><><EFBFBD><EFBFBD>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: $(KQ1)# ==><3E><><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: $(KQ2)# ==><3E><><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.ClearCache();
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
m_bCarrierOpen = 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);
|
|
|
|
|
}
|
|
|
|
|
bool CTrackWorkFlow::PushJigOut()
|
|
|
|
|
{
|
|
|
|
|
/*if (gLogMgr->IsDebuging())
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}*/
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Push_Jig_Out;
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
m_bPushJigOut = false;
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
while (cnt < 200 && (!m_bPushJigOut))
|
|
|
|
|
{
|
|
|
|
|
Sleep(100);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 200)
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox("<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ߳<EFBFBD>ʱ!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
bool CTrackWorkFlow::IsJigOK()
|
|
|
|
|
{
|
|
|
|
|
if (gLogMgr->IsDebuging())
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//return true;
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Check_Jig_In;
|
|
|
|
|
|
|
|
|
|
m_bJigOK = false;
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
while (cnt < 10 && (!m_bJigOK))
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 10)
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox(m_TrackName + " <20>ξ<EFBFBD>δ<EFBFBD><CEB4>λ!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//<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);
|
|
|
|
|
|
|
|
|
|
/*if (abs(Coord)<0.005) //<2F><><EFBFBD>˵ȴ<CBB5><C8B4>ͻؿ<CDBB><D8BF>ξߵ<CEBE>λ<EFBFBD><CEBB>;<3B><>ʼΪ0;<3B><><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
return;*/
|
|
|
|
|
|
|
|
|
|
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>ģʽ
|
|
|
|
|
{
|
|
|
|
|
if (!IsJigOK())
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Load_Err);
|
|
|
|
|
Log = m_TrackName + " Load Err";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źŸ<C5BA><C5B8><EFBFBD><EFBFBD>ϻ<EFBFBD>
|
|
|
|
|
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 (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
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>
|
|
|
|
|
#include "CameraHawkvis.h"
|
|
|
|
|
void CTrackWorkFlow::ChangePlatXYGroupIdx()
|
|
|
|
|
{
|
|
|
|
|
int idx = (m_TrackType == _ETrackType_Track_1) ? 0 : 1;
|
|
|
|
|
gMotionCard_PCI1245->SetCurGpIdx(idx);
|
|
|
|
|
gCameraHawkvis->SwitchCamera(idx);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>.
|
|
|
|
|
}
|
|
|
|
|
//ץȡ<D7A5><C8A1>λ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ת
|
|
|
|
|
|
|
|
|
|
void CTrackWorkFlow::CatchMark()
|
|
|
|
|
{
|
|
|
|
|
if (!gObjComponentMgr->GetTwoMarkPt(Dbxy(), Dbxy()))//<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB>
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("û<EFBFBD>мӹ<EFBFBD>ͼ<EFBFBD><EFBFBD>!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//ֻ<><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>
|
|
|
|
|
|
|
|
|
|
//<2F>ռ<EFBFBD>δ<EFBFBD>ƶ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
gClientMgr->SendCmd_CollectData();
|
|
|
|
|
//gMarkAreaMgr->CollectOrgWorkData(gProgram_SZ_XL->IsbSelMarkMode());
|
|
|
|
|
thread t1(&CMarkAreaMgr::CollectOrgWorkData, gMarkAreaMgr, gProgram_SZ_XL->IsbSelMarkMode());
|
|
|
|
|
t1.detach();
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark);
|
|
|
|
|
CString Log = m_TrackName + " CatchMark";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ProductCarrierOpenClose(false);
|
|
|
|
|
VacSorbOnOff(true);
|
|
|
|
|
|
|
|
|
|
bool Ret = true;
|
|
|
|
|
Ret = IsJigOK();
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldMarking() == false)//<2F><><EFBFBD>μӹ<CEBC><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F>л<EFBFBD>ƽ̨XY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ChangePlatXYGroupIdx();
|
|
|
|
|
CProduct &Product = gProductMgr->GetProduct(m_ProductIdx);
|
|
|
|
|
|
|
|
|
|
//start----------<2D><>Ƭ2<C6AC><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ1<C6AC><31>Ϣ------------start
|
|
|
|
|
CProduct Product2 = Product;
|
|
|
|
|
Product2.SetbNewAddProduct(true);
|
|
|
|
|
//end----------<2D><>Ƭ2<C6AC><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ1<C6AC><31>Ϣ<EFBFBD><CFA2>ƫ<EFBFBD><C6AB>----------------end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///--------------------ץȡ<D7A5>ξ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>Ƭ<EFBFBD>Ķ<EFBFBD>λ<EFBFBD><CEBB>--------------------///
|
|
|
|
|
//<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;
|
|
|
|
|
//Product2.SetBasePt(BasePt);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>յ<EFBFBD>Product2<74><32><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
//<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);
|
|
|
|
|
|
|
|
|
|
Product.ResetRealMarkPt();
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product);//ֻץȡһ<C8A1><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if (!Product.IsSetRealMarkPt1())
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>3
|
|
|
|
|
Dbxy MarkPt3;
|
|
|
|
|
if (Ret&&gObjComponentMgr->GetMark3Pt(MarkPt3))
|
|
|
|
|
{
|
|
|
|
|
Ret = gCommonFlowMgr->CameraCatchMark3(Product);
|
|
|
|
|
}
|
|
|
|
|
//ʶ<><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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///Start--------------------ץȡ<D7A5>ξ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ƭ<EFBFBD>Ķ<EFBFBD>λ<EFBFBD><CEBB>--------------------///
|
|
|
|
|
Dbxy Product2MarkPt3;
|
|
|
|
|
if (gClientMgr->IsbDisableServer())//<2F><><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץȡ
|
|
|
|
|
goto CatchProduct2Finished;
|
|
|
|
|
|
|
|
|
|
Product2.ResetRealMarkPt();
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>1
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product2);//ֻץȡһ<C8A1><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
if (!Product2.IsSetRealMarkPt1())
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>3
|
|
|
|
|
if (gObjComponentMgr->GetMark3Pt(Product2MarkPt3) && Ret)
|
|
|
|
|
{
|
|
|
|
|
Ret = gCommonFlowMgr->CameraCatchMark3(Product2);
|
|
|
|
|
}
|
|
|
|
|
//ʶ<><CAB6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>2
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product2);//ֻץȡһ<C8A1><D2BB><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!Product2.IsMarkReady())//mark ʶ<><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gClientMgr->SendCmd_ProductInfo(Product2);
|
|
|
|
|
}
|
|
|
|
|
///End--------------------ץȡ<D7A5>ξ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ƭ<EFBFBD>Ķ<EFBFBD>λ<EFBFBD><CEBB>--------------------End///
|
|
|
|
|
|
|
|
|
|
CatchProduct2Finished:
|
|
|
|
|
|
|
|
|
|
//ץȡʧ<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
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>(<28><>ֹarea <20><>λ)
|
|
|
|
|
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
|
|
|
|
|
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()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
//<2F>Զ<EFBFBD>״̬<D7B4><CCAC>Ҫ<EFBFBD><D2AA>CatchMark <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
|
|
|
|
if (gCurLockTrackType != m_TrackType)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>Զ<EFBFBD>״ֻ̬<CCAC><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
|
|
|
|
|
if (gCurLockTrackType != _ETrackType_NULL)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gCurLockTrackType = m_TrackType;//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
CString Log = m_TrackName + " MarkProcess";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldMarking() == false)//<2F><><EFBFBD>μӹ<CEBC><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//<2F>л<EFBFBD>ƽ̨XY <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ChangePlatXYGroupIdx();
|
|
|
|
|
#if 1
|
|
|
|
|
CProduct &Product = gProductMgr->GetProduct(m_ProductIdx);
|
|
|
|
|
if (!Product.IsMarkReady())
|
|
|
|
|
{
|
|
|
|
|
CString Log = m_TrackName + " û<><C3BB>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>λ!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!IsJigOK())
|
|
|
|
|
{
|
|
|
|
|
CString Log = m_TrackName + " δ<><CEB4><EFBFBD><EFBFBD>ξ<EFBFBD>!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
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();
|
|
|
|
|
#endif
|
|
|
|
|
//<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>
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Mark_End);
|
|
|
|
|
Log = m_TrackName + " Mark End";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Mark_Stop);
|
|
|
|
|
Log = m_TrackName + " Mark Stop";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
}
|
|
|
|
|
m_CutProductCnt++;//<2F>и<EFBFBD><D0B8><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
WriteRecordTimesToFile();
|
|
|
|
|
gWorkTime.StopRecordTime();//ֹͣ<CDA3><D6B9>ʱ
|
|
|
|
|
}
|
|
|
|
|
bool CTrackWorkFlow::MarkProcessExt()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>øù<C3B8><C3B9><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 = gProductMgr->GetProduct(m_ProductIdx);
|
|
|
|
|
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Product.ResetAffinePars();
|
|
|
|
|
//<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 (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
//֪ͨ<CDA8><D6AA><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 (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
Sleep(200);
|
|
|
|
|
//<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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto FunctionUnload = [&]()
|
|
|
|
|
{
|
|
|
|
|
//֪ͨ<CDA8><D6AA><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؾ<EFBFBD>λ
|
|
|
|
|
m_bPushJigReady = false;
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Unload, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
Log = m_TrackName + " unload Err";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3>ؾ<EFBFBD>λ
|
|
|
|
|
CString str = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1";
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
str = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2";
|
|
|
|
|
CString logstr;
|
|
|
|
|
logstr.Format("<EFBFBD>ȴ<EFBFBD>[<5B><><EFBFBD>ϻ<EFBFBD>] <20>˶<EFBFBD><CBB6><EFBFBD>[%s]<5D><><EFBFBD>ؾ<EFBFBD>λ.", str);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
while ((!m_bPushJigReady) )
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
}
|
|
|
|
|
/*if (cnt == 400)
|
|
|
|
|
{
|
|
|
|
|
Log = m_TrackName + " [<5B><><EFBFBD>ϻ<EFBFBD>] <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD>λ <20><>ʱ!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox(m_TrackName + " [<5B><><EFBFBD>ϻ<EFBFBD>] <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD>λ<EFBFBD><CEBB>ʱ!<21><><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
return;
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
if (!PushJigOut())//<2F>Ƴ<EFBFBD><C6B3>ξ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_PushOut_Finished, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
Log = m_TrackName + " unload Err";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//ƽ̨<C6BD>ƶ<EFBFBD><C6B6><EFBFBD> <20>ͻؿ<CDBB><D8BF>ξߵ<CEBE>λ<EFBFBD><CEBB>
|
|
|
|
|
MoveToPos(_ETrack_Step_WaitBack);
|
|
|
|
|
gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD>,<2C><><EFBFBD>ѵ<EFBFBD><D1B5>ɻ<EFBFBD><C9BB>ξ<EFBFBD>λ
|
|
|
|
|
m_bLoadProduct = false;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>load <20>˲<EFBFBD>Ʒ
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//<2F>Զ<EFBFBD>ģʽ
|
|
|
|
|
{
|
|
|
|
|
FunctionUnload();
|
|
|
|
|
}
|
|
|
|
|
else//<2F>ֶ<EFBFBD>ģʽֱ<CABD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (AfxMessageBox("ȷ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?", MB_YESNO) != IDYES)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_NULL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
FunctionUnload();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>Y <20>ᵽ<EFBFBD><E1B5BD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
|
|
|
|
void CTrackWorkFlow::MoveMotorYToSafePos()
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
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
|