|
|
|
@ -54,6 +54,7 @@ UINT ReadPlcMsgThread(LPVOID pParam)
|
|
|
|
|
//执行一个步骤的线程(执行一次)
|
|
|
|
|
UINT ExecuteStepThread(LPVOID pParam)
|
|
|
|
|
{
|
|
|
|
|
AfxSocketInit();
|
|
|
|
|
CTrackWorkFlow *WorkFlow = (CTrackWorkFlow *)pParam;
|
|
|
|
|
WorkFlow->ExecuteCurStep();
|
|
|
|
|
return 0;
|
|
|
|
@ -120,9 +121,17 @@ void CTrackWorkFlow::WorkFlowCtrl()
|
|
|
|
|
{
|
|
|
|
|
if (gExitApp)
|
|
|
|
|
return;
|
|
|
|
|
Sleep(100);
|
|
|
|
|
Sleep(200);
|
|
|
|
|
if (m_CurWorkStep == m_OldWorkStep)//无变化
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
/*//进入下料函数,设置 步骤为_ETrack_Step_Unload时,不执行
|
|
|
|
|
if (m_OldWorkStep == _ETrack_Step_Throw_Edge_End&&m_CurWorkStep == _ETrack_Step_Unload)
|
|
|
|
|
{
|
|
|
|
|
m_OldWorkStep = m_CurWorkStep;//记录当前步骤
|
|
|
|
|
continue;
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
if (m_OldWorkStep == _ETrack_Step_Unload)//unload 结束步骤时
|
|
|
|
|
{
|
|
|
|
|
//取消下料请求
|
|
|
|
@ -131,7 +140,12 @@ void CTrackWorkFlow::WorkFlowCtrl()
|
|
|
|
|
}
|
|
|
|
|
m_OldWorkStep = m_CurWorkStep;//记录当前步骤
|
|
|
|
|
//在新线程中执行
|
|
|
|
|
AfxBeginThread(ExecuteStepThread, this);
|
|
|
|
|
if (m_CurWorkStep== _ETrack_Step_Throw_Edge_End)
|
|
|
|
|
m_pthread = AfxBeginThread(ExecuteStepThread, this); //m_pthread只记录下料
|
|
|
|
|
else
|
|
|
|
|
AfxBeginThread(ExecuteStepThread, this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//执行当前步骤
|
|
|
|
@ -145,7 +159,7 @@ void CTrackWorkFlow::ExecuteCurStep()
|
|
|
|
|
MoveToWaitPos();//移动到等待位置
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Mark_Waiting://等待加工
|
|
|
|
|
CatchMark();//抓取定位
|
|
|
|
|
CatchMarkNewly();//抓取定位
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Catch_mark_End://等待加工
|
|
|
|
|
MarkProcess();//尝试启动加工
|
|
|
|
@ -160,6 +174,20 @@ void CTrackWorkFlow::ExecuteCurStep()
|
|
|
|
|
Load();//上料
|
|
|
|
|
break;
|
|
|
|
|
case _ETrack_Step_Load_Err://下料错误
|
|
|
|
|
{
|
|
|
|
|
auto fErr = [&] {
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox("下料错误,请检查治具!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
};
|
|
|
|
|
thread t1(fErr);
|
|
|
|
|
t1.detach();
|
|
|
|
|
//解除锁定
|
|
|
|
|
if (m_TrackType == gCurLockTrackType)
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
//退出自动状态
|
|
|
|
|
StopAutoWork();
|
|
|
|
|
}
|
|
|
|
|
case _ETrack_Step_Catch_mark_Err://抓取定位错误
|
|
|
|
|
case _ETrack_Step_Mark_Err://切割过程错误
|
|
|
|
|
case _ETrack_Step_Unload_Err://下料错误
|
|
|
|
@ -260,6 +288,11 @@ void CTrackWorkFlow::StopAutoWork()
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
//取消下料请求
|
|
|
|
|
CancelUnloadRequest();
|
|
|
|
|
if ((!gTrackWorkFlow1.m_bAutoWorking)&&(!gTrackWorkFlow2.m_bAutoWorking))
|
|
|
|
|
{
|
|
|
|
|
SendMsgToPlc(_ETrack_PlcCmd_Auto_End, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
@ -325,9 +358,9 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
|
|
|
|
|
if (buf[k] == '#')
|
|
|
|
|
{
|
|
|
|
|
IdxEnd = k;
|
|
|
|
|
CString s;
|
|
|
|
|
/*CString s;
|
|
|
|
|
s.Format(_T("Idx # = %d"), IdxEnd);
|
|
|
|
|
gLogMgr->WriteDebugLog(s);
|
|
|
|
|
gLogMgr->WriteDebugLog(s);*/
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -338,7 +371,7 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
|
|
|
|
|
buf[IdxEnd + 1] = '\0';
|
|
|
|
|
|
|
|
|
|
CString PlcMsg(buf);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->" + PlcMsg);
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg==>" + PlcMsg);
|
|
|
|
|
|
|
|
|
|
int IdxK = -1;//第一个K 的位置
|
|
|
|
|
for (int k = 0; k < IdxEnd; k++)
|
|
|
|
@ -351,63 +384,138 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
|
|
|
|
|
}
|
|
|
|
|
if (IdxK < 0)
|
|
|
|
|
return;
|
|
|
|
|
CString logstrH = "ReadPlcMsg:" + PlcMsg + " ==>";
|
|
|
|
|
CString logstrT = "未解析的指令!";
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3D1)#") != -1 || PlcMsg.Find("$(KQ4D1)#") != -1)//下料完成
|
|
|
|
|
/*
|
|
|
|
|
if (PlcMsg.Find("$(KQ3D1)#") != -1 || PlcMsg.Find("$(KQ4D1)#") != -1)//下料完成
|
|
|
|
|
{
|
|
|
|
|
logstrT = "轨道下料完成!";
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Unload)//只有下料状态才响应下料完成信号
|
|
|
|
|
{
|
|
|
|
|
if (m_bCircleStop)//当前循环停止
|
|
|
|
|
{
|
|
|
|
|
m_bCircleStop = false;//只停止一次
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//自动恢复check 状态
|
|
|
|
|
CString Log = m_TrackName + " 停止自动运行!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
StopAutoWork();//停止自动运行
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3E)#") != -1 || PlcMsg.Find("$(KQ4E)#") != -1)//下料错误
|
|
|
|
|
{
|
|
|
|
|
logstrT = "轨道下料错误!";
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg==>_ETrack_Step_Unload_Err");
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
///-------------------------轨道1-------------------------------------///
|
|
|
|
|
if (gTrackWorkFlow1.m_CurWorkStep == _ETrack_Step_Unload)//只有下料状态才响应下料完成信号
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->_ETrack_Step_Unload_End");
|
|
|
|
|
if (m_CurWorkStep == _ETrack_Step_Unload)//只有下料状态才响应下料完成信号
|
|
|
|
|
if (PlcMsg.Find("$(KQ3D1)#") != -1)//下料完成
|
|
|
|
|
{
|
|
|
|
|
if (m_bCircleStop)//当前循环停止
|
|
|
|
|
logstrT = "轨道1下料完成!";
|
|
|
|
|
if (gTrackWorkFlow1.m_bCircleStop)//当前循环停止
|
|
|
|
|
{
|
|
|
|
|
m_bCircleStop = false;//只停止一次
|
|
|
|
|
gTrackWorkFlow1.m_bCircleStop = false;//只停止一次
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//自动恢复check 状态
|
|
|
|
|
CString Log = m_TrackName + " Circle Stop";
|
|
|
|
|
CString Log = "轨道1 停止自动运行!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
StopAutoWork();//停止自动运行
|
|
|
|
|
gTrackWorkFlow1.StopAutoWork();//停止自动运行
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ3E)#") != -1)//下料错误
|
|
|
|
|
{
|
|
|
|
|
logstrT = "轨道1下料错误!";
|
|
|
|
|
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcMsg.Find("$(KQ3E)#") != -1 || PlcMsg.Find("$(KQ4E)#") != -1)//下料错误
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg--->_ETrack_Step_Unload_Err");
|
|
|
|
|
}
|
|
|
|
|
///------------------------轨道1-------------------------------------
|
|
|
|
|
if (PlcMsg.Find("$(KQ5D1)#") != -1)//治具未到位
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ5D1)#") != -1)//推出治具完成
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bPushJigOut = true;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5D1)#] --->轨道1推出治具完成");
|
|
|
|
|
logstrT = "轨道1推出治具完成!";
|
|
|
|
|
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5D1)#] ==>轨道1推出治具完成");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ5E)#") != -1)//治具未到位
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bJigOK = false;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5E)#] --->轨道1治具未到位");
|
|
|
|
|
logstrT = "轨道1治具未到位!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5E)#] ==>轨道1治具未到位");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ7D1)#") != -1)//治具到位
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.m_bJigOK = true;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ7D1)#]--->轨道1治具到位");
|
|
|
|
|
logstrT = "轨道1治具到位!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ7D1)#]==>轨道1治具到位");
|
|
|
|
|
}
|
|
|
|
|
///------------------------轨道2-------------------------------------
|
|
|
|
|
if (PlcMsg.Find("$(KQ6D1)#") != -1)//治具未到位
|
|
|
|
|
|
|
|
|
|
///------------------------轨道2-------------------------------------///
|
|
|
|
|
if (gTrackWorkFlow2.m_CurWorkStep == _ETrack_Step_Unload)//只有下料状态才响应下料完成信号
|
|
|
|
|
{
|
|
|
|
|
if (PlcMsg.Find("$(KQ4D1)#") != -1)//下料完成
|
|
|
|
|
{
|
|
|
|
|
logstrT = "轨道2下料完成!";
|
|
|
|
|
if (gTrackWorkFlow2.m_bCircleStop)//当前循环停止
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bCircleStop = false;//只停止一次
|
|
|
|
|
GetFrame()->m_DlgSW_XL_Flow.ResetCircleStopCheck(m_TrackType);//自动恢复check 状态
|
|
|
|
|
CString Log = "轨道2 停止自动运行!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow2.StopAutoWork();//停止自动运行
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ4E)#") != -1)//下料错误
|
|
|
|
|
{
|
|
|
|
|
logstrT = "轨道2下料错误!";
|
|
|
|
|
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ6D1)#") != -1)//推出治具完成
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bPushJigOut = true;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6D1)#] --->轨道2推出治具完成");
|
|
|
|
|
logstrT = "轨道2推出治具完成!";
|
|
|
|
|
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6D1)#] ==>轨道2推出治具完成");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ6E)#") != -1)//治具未到位
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bJigOK = false;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6E)#] --->轨道2治具未到位");
|
|
|
|
|
logstrT = "轨道2治具未到位!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6E)#] ==>轨道2治具未到位");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcMsg.Find("$(KQ8D1)#") != -1)//治具到位
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow2.m_bJigOK = true;
|
|
|
|
|
gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ8D1)#]--->轨道2治具到位");
|
|
|
|
|
logstrT = "轨道2治具到位!";
|
|
|
|
|
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ8D1)#]==>轨道2治具到位");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gLogMgr->WriteDebugLog(logstrH + logstrT);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
@ -422,12 +530,12 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "G";
|
|
|
|
|
log = "SendPlcMsg: Track_1 打开载盘";
|
|
|
|
|
log = "SendPlcMsg: $(KQG)# ==>轨道1 打开载盘";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "I";
|
|
|
|
|
log = "SendPlcMsg: Track_2 打开载盘";
|
|
|
|
|
log = "SendPlcMsg: $(KQI)# ==>轨道2 打开载盘";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Close_Product)//夹紧载盘
|
|
|
|
@ -435,12 +543,12 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "F";
|
|
|
|
|
log = "SendPlcMsg: Track_1 夹紧载盘";
|
|
|
|
|
log = "SendPlcMsg: $(KQF)# ==> 轨道1 夹紧载盘";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "H";
|
|
|
|
|
log = "SendPlcMsg: Track_2 夹紧载盘";
|
|
|
|
|
log = "SendPlcMsg: $(KQH)# ==>轨道2 夹紧载盘";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Vac_Sorb_On)//真空吸附开
|
|
|
|
@ -448,12 +556,12 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "9";
|
|
|
|
|
log = "SendPlcMsg: Track_1 真空吸附开";
|
|
|
|
|
log = "SendPlcMsg: $(KQ9)# ==>轨道1 真空吸附开";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "B";
|
|
|
|
|
log = "SendPlcMsg: Track_2 真空吸附开";
|
|
|
|
|
log = "SendPlcMsg: $(KQB)# ==>轨道2 真空吸附开";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Vac_Sorb_Off)//真空吸附关
|
|
|
|
@ -461,35 +569,35 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "A";
|
|
|
|
|
log = "SendPlcMsg: Track_1 真空吸附关";
|
|
|
|
|
log = "SendPlcMsg: $(KQA)# ==>轨道1 真空吸附关";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "C";
|
|
|
|
|
log = "SendPlcMsg: Track_2 真空吸附关";
|
|
|
|
|
log = "SendPlcMsg: $(KQC)# ==>轨道2 真空吸附关";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_Start)//自动开始(绿灯)
|
|
|
|
|
{
|
|
|
|
|
msg += "5";
|
|
|
|
|
log = "SendPlcMsg: 自动开始";
|
|
|
|
|
log = "SendPlcMsg: $(KQ5)# ==>自动开始";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Auto_End)//自动结束(黄灯)
|
|
|
|
|
{
|
|
|
|
|
msg += "6";
|
|
|
|
|
log = "SendPlcMsg: 自动结束";
|
|
|
|
|
log = "SendPlcMsg: $(KQ6)# ==> 自动结束";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Unload)//下料
|
|
|
|
|
{
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "3";
|
|
|
|
|
log = "SendPlcMsg: Track_1 下料";
|
|
|
|
|
log = "SendPlcMsg: $(KQ3)# ==>轨道1 下料";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "4";
|
|
|
|
|
log = "SendPlcMsg: Track_2 下料";
|
|
|
|
|
log = "SendPlcMsg: $(KQ4)# ==>轨道1 下料";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Push_Jig_Out)//推治具
|
|
|
|
@ -497,13 +605,14 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "J";
|
|
|
|
|
log = "SendPlcMsg: Track_1 推出治具";
|
|
|
|
|
log = "SendPlcMsg: $(KQJ)# ==>轨道1 推出治具";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "K";
|
|
|
|
|
log = "SendPlcMsg: Track_2 推出治具";
|
|
|
|
|
log = "SendPlcMsg: $(KQK)# ==>轨道2 推出治具";
|
|
|
|
|
}
|
|
|
|
|
gLogMgr->WritePlcTimeLog(log);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Check_Jig_In)//检测轨道治具
|
|
|
|
@ -511,12 +620,12 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "L";
|
|
|
|
|
log = "SendPlcMsg: Track_1 检测治具";
|
|
|
|
|
log = "SendPlcMsg: $(KQL)# ==>轨道1 检测治具";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "M";
|
|
|
|
|
log = "SendPlcMsg: Track_2 检测治具";
|
|
|
|
|
log = "SendPlcMsg: $(KQM)# ==>轨道2 检测治具";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -525,25 +634,26 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_1)
|
|
|
|
|
{
|
|
|
|
|
msg += "D";
|
|
|
|
|
log = "SendPlcMsg: Track_1 取消请求下料";
|
|
|
|
|
log = "SendPlcMsg: $(KQD)# ==>轨道1 取消请求下料";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg += "E";
|
|
|
|
|
log = "SendPlcMsg: Track_2 取消请求下料";
|
|
|
|
|
log = "SendPlcMsg: $(KQE)# ==>轨道2 取消请求下料";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Red_Alam_On)//红灯蜂鸣器开
|
|
|
|
|
{
|
|
|
|
|
msg += "1";
|
|
|
|
|
log = "SendPlcMsg: 红灯蜂鸣器开";
|
|
|
|
|
log = "SendPlcMsg: $(KQ1)# ==>红灯蜂鸣器开";
|
|
|
|
|
}
|
|
|
|
|
if (PlcCmd == _ETrack_PlcCmd_Red_Alam_Off)//红灯蜂鸣器开
|
|
|
|
|
{
|
|
|
|
|
msg += "2";
|
|
|
|
|
log = "SendPlcMsg: 红灯蜂鸣器关";
|
|
|
|
|
log = "SendPlcMsg: $(KQ2)# ==>红灯蜂鸣器关";
|
|
|
|
|
}
|
|
|
|
|
gLogMgr->WriteDebugLog(log);
|
|
|
|
|
|
|
|
|
|
msg += ")#\r\n";
|
|
|
|
|
return msg;
|
|
|
|
|
}
|
|
|
|
@ -554,15 +664,17 @@ bool CTrackWorkFlow::SendMsgToPlc(ETrackPlcCmd PlcCmd, bool bStopReadMsg)
|
|
|
|
|
if (bStopReadMsg)
|
|
|
|
|
{
|
|
|
|
|
m_bStopReadMsg = true;//暂停读取
|
|
|
|
|
Sleep(300);
|
|
|
|
|
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);//发送
|
|
|
|
|
gLogMgr->WriteDebugLog("SendMsgToPlc--->" + Msg);
|
|
|
|
|
|
|
|
|
|
//gLogMgr->WriteDebugLog("SendMsgToPlc==>" + Msg);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -604,21 +716,28 @@ void CTrackWorkFlow::VacSorbOnOff(bool bOn)
|
|
|
|
|
}
|
|
|
|
|
bool CTrackWorkFlow::PushJigOut()
|
|
|
|
|
{
|
|
|
|
|
if (gLogMgr->IsDebuging())
|
|
|
|
|
/*if (gLogMgr->IsDebuging())
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
ETrackPlcCmd PlcCmd;
|
|
|
|
|
PlcCmd = _ETrack_PlcCmd_Push_Jig_Out;
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
m_bPushJigOut = false;
|
|
|
|
|
SendMsgToPlc(PlcCmd, false);
|
|
|
|
|
|
|
|
|
|
/*//强制等待10秒再检测是否推出完成
|
|
|
|
|
Sleep(10000);
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
int MaxCheckTimes = 150;
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
while (cnt < 200 && (!m_bPushJigOut))
|
|
|
|
|
while ((!m_bPushJigOut) && (cnt < MaxCheckTimes));
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
Sleep(200);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 200)
|
|
|
|
|
|
|
|
|
|
if (cnt == MaxCheckTimes)
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox("推出治具超时!");
|
|
|
|
@ -627,24 +746,34 @@ bool CTrackWorkFlow::PushJigOut()
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CTrackWorkFlow::IsJigOK()
|
|
|
|
|
{
|
|
|
|
|
#ifdef CUSTOM_TXD_2_XL
|
|
|
|
|
return true;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
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 < 10 && (!m_bJigOK))
|
|
|
|
|
while (cnt < 20 && (!m_bJigOK))
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
Sleep(100);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 10)
|
|
|
|
|
if (cnt == 20)
|
|
|
|
|
{
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox(m_TrackName + " 治具未到位!");
|
|
|
|
@ -731,6 +860,17 @@ void CTrackWorkFlow::MoveToPos(ETrackWorkStep WorkStep)
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//上料
|
|
|
|
|
void CTrackWorkFlow::Load()
|
|
|
|
|
{
|
|
|
|
@ -835,27 +975,28 @@ void CTrackWorkFlow::ChangePlatXYGroupIdx()
|
|
|
|
|
|
|
|
|
|
void CTrackWorkFlow::CatchMark()
|
|
|
|
|
{
|
|
|
|
|
/*if (!gObjComponentMgr->GetTwoMarkPt(Dbxy(), Dbxy()))//获取定位点
|
|
|
|
|
if (!gObjComponentMgr->GetTwoMarkPt(Dbxy(), Dbxy()))//获取定位点
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("没有加工图形!");
|
|
|
|
|
return ;
|
|
|
|
|
}*/
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//只有无锁定状态才能CatchMark
|
|
|
|
|
if (gCurLockTrackType != _ETrackType_NULL)
|
|
|
|
|
{
|
|
|
|
|
m_OldWorkStep = _ETrack_Step_NULL;//强制改变之前的状态
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gCurLockTrackType = m_TrackType;//锁定当前轨道
|
|
|
|
|
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark);
|
|
|
|
|
gCurLockTrackType = m_TrackType;//锁定当前轨道
|
|
|
|
|
//收集未移动前的数据
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
@ -1004,6 +1145,188 @@ void CTrackWorkFlow::CatchMark()
|
|
|
|
|
//恢复报警状态
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CTrackWorkFlow::CatchMarkNewly()
|
|
|
|
|
{
|
|
|
|
|
if (!gObjComponentMgr->GetTwoMarkPt(Dbxy(), Dbxy()))//获取定位点
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("没有加工图形!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//只有无锁定状态才能CatchMark
|
|
|
|
|
if (gCurLockTrackType != _ETrackType_NULL)
|
|
|
|
|
{
|
|
|
|
|
m_OldWorkStep = _ETrack_Step_NULL;//强制改变之前的状态
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
gCurLockTrackType = m_TrackType;//锁定当前轨道
|
|
|
|
|
|
|
|
|
|
//收集未移动前的数据
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
//真空吸附
|
|
|
|
|
ProductCarrierOpenClose(false);
|
|
|
|
|
VacSorbOnOff(true);
|
|
|
|
|
|
|
|
|
|
bool Ret = true;
|
|
|
|
|
Ret = IsJigOK();
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldMarking() == false)//屏蔽加工过程
|
|
|
|
|
{
|
|
|
|
|
//切换平台XY 组编号
|
|
|
|
|
ChangePlatXYGroupIdx();
|
|
|
|
|
CProduct &Product = gProductMgr->GetProduct(m_ProductIdx);
|
|
|
|
|
|
|
|
|
|
gObjComponentMgr->GetTwoMarkPt(Product.o_TheoryMarkPt1, Product.o_TheoryMarkPt2);
|
|
|
|
|
gObjComponentMgr->GetMark3Pt(Product.o_TheoryMarkPt3);
|
|
|
|
|
|
|
|
|
|
//start----------料片2复制料片1信息------------start
|
|
|
|
|
CProduct Product2 = Product;
|
|
|
|
|
Product2.SetbNewAddProduct(true);
|
|
|
|
|
//end----------料片2复制料片1信息并偏移----------------end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///--------------------抓取治具1上料片的定位点--------------------///
|
|
|
|
|
//将数据移动到当前product 的基准点上
|
|
|
|
|
Dbxy BasePt(0,0);
|
|
|
|
|
//Product.SetBasePt(BasePt);
|
|
|
|
|
//轨道2 要偏移基准点
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
{
|
|
|
|
|
Dbxy Track2Offset = gProgram_SZ_XL->GetTrack2Offset();
|
|
|
|
|
BasePt.x = Track2Offset.x;
|
|
|
|
|
BasePt.y = Track2Offset.y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Product.SetBasePt(BasePt);
|
|
|
|
|
/* //移动obj
|
|
|
|
|
gProgramCutMgr->MoveObjData(BasePt);
|
|
|
|
|
//移动area
|
|
|
|
|
//计算所有obj 的中心点
|
|
|
|
|
gObjComponentMgr->CalAllObjCenterPt();
|
|
|
|
|
Dbxy AllObjCenterPt = gObjComponentMgr->GetAllObjCenterPt();
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(AllObjCenterPt);*/
|
|
|
|
|
|
|
|
|
|
Product.ResetRealMarkPt();
|
|
|
|
|
//识别定位点1
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product);//只抓取一个点
|
|
|
|
|
}
|
|
|
|
|
if (!Product.IsSetRealMarkPt1())
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
//识别定位点3
|
|
|
|
|
Dbxy MarkPt3;
|
|
|
|
|
if (Ret&&gObjComponentMgr->GetMark3Pt(MarkPt3))
|
|
|
|
|
{
|
|
|
|
|
Ret = gCommonFlowMgr->CameraCatchMark3(Product);
|
|
|
|
|
}
|
|
|
|
|
//识别定位点2
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product);//只抓取一个点
|
|
|
|
|
}
|
|
|
|
|
if (!Product.IsMarkReady())//mark 识别错误
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///Start--------------------抓取治具2上料片的定位点--------------------///
|
|
|
|
|
|
|
|
|
|
Dbxy JigOft = gCommonFlowMgr->GetNPOffset();
|
|
|
|
|
Product2.SetBasePt(JigOft + BasePt);
|
|
|
|
|
|
|
|
|
|
Dbxy Product2MarkPt3;
|
|
|
|
|
|
|
|
|
|
if (gClientMgr->IsbDisableServer())//屏蔽副机,则不抓取
|
|
|
|
|
goto CatchProduct2Finished;
|
|
|
|
|
|
|
|
|
|
Product2.ResetRealMarkPt();
|
|
|
|
|
//识别定位点1
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product2);//只抓取一个点
|
|
|
|
|
if (!Product2.IsSetRealMarkPt1())
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//识别定位点3
|
|
|
|
|
if (gObjComponentMgr->GetMark3Pt(Product2MarkPt3) && Ret)
|
|
|
|
|
{
|
|
|
|
|
Ret = gCommonFlowMgr->CameraCatchMark3(Product2);
|
|
|
|
|
}
|
|
|
|
|
//识别定位点2
|
|
|
|
|
if (Ret)
|
|
|
|
|
{
|
|
|
|
|
gCommonFlowMgr->CameraCatchTwoMark(Product2);//只抓取一个点
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!Product2.IsMarkReady())//mark 识别错误
|
|
|
|
|
{
|
|
|
|
|
Ret = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gClientMgr->SendCmd_ProductInfo(Product2);
|
|
|
|
|
}
|
|
|
|
|
///End--------------------抓取治具2上料片的定位点--------------------End///
|
|
|
|
|
|
|
|
|
|
CatchProduct2Finished:
|
|
|
|
|
|
|
|
|
|
//抓取失败时/非自动状态时
|
|
|
|
|
if (Ret == false || m_bAutoWorking == false)
|
|
|
|
|
{
|
|
|
|
|
VacSorbOnOff(false);//真空放开
|
|
|
|
|
//解除锁定
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)
|
|
|
|
|
{
|
|
|
|
|
if (Ret == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark_Err);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//数据移动回默认的位置(防止area 移位)
|
|
|
|
|
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
//解除锁定
|
|
|
|
|
if (m_TrackType == gCurLockTrackType)
|
|
|
|
|
{
|
|
|
|
|
gCurLockTrackType = _ETrackType_NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (m_CurWorkStep != _ETrack_Step_Catch_mark_End)//异常停止时
|
|
|
|
|
{
|
|
|
|
|
//数据移动回默认的位置(防止area 移位)
|
|
|
|
|
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
|
|
|
|
|
}
|
|
|
|
|
//恢复报警状态
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//加工过程
|
|
|
|
|
void CTrackWorkFlow::MarkProcess()
|
|
|
|
|
{
|
|
|
|
@ -1022,6 +1345,8 @@ void CTrackWorkFlow::MarkProcess()
|
|
|
|
|
}
|
|
|
|
|
gCurLockTrackType = m_TrackType;//锁定
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CString Log = m_TrackName + " MarkProcess";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
@ -1050,8 +1375,6 @@ void CTrackWorkFlow::MarkProcess()
|
|
|
|
|
//XY 组切换
|
|
|
|
|
MarkProcessExt();
|
|
|
|
|
#endif
|
|
|
|
|
//设置当前的工作步骤
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Marking);
|
|
|
|
|
//数据移动回默认的位置
|
|
|
|
|
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
|
|
|
|
|
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
|
|
|
|
@ -1212,8 +1535,7 @@ void CTrackWorkFlow::UnLoad()
|
|
|
|
|
{
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//自动模式
|
|
|
|
|
{
|
|
|
|
|
//通知下料机到下料 接载具位
|
|
|
|
|
m_bPushJigReady = false;
|
|
|
|
|
//通知下料机下料
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Unload, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
@ -1221,42 +1543,35 @@ void CTrackWorkFlow::UnLoad()
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//等待下料机到可推出载具位
|
|
|
|
|
//等待拉走载具
|
|
|
|
|
CString str = "轨道1";
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
str = "轨道2";
|
|
|
|
|
CString logstr;
|
|
|
|
|
logstr.Format("等待[下料机] 运动至[%s]下载具位.", str);
|
|
|
|
|
logstr.Format("等待[%s]拉走载具.", str);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_bPullJigOut = false;
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
while ((!m_bPushJigReady) && cnt < 400)
|
|
|
|
|
while (!m_bPullJigOut&&cnt < 400)
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 400)
|
|
|
|
|
{
|
|
|
|
|
Log = m_TrackName + " [下料机] 运动至下载具位 超时!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox(m_TrackName + " [下料机] 运动至下载具位超时!请手动下料!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
Log = m_TrackName + " 拉出治具 超时!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
AfxMessageBox("拉出治具超时!请手动下料!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!PushJigOut())//推出治具
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Sleep(30000);
|
|
|
|
|
|
|
|
|
|
Sleep(3000);
|
|
|
|
|
//平台移动到 送回空治具的位置
|
|
|
|
|
MoveToPos(_ETrack_Step_WaitBack);
|
|
|
|
|
gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到可回治具位
|
|
|
|
|
gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到位
|
|
|
|
|
m_bLoadProduct = false;//轨道上是否load 了产品
|
|
|
|
|
}
|
|
|
|
|
else//手动模式直接跳过下料步骤
|
|
|
|
@ -1272,7 +1587,6 @@ void CTrackWorkFlow::UnLoad()
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//通知下料机下料
|
|
|
|
|
m_bPushJigReady = false;
|
|
|
|
|
if (gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_Unload, true) == false)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
@ -1280,45 +1594,172 @@ void CTrackWorkFlow::UnLoad()
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//等待下料机到可推出载具位
|
|
|
|
|
//等待拉走载具
|
|
|
|
|
CString str = "轨道1";
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
str = "轨道2";
|
|
|
|
|
CString logstr;
|
|
|
|
|
logstr.Format("等待[下料机] 运动至[%s]下载具位.", str);
|
|
|
|
|
logstr.Format("等待[%s]拉走载具.", str);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_bPullJigOut = false;
|
|
|
|
|
int cnt = 0;
|
|
|
|
|
while ((!m_bPushJigReady) && cnt < 400)
|
|
|
|
|
while (!m_bPullJigOut&&cnt < 400)
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
cnt++;
|
|
|
|
|
}
|
|
|
|
|
if (cnt == 400)
|
|
|
|
|
{
|
|
|
|
|
Log = m_TrackName + " [下料机] 运动至下载具位 超时!";
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
Log = m_TrackName + " 拉出治具 超时!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
AfxMessageBox("拉出治具超时!请手动下料!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Sleep(30000);
|
|
|
|
|
//平台移动到 送回空治具的位置
|
|
|
|
|
MoveToPos(_ETrack_Step_WaitBack);
|
|
|
|
|
gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到位
|
|
|
|
|
m_bLoadProduct = false;//轨道上是否load 了产品
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
//下料
|
|
|
|
|
void CTrackWorkFlow::UnLoad()
|
|
|
|
|
{
|
|
|
|
|
//设置当前步骤
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload);
|
|
|
|
|
//检查下料机的状态
|
|
|
|
|
if (gProgram_SZ_XL->IsbCheckUnloadState())
|
|
|
|
|
{
|
|
|
|
|
//如果另外一个轨道没有在下料,下料机在轨道上的时候判断为unload错误
|
|
|
|
|
if (gMotionCard_PCI1245->CheckUnloadState() == false)
|
|
|
|
|
{
|
|
|
|
|
//获取另外一个轴的状态
|
|
|
|
|
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
|
|
|
|
|
if (OtherTrackWorkStep != _ETrack_Step_Unload)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("下料机位置异常!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//平台移动到下料位置
|
|
|
|
|
MoveToPos(_ETrack_Step_Unload);
|
|
|
|
|
//自动打开载盘
|
|
|
|
|
ProductCarrierOpenClose(true);
|
|
|
|
|
|
|
|
|
|
//通知下料
|
|
|
|
|
CString Log = m_TrackName + " UnLoad";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
|
|
|
|
|
if (gProgram_SZ_XL->IsbShieldUnLoad())//屏蔽下料
|
|
|
|
|
{
|
|
|
|
|
if (m_bAutoWorking)//自动运行中
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
else
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Stop);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果另外一个轴在unload ,要等待其unload 完成
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())
|
|
|
|
|
{
|
|
|
|
|
//int cnt = 0;
|
|
|
|
|
while (!gExitApp)
|
|
|
|
|
{
|
|
|
|
|
Sleep(500);
|
|
|
|
|
//获取另外一个轴的状态
|
|
|
|
|
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
|
|
|
|
|
if ((OtherTrackWorkStep != _ETrack_Step_Unload))//||cnt>10)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//cnt++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto FunctionUnload = [&]()
|
|
|
|
|
{
|
|
|
|
|
//通知下料机到下料 接载具位
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
//等待下料机到可推出载具位
|
|
|
|
|
CString str = "轨道1";
|
|
|
|
|
if (m_TrackType == _ETrackType_Track_2)
|
|
|
|
|
str = "轨道2";
|
|
|
|
|
CString logstr;
|
|
|
|
|
logstr.Format("等待[下料机] 运动至[%s]下载具位.", str);
|
|
|
|
|
gLogMgr->WriteDebugLog(logstr);
|
|
|
|
|
|
|
|
|
|
while ((!m_bPushJigReady) )
|
|
|
|
|
{
|
|
|
|
|
Sleep(300);
|
|
|
|
|
}
|
|
|
|
|
/ *if (cnt == 400)
|
|
|
|
|
{
|
|
|
|
|
Log = m_TrackName + " [下料机] 运动至下载具位 超时!";
|
|
|
|
|
gLogMgr->WriteDebugLog(Log);
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(true);
|
|
|
|
|
AfxMessageBox(m_TrackName + "[下料机] 运动至下载具位超时!请手动下料!");
|
|
|
|
|
AfxMessageBox(m_TrackName + " [下料机] 运动至下载具位超时!请手动下料!");
|
|
|
|
|
gTrackWorkFlow1.RadAlamOnOff(false);
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}* /
|
|
|
|
|
|
|
|
|
|
if (!PushJigOut())//推出治具
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Sleep(3000);
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
//平台移动到 送回空治具的位置
|
|
|
|
|
MoveToPos(_ETrack_Step_WaitBack);
|
|
|
|
|
gProgram_SZ_XL->SendMsgToLoadDevice(m_TrackType, _ETrack_Step_WaitBack, true);//告诉下料机,我已到可回治具位
|
|
|
|
|
m_bLoadProduct = false;//轨道上是否load 了产品
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (m_bAutoWorking)//自动运行中
|
|
|
|
|
{
|
|
|
|
|
if (gProgram_SZ_XL->IsbAutoWorkMode())//自动模式
|
|
|
|
|
{
|
|
|
|
|
FunctionUnload();
|
|
|
|
|
}
|
|
|
|
|
else//手动模式直接跳过下料步骤
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (AfxMessageBox("确认手动下料?", MB_YESNO) != IDYES)
|
|
|
|
|
{
|
|
|
|
|
SetCurTrackWorkStep(_ETrack_Step_NULL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
FunctionUnload();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//移动Y 轴到安全区域
|
|
|
|
|
void CTrackWorkFlow::MoveMotorYToSafePos()
|
|
|
|
|
{
|
|
|
|
|