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.

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