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

1688 lines
38 KiB
C++

#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)
{
AfxSocketInit();
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(200);
if (m_CurWorkStep == m_OldWorkStep)//<2F>ޱ仯
continue;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD>,<2C><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ_ETrack_Step_Unloadʱ,<2C><>ִ<EFBFBD><D6B4>
if (m_OldWorkStep == _ETrack_Step_Throw_Edge_End&&m_CurWorkStep == _ETrack_Step_Unload)
{
m_OldWorkStep = m_CurWorkStep;//<2F><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
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>
m_pthread=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>
CatchMarkNewly();//ץȡ<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>
{
auto fErr = [&] {
gTrackWorkFlow1.RadAlamOnOff(true);
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>!");
gTrackWorkFlow1.RadAlamOnOff(false);
};
thread t1(fErr);
t1.detach();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_TrackType == gCurLockTrackType)
gCurLockTrackType = _ETrackType_NULL;
//<2F>˳<EFBFBD><CBB3>Զ<EFBFBD>״̬
StopAutoWork();
}
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();
4 years ago
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;
4 years ago
/*CString s;
s.Format(_T("Idx # = %d"), IdxEnd);
4 years ago
gLogMgr->WriteDebugLog(s);*/
break;
}
}
if (IdxEnd < 0)//û<>ҵ<EFBFBD>
return;
if (IdxEnd != len - 1)
buf[IdxEnd + 1] = '\0';
CString PlcMsg(buf);
4 years ago
//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;
4 years ago
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);
}
}
}
4 years ago
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>
{
4 years ago
if (PlcMsg.Find("$(KQ3D1)#") != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
if (gTrackWorkFlow1.m_bCircleStop)//<2F><>ǰѭ<C7B0><D1AD>ֹͣ
{
4 years ago
gTrackWorkFlow1.m_bCircleStop = false;//ֹֻͣһ<D6B9><D2BB>
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//<2F>Զ<EFBFBD><D4B6>ָ<EFBFBD>check ״̬
4 years ago
CString Log = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>!";
gLogMgr->WriteDebugLog(Log);
4 years ago
gTrackWorkFlow1.StopAutoWork();//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
}
else
{
4 years ago
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
}
}
4 years ago
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);
}
}
4 years ago
if (PlcMsg.Find("$(KQ5D1)#") != -1)//<2F>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
{
gTrackWorkFlow1.m_bPushJigOut = true;
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
4 years ago
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5D1)#] ==><3E><><EFBFBD><EFBFBD>1<EFBFBD>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>");
}
4 years ago
if (PlcMsg.Find("$(KQ5E)#") != -1)//<2F>ξ<EFBFBD>δ<EFBFBD><CEB4>λ
{
gTrackWorkFlow1.m_bJigOK = false;
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ξ<EFBFBD>δ<EFBFBD><EFBFBD>λ!";
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5E)#] ==><3E><><EFBFBD><EFBFBD>1<EFBFBD>ξ<EFBFBD>δ<EFBFBD><CEB4>λ");
}
4 years ago
if (PlcMsg.Find("$(KQ7D1)#") != -1)//<2F>ξߵ<CEBE>λ
{
gTrackWorkFlow1.m_bJigOK = true;
4 years ago
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);
}
}
4 years ago
if (PlcMsg.Find("$(KQ6D1)#") != -1)//<2F>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
{
gTrackWorkFlow2.m_bPushJigOut = true;
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
4 years ago
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6D1)#] ==><3E><><EFBFBD><EFBFBD>2<EFBFBD>Ƴ<EFBFBD><C6B3>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>");
}
4 years ago
if (PlcMsg.Find("$(KQ6E)#") != -1)//<2F>ξ<EFBFBD>δ<EFBFBD><CEB4>λ
{
gTrackWorkFlow2.m_bJigOK = false;
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ξ<EFBFBD>δ<EFBFBD><EFBFBD>λ!";
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6E)#] ==><3E><><EFBFBD><EFBFBD>2<EFBFBD>ξ<EFBFBD>δ<EFBFBD><CEB4>λ");
}
4 years ago
if (PlcMsg.Find("$(KQ8D1)#") != -1)//<2F>ξߵ<CEBE>λ
{
gTrackWorkFlow2.m_bJigOK = true;
4 years ago
logstrT = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>ξߵ<EFBFBD>λ!";
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ8D1)#]==><3E><><EFBFBD><EFBFBD>2<EFBFBD>ξߵ<CEBE>λ");
}
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQG)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else
{
msg += "I";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQF)# ==> <20><><EFBFBD><EFBFBD>1 <20>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>";
}
else
{
msg += "H";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQ9)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else
{
msg += "B";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQA)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else
{
msg += "C";
4 years ago
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";
4 years ago
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";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQ3)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>";
}
else
{
msg += "4";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQJ)# ==><3E><><EFBFBD><EFBFBD>1 <20>Ƴ<EFBFBD><C6B3>ξ<EFBFBD>";
}
else
{
msg += "K";
4 years ago
log = "SendPlcMsg: $(KQK)# ==><3E><><EFBFBD><EFBFBD>2 <20>Ƴ<EFBFBD><C6B3>ξ<EFBFBD>";
}
gLogMgr->WritePlcTimeLog(log);
}
if (PlcCmd == _ETrack_PlcCmd_Check_Jig_In)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>
{
if (m_TrackType == _ETrackType_Track_1)
{
msg += "L";
4 years ago
log = "SendPlcMsg: $(KQL)# ==><3E><><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>";
}
else
{
msg += "M";
4 years ago
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";
4 years ago
log = "SendPlcMsg: $(KQD)# ==><3E><><EFBFBD><EFBFBD>1 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else
{
msg += "E";
4 years ago
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";
4 years ago
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";
4 years ago
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(100);
}
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>
4 years ago
//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()
{
4 years ago
/*if (gLogMgr->IsDebuging())
{
return true;
4 years ago
}*/
ETrackPlcCmd PlcCmd;
PlcCmd = _ETrack_PlcCmd_Push_Jig_Out;
m_bPushJigOut = false;
SendMsgToPlc(PlcCmd, false);
/*//ǿ<>Ƶȴ<C6B5>10<31><30><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
Sleep(10000);
*/
int MaxCheckTimes = 150;
int cnt = 0;
while ((!m_bPushJigOut) && (cnt < MaxCheckTimes));
{
Sleep(200);
cnt++;
}
if (cnt == MaxCheckTimes)
{
gTrackWorkFlow1.RadAlamOnOff(true);
AfxMessageBox("<EFBFBD>Ƴ<EFBFBD><EFBFBD>ξ߳<EFBFBD>ʱ!");
gTrackWorkFlow1.RadAlamOnOff(false);
return false;
}
return true;
}
bool CTrackWorkFlow::IsJigOK()
{
if (gLogMgr->IsDebuging())
{
return true;
}
if (!gCommonFlowMgr->m_bCheckJig)
{
return true;
}
//return true;
ETrackPlcCmd PlcCmd;
PlcCmd = _ETrack_PlcCmd_Check_Jig_In;
m_bJigOK = false;
SendMsgToPlc(PlcCmd, false);
int cnt = 0;
while (cnt < 20 && (!m_bJigOK))
{
Sleep(100);
cnt++;
}
if (cnt == 20)
{
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();
}
bool CTrackWorkFlow::IsTrackIdle()
{
return (m_CurWorkStep != _ETrack_Step_Catch_mark)&&(m_CurWorkStep != _ETrack_Step_Marking);
}
void CTrackWorkFlow::KillCurWorkThread()
{
if (m_pthread)
{
TerminateThread(m_pthread->m_hThread, 0);
}
}
//<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()
{
4 years ago
if (!gObjComponentMgr->GetTwoMarkPt(Dbxy(), Dbxy()))//<2F><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB>
{
CMsgBox MsgBox;
MsgBox.Show("û<EFBFBD>мӹ<EFBFBD>ͼ<EFBFBD><EFBFBD>!");
4 years ago
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;
}
SetCurTrackWorkStep(_ETrack_Step_Catch_mark);
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();
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);
}
void CTrackWorkFlow::CatchMarkNewly()
{
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);
gObjComponentMgr->GetTwoMarkPt(Product.o_TheoryMarkPt1, Product.o_TheoryMarkPt2);
gObjComponentMgr->GetMark3Pt(Product.o_TheoryMarkPt3);
//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(0,0);
//Product.SetBasePt(BasePt);
//<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;
}
Product.SetBasePt(BasePt);
/* //<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 JigOft = gCommonFlowMgr->GetNPOffset();
Product2.SetBasePt(JigOft + BasePt);
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><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())
{
int cnt = 0;
while (!gExitApp)
{
Sleep(500);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
if ((OtherTrackWorkStep != _ETrack_Step_Unload)||cnt>10)
{
break;
}
cnt++;
}
}
4 years ago
auto FunctionUnload = [&]()
{
4 years ago
//֪ͨ<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)
{
4 years ago
Log = m_TrackName + " [<5B><><EFBFBD>ϻ<EFBFBD>] <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD>λ <20><>ʱ!";
gLogMgr->WriteDebugLog(Log);
gTrackWorkFlow1.RadAlamOnOff(true);
4 years ago
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;
}
4 years ago
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>Ʒ
4 years ago
};
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