下料改为信利;数据越界检查;打开文件自动换模板

同兴达分出-改到信利(不推治具)
bestlqiang 4 years ago
parent 39bc7354e4
commit cdb2e76a2b

@ -18,11 +18,11 @@ public:
bool SwitchCamera(long CamIndex); //根据相机索引 0、1 切换相机。由相机控件所在对话框Timmer检测当前索引切换相机跨线程直接切换会崩溃。 bool SwitchCamera(long CamIndex); //根据相机索引 0、1 切换相机。由相机控件所在对话框Timmer检测当前索引切换相机跨线程直接切换会崩溃。
void OpenTemp(); void OpenTemp();
// unsigned char GetCurShapeModelID() { return m_CurShapeModelID; }; unsigned char GetCurShapeModelID() { return m_CurShapeModelID; };
// void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; }; void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; };
unsigned char GetCurShapeModelID() { return 0; }; //unsigned char GetCurShapeModelID() { return 0; };
void SetCurShapeModelID(int ID) { m_CurShapeModelID = 0; }; //void SetCurShapeModelID(int ID) { m_CurShapeModelID = 0; };
public: public:
CHawkvisctrlctrl1 *m_HawkvisCtrl;//霍克视觉的ocx 控件 CHawkvisctrlctrl1 *m_HawkvisCtrl;//霍克视觉的ocx 控件

@ -1064,6 +1064,7 @@ bool CCommonFlowMgr::NormalMarkByPciCard(bool bSel, int times, int CyclicTimes)
gLogMgr->WriteDebugLog("Fuc---->NormalMarkByPciCard : bSel = " + Bool2Str(bSel)); gLogMgr->WriteDebugLog("Fuc---->NormalMarkByPciCard : bSel = " + Bool2Str(bSel));
//临时Product //临时Product
CProduct Product; CProduct Product;
Product.m_bManualMark = true;
//创建一个临时的area //创建一个临时的area
CMarkArea MarkArea(Dbxy(0, 0), DbSize(100, 100)); CMarkArea MarkArea(Dbxy(0, 0), DbSize(100, 100));
//收集加工数据 //收集加工数据
@ -1140,7 +1141,18 @@ bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel)
MoveToFirstArea(Product.GetProductBasePt()); MoveToFirstArea(Product.GetProductBasePt());
//搜集加工数据(这里比较耗费时间) //搜集加工数据(这里比较耗费时间)
try
{
gMarkAreaMgr->CollectWorkData(bSel, Product); gMarkAreaMgr->CollectWorkData(bSel, Product);
}
catch (CExceptionMsg msg)
{
gTrackWorkFlow1.RadAlamOnOff(true);//报警提示
AfxMessageBox(msg.GetMsgStr());
gTrackWorkFlow1.RadAlamOnOff(false);//报警提示
return false;
}
if (!gMarkAreaMgr->HasWorkData()) if (!gMarkAreaMgr->HasWorkData())
return false; return false;
//是否需要自动回原点 //是否需要自动回原点

@ -113,14 +113,16 @@ BOOL DlgHawkvisCamera::OnInitDialog()
//观察平台坐标的变化 //观察平台坐标的变化
void DlgHawkvisCamera::UpdateInfo() void DlgHawkvisCamera::UpdateInfo()
{ {
/*//换文件时,自动换模板 //换文件时,自动换模板
if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID) if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID)
{ {
m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID(); m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID();
OnBnClickedLoadCatchTemp(); OnBnClickedLoadCatchTemp();
}*/ }
if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex()) if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex())
return; return;
if (gCameraHawkvis->GetCamIndex() == 0) if (gCameraHawkvis->GetCamIndex() == 0)
OnBnClickedToCam1(); OnBnClickedToCam1();
@ -254,8 +256,8 @@ void DlgHawkvisCamera::OnBnClickedHkZoomOut()
void DlgHawkvisCamera::OnBnClickedCreatCatchTemp() void DlgHawkvisCamera::OnBnClickedCreatCatchTemp()
{ {
//调用控件接口创建基于形状的模板输入参数为模板ID号。控件最多支持创建100个模板即模板号为099 //调用控件接口创建基于形状的模板输入参数为模板ID号。控件最多支持创建100个模板即模板号为099
m_HawkvisCtrl.CreateShapeModel(0); //m_HawkvisCtrl.CreateShapeModel(0);
//m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID()); m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID());
} }
void DlgHawkvisCamera::OnBnClickedTestCatchTemp() void DlgHawkvisCamera::OnBnClickedTestCatchTemp()
{ {

Binary file not shown.

@ -507,35 +507,23 @@ void CProduct::TheoryDataToRealData(vector<Dbxy> &vec, Dbxy &AreaCenter, Dbxy Cu
{ {
vector<Dbxy>::iterator iter = vec.begin(); vector<Dbxy>::iterator iter = vec.begin();
vector<Dbxy>::iterator iter_end = vec.end(); vector<Dbxy>::iterator iter_end = vec.end();
Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt();
for (;iter != iter_end;iter++) for (;iter != iter_end;iter++)
{ {
//(*iter) = (*iter) - DataCenter; //移动至以(0,0)点为原点
/* //抓取偏移(整图)
auto x = (*iter).x+m_CatchMark1Oft.x;
auto y = (*iter).y + m_CatchMark1Oft.y;*/
auto x = (*iter).x; auto x = (*iter).x;
auto y = (*iter).y; auto y = (*iter).y;
//计算变换 //计算变换
double retx = m_p00*x + m_p01*y + m_p02; double retx = m_p00*x + m_p01*y + m_p02;
double rety = m_p10*x + m_p11*y + m_p12; double rety = m_p10*x + m_p11*y + m_p12;
//强制的微调旋转量 (*iter).x = retx;
/*double retx2 = m_rp00*retx + m_rp01*rety + m_rp02; (*iter).y = rety;
double rety2 = m_rp10*retx + m_rp11*rety + m_rp12;*/
(*iter).x = retx;//2;
(*iter).y = rety;//2;
auto temp = AreaCenter;//-DataCenter;//以区域中心为原点 auto temp = AreaCenter;//-DataCenter;//以区域中心为原点
(*iter) = (*iter) - temp; (*iter) = (*iter) - temp;
//(*iter) = (*iter) - AreaCenter;
//振镜缩放 //振镜缩放
if (!m_bManualMark)
{
Dbxy Scale = gProgram_SZ_XL->GetJig1Scale(); Dbxy Scale = gProgram_SZ_XL->GetJig1Scale();
if (gCameraHawkvis->GetCamIndex() == 1) if (gCameraHawkvis->GetCamIndex() == 1)
{ {
@ -546,6 +534,16 @@ void CProduct::TheoryDataToRealData(vector<Dbxy> &vec, Dbxy &AreaCenter, Dbxy Cu
//区域内其他的偏移调整 //区域内其他的偏移调整
(*iter).x += CutAdjust.x; (*iter).x += CutAdjust.x;
(*iter).y += CutAdjust.y; (*iter).y += CutAdjust.y;
}
if ( (abs(iter->x)>40) || (abs(iter->y)>40) )
{
CExceptionMsg Msg;
Msg.SetMsg(CString("标刻数据错数!超出标刻范围!"));
throw Msg;//抛出异常
//AfxMessageBox("标刻数据错数!超出标刻范围!");
}
} }
} }

@ -67,6 +67,7 @@ private:
bool m_bHasMarkPt3;//是否有mark3 bool m_bHasMarkPt3;//是否有mark3
bool m_bNewAddProduct = false;//是否是改造后新增的那块产品(201910) bool m_bNewAddProduct = false;//是否是改造后新增的那块产品(201910)
public: public:
bool m_bManualMark = false;//是否是手动标刻(PCIMark按钮)
//用于定位的两个定位点--------------------------- //用于定位的两个定位点---------------------------
Dbxy m_TheoryMarkPt1;//理论坐标(layer 中的坐标) mm Dbxy m_TheoryMarkPt1;//理论坐标(layer 中的坐标) mm
Dbxy m_TheoryMarkPt2; Dbxy m_TheoryMarkPt2;

@ -749,6 +749,10 @@ bool CTrackWorkFlow::PushJigOut()
bool CTrackWorkFlow::IsJigOK() bool CTrackWorkFlow::IsJigOK()
{ {
#ifdef CUSTOM_TXD_2_XL
return true;
#endif
if (gLogMgr->IsDebuging()) if (gLogMgr->IsDebuging())
{ {
return true; return true;
@ -1515,17 +1519,167 @@ void CTrackWorkFlow::UnLoad()
//如果另外一个轴在unload ,要等待其unload 完成 //如果另外一个轴在unload ,要等待其unload 完成
if (gProgram_SZ_XL->IsbAutoWorkMode()) if (gProgram_SZ_XL->IsbAutoWorkMode())
{ {
while (!gExitApp)
{
Sleep(200);
//获取另外一个轴的状态
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
if (OtherTrackWorkStep != _ETrack_Step_Unload)
{
break;
}
}
}
if (m_bAutoWorking)//自动运行中
{
if (gProgram_SZ_XL->IsbAutoWorkMode())//自动模式
{
//通知下料机下料
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);
m_bPullJigOut = false;
int cnt = 0;
while (!m_bPullJigOut&&cnt < 400)
{
Sleep(300);
cnt++;
}
if (cnt == 400)
{
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 了产品
}
else//手动模式直接跳过下料步骤
{
SetCurTrackWorkStep(_ETrack_Step_Unload_End);
}
}
else
{
if (AfxMessageBox("确认手动下料?", MB_YESNO) != IDYES)
{
SetCurTrackWorkStep(_ETrack_Step_NULL);
return;
}
//通知下料机下料
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);
m_bPullJigOut = false;
int cnt = 0; int cnt = 0;
while (!m_bPullJigOut&&cnt < 400)
{
Sleep(300);
cnt++;
}
if (cnt == 400)
{
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) while (!gExitApp)
{ {
Sleep(500); Sleep(500);
//获取另外一个轴的状态 //获取另外一个轴的状态
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType); ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
if ((OtherTrackWorkStep != _ETrack_Step_Unload)||cnt>10) if ((OtherTrackWorkStep != _ETrack_Step_Unload))//||cnt>10)
{ {
break; break;
} }
cnt++; //cnt++;
} }
} }
@ -1603,6 +1757,9 @@ void CTrackWorkFlow::UnLoad()
FunctionUnload(); FunctionUnload();
} }
} }
*/
//移动Y 轴到安全区域 //移动Y 轴到安全区域
void CTrackWorkFlow::MoveMotorYToSafePos() void CTrackWorkFlow::MoveMotorYToSafePos()
{ {

@ -71,6 +71,8 @@
//#define __PROGRESS_DLG__ //是否显示进度条对话框 //#define __PROGRESS_DLG__ //是否显示进度条对话框
#define __CUSTOM_SW_XL__ //客户:汕尾信利 #define __CUSTOM_SW_XL__ //客户:汕尾信利
#define CUSTOM_TXD_2_XL //同兴达改信利
//#define USE_Virtual_CCD_DATA //使用虚拟(自定义的)CCD数据 //#define USE_Virtual_CCD_DATA //使用虚拟(自定义的)CCD数据
#define _USE_LAIPU_SUPERDOG //使用莱普加密狗 #define _USE_LAIPU_SUPERDOG //使用莱普加密狗
//#define Create_MarkPos_MarkData //生成每个区域的加工位置文本文件;生成最后一个区域的打印数据文本文件 //#define Create_MarkPos_MarkData //生成每个区域的加工位置文本文件;生成最后一个区域的打印数据文本文件

Loading…
Cancel
Save