Compare commits

...

29 Commits

Author SHA1 Message Date
bestlqiang 0d40f1c750 Merge branch '同兴达分出-改到信利(不推治具)' of https://gitee.com/bestlqiang/TwoLaserHead-PushJig.git 4 years ago
bestlqiang 0c476d0a2c NULL 4 years ago
bestlqiang 26e883a4f5 NULL 4 years ago
bestlqiang 4d506f5f13 Merge branch '同兴达分出-改到信利(不推治具)' of https://gitee.com/bestlqiang/TwoLaserHead-PushJig.git 4 years ago
bestlqiang 01ce2b3263 忘记屏蔽副机,且副机没开时.不会再阻塞卡死 4 years ago
bestlqiang 7194e392c7 Merge branch '同兴达分出-改到信利(不推治具)' of https://gitee.com/bestlqiang/TwoLaserHead-PushJig.git 4 years ago
bestlqiang af775a1c1c 光删尺检测不管反向问题 4 years ago
bestlqiang 9b5aa6d1d5 1111 4 years ago
bestlqiang cdb2e76a2b 下料改为信利;数据越界检查;打开文件自动换模板 4 years ago
bestlqiang 39bc7354e4 下料线程,不重复进 4 years ago
bestlqiang 8e93ec1546 去掉强制等待10秒;不重复发推出完成给下料机 5 years ago
bestlqiang f1620152ed 增加日志,记录推料动作 5 years ago
bestlqiang 9caa763186 修正强制修改属性表内容BUG 5 years ago
bestlqiang 480db65c12 切换相机时,加异常捕获 5 years ago
bestlqiang f99b24e10b 加大Timmer 延时 5 years ago
bestlqiang e8f25d5f3c 相机改回用一个相机控件; 推料信号发出后,先强制等待10S再检测完成 5 years ago
bestlqiang a09f71010e 振镜校准时,等待平台到位 5 years ago
bestlqiang 8c6342a728 改用旧版相机控件 5 years ago
bestlqiang 7ff79a1d5c 双轨都没抓定位且没切割时,
检测一分钟后,关闭风机
5 years ago
bestlqiang d6a18a9f7d 空闲时,自动关闭风机 5 years ago
bestlqiang 729282c39c 可屏蔽治具检测
治具放回错误时报警
5 years ago
bestlqiang 3e937fedf9 修正振镜校准的数据采集 5 years ago
bestlqiang 2a0a4b6723 不必须等待另一轨道下料完成,即可下料
模板自动同时加载
5 years ago
bestlqiang a19b098200 坐标系修改完成,待测试 5 years ago
bestlqiang 858ed1990e 恢复推出治具超时报警 5 years ago
bestlqiang 7ad1324d8b 串口发送指令前先清理缓冲区
检测治具到位
检测推出完成
5 years ago
bestlqiang 65bd511efd 修正打开时默认相机序号不对 5 years ago
bestlqiang 620248f65e PLC推出最多等待10秒,否则视为推出成功 5 years ago
bestlqiang 453f3ba748 初步OK 5 years ago

@ -258,8 +258,8 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("视场2基准坐标x");
Description = _T("CCD2 的视场基准点相对于平台原点的坐标(单位:mm)");
PropertyName = _T("视场2相对坐标x");
Description = _T("CCD2 的视场中心相对于CCD1中心的坐标(单位:mm)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Coord2.x, Description);
pGroup->AddSubItem(p1);
@ -277,8 +277,8 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("视场2基准坐标y");
Description = _T("CCD2 的视场基准点相对于平台原点的坐标(单位:mm)");
PropertyName = _T("视场2相对坐标y");
Description = _T("CCD2 的视场中心相对于CCD1中心的坐标(单位:mm)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Coord2.y, Description);
pGroup->AddSubItem(p1);
@ -288,7 +288,7 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
{
//添加属性变量映射
Name = _T("m_Size_w");//变量名字
Name = _T("m_Size_w_pix");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_Size.w);
pPropertie->SetType(_PROP_TYPE_DOUBLE);
@ -299,7 +299,7 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
//添加属性显示
PropertyName = _T("视场宽度");
Description = _T("CCD 视场的实际宽度(单位:mm)");
Description = _T("CCD 视场的实际像素宽度(单位:像素)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Size.w, Description);
pGroup->AddSubItem(p1);
@ -307,7 +307,7 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
}
{
//添加属性变量映射
Name = _T("m_Size_h");//变量名字
Name = _T("m_Size_h_pix");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_Size.h);
pPropertie->SetType(_PROP_TYPE_DOUBLE);
@ -318,7 +318,7 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
//添加属性显示
PropertyName = _T("视场高度");
Description = _T("CCD 视场的实际高度(单位:mm)");
Description = _T("CCD 视场的实际像素高度(单位:像素)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Size.h, Description);
pGroup->AddSubItem(p1);
@ -348,8 +348,11 @@ void CCamera::Draw(CDC* pDC)
void CCamera::SetCoord(Dbxy pt)
{
m_Coord = pt;
gDevicePropertieMgr.ChangePropertieByVal(&m_Coord.x, pt.x);
gDevicePropertieMgr.ChangePropertieByVal(&m_Coord.y, pt.y);
//m_Coord2=pt+
//强制保存所有的属性到文件
gDevicePropertieMgr.SaveAllPropertie();
//gDevicePropertieMgr.SaveAllPropertie();
}
//获取CCD 的中心点坐标(一般用来移动到CCD 观察)
Dbxy CCamera::GetCenterPt()
@ -377,7 +380,7 @@ Dbxy CCamera::GetCoord()
{
if (m_CamIndex != 0)
{
return m_Coord2;
return m_Coord+m_Coord2;
}
else
{
@ -410,13 +413,6 @@ Dbxy CCamera::CCDcoord2Platformcoord(Dbxy CCDpt)
LogStr.Format(_T("CCDcoord2Platformcoord : CCD 返回值[x] = [%0.3f] ,[y] = [%0.3f]"),CCDpt.x,CCDpt.y);
gLogMgr->WriteDebugLog(LogStr);
//像素坐标转换为mm 单位坐标-----------------------
if(m_bPixCoord)
{
CCDpt.x *= m_OnePixDis;
CCDpt.y *= m_OnePixDis;
}
if(((CCDpt.x<0)||(CCDpt.x>m_Size.w))||((CCDpt.y<0)||(CCDpt.y>m_Size.h)))//避免错误的返回值
{
CString str = _T("定位抓取失败");
@ -424,7 +420,15 @@ Dbxy CCamera::CCDcoord2Platformcoord(Dbxy CCDpt)
Msg.SetMsg(str);
throw Msg;
}
//像素坐标转换为mm 单位坐标-----------------------
if (m_bPixCoord)
{
CCDpt.x = CCDpt.x - (m_Size.w / 2);
CCDpt.y = (m_Size.h / 2)- CCDpt.y;
CCDpt.x *= m_OnePixDis;
CCDpt.y *= m_OnePixDis;
}
LogStr.Format(_T("[MM_Coordx] = [%0.3f] ,[MM_Coordy] = [%0.3f]"),CCDpt.x,CCDpt.y);
gLogMgr->WriteDebugLog(LogStr);
@ -444,25 +448,32 @@ Dbxy CCamera::CCDcoord2Platformcoord(Dbxy CCDpt)
pt.x -= PlatformPt.x;
pt.y -= PlatformPt.y;
#else
Dbxy CameraCoord = m_Coord; //GetCenterPt();
if (m_CamIndex != 0)
Dbxy CameraCoord = GetCoord(); //GetCenterPt();
/*if (m_CamIndex != 0)
{
CameraCoord = m_Coord2;
}
}*/
LogStr.Format(_T("[CameraCoord.x] = [%0.3f] ,[CameraCoord.y] = [%0.3f]"),CameraCoord.x,CameraCoord.y);
gLogMgr->WriteDebugLog(LogStr);
Dbxy PlatformPt = gPlatformXY->GetCoord();
if (gLogMgr->IsDebuging())
{
PlatformPt=gLogMgr->LastTargetCoord;
}
LogStr.Format(_T("[PlatformCoord.x] = [%0.3f] ,[PlatformCoord.y] = [%0.3f]"),PlatformPt.x,PlatformPt.y);
gLogMgr->WriteDebugLog(LogStr);
CameraCoord.x = CameraCoord.x - PlatformPt.x;
CameraCoord.y = CameraCoord.y + PlatformPt.y;
LogStr.Format(_T("[CameraCoord_Now.x] = [%0.3f] ,[CameraCoord_Now.y] = [%0.3f]"),CameraCoord.x,CameraCoord.y);
Dbxy TheoryPt;
TheoryPt.x = CameraCoord.x - PlatformPt.x;
TheoryPt.y = CameraCoord.y + PlatformPt.y;
LogStr.Format(_T("[TheoryPtCoord_Now.x] = [%0.3f] ,[TheoryPtCoord_Now.y] = [%0.3f]"),CameraCoord.x,CameraCoord.y);
gLogMgr->WriteDebugLog(LogStr);
Dbxy pt;
pt.x = CameraCoord.x + CCDpt.x;
pt.y = CameraCoord.y - CCDpt.y;
pt.x = TheoryPt.x + CCDpt.x;
pt.y = TheoryPt.y + CCDpt.y;
LogStr.Format(_T("[CatchPt.x] = [%0.3f] ,[CatchPt.y] = [%0.3f]"),pt.x,pt.y);
gLogMgr->WriteDebugLog(LogStr);
@ -477,8 +488,8 @@ bool CCamera::CatchPtToPlatformcoord(Dbxy &pt)
if(!m_bCatch)//不实际抓取
{
ret = true;
CatchPt.x = 1296;
CatchPt.y = 972;
CatchPt.x = 1296;
CatchPt.y = 972;
}
else
{

@ -33,9 +33,10 @@ protected:
bool m_bLeftTop;//基准点是否为左上角(false 为左下角)
bool m_bPixCoord;//相机抓取的是否为像素坐标(基恩士返回的是mm 单位的值)
public:
Dbxy m_Coord;//CCD 视场基准点相对于平台原点的坐标值(一般是左上角,或者左下角)
Dbxy m_Coord2;//信利双头,有两个相机,此为CCD2坐标
DbSize m_Size;//CCD 视场范围的实际尺寸(用来计算抓取定位的坐标值)
DbSize m_Size=DbSize(2592,1944);//CCD 视场范围的实际尺寸(用来计算抓取定位的坐标值)
bool m_bRotatoPtByAngle;//是否根据相机的安装角度修正抓取结果
double m_Angle;//安装角度,相对于电机的X 轴(360 度角)

@ -147,7 +147,7 @@ void CCameraHawkvis::ExportPar(ofstream *pFile)
void CCameraHawkvis::Ini()
{
//绑定霍克视觉的ocx 控件
m_HawkvisCtrl = (GetFrame()->m_DlgHawkvisCamera.m_pHawkvisCtrl);
m_HawkvisCtrl = &(GetFrame()->m_DlgHawkvisCamera.m_HawkvisCtrl);
#if 0//def __HAWKVIS_MINDVISION_CCD__
//相机镜像
m_HawkvisCtrl->MV_SetReversal(0, m_bMirrorH);//水平方向
@ -173,16 +173,14 @@ bool CCameraHawkvis::CatchPoint(Dbxy &pt)
{
if (!m_bUse)
return false;
auto & m_HawkvisCtrl = (GetFrame()->m_DlgHawkvisCamera.m_pHawkvisCtrl);
auto & m_HawkvisCtrl = (GetFrame()->m_DlgHawkvisCamera.m_HawkvisCtrl);
//清除之前绘制的圆
m_HawkvisCtrl->ClearGraphicObject();
m_HawkvisCtrl.ClearGraphicObject();
//抓取一帧
#ifdef __HAWKVIS_MINDVISION_CCD__
m_HawkvisCtrl->MV_GetOneFrame();
Sleep(100);
if (!m_HawkvisCtrl->MV_GetOneFrame())
if (!m_HawkvisCtrl.MV_GetOneFrame())
#else
if (!m_HawkvisCtrl->HV_GetOneFrame())
if (!m_HawkvisCtrl.HV_GetOneFrame())
#endif
{
CString str = _T("func : Hawkvis Get One Frame----->Error");
@ -229,7 +227,7 @@ bool CCameraHawkvis::CatchPoint(Dbxy &pt)
bool ret = false;
try
{
ret = m_HawkvisCtrl->FindShapeModel(GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount);
ret = m_HawkvisCtrl.FindShapeModel(GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount);
}
catch (...)
@ -280,8 +278,8 @@ bool CCameraHawkvis::CatchPoint(Dbxy &pt)
if (!IsDbxyZero(pt))
{
m_HawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, true);
m_HawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, true);
m_HawkvisCtrl.ZoomFitWindow();
}
//m_HawkvisCtrl->MV_GetContinueFrame();
return true;

@ -21,6 +21,9 @@ public:
unsigned char GetCurShapeModelID() { return m_CurShapeModelID; };
void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; };
//unsigned char GetCurShapeModelID() { return 0; };
//void SetCurShapeModelID(int ID) { m_CurShapeModelID = 0; };
public:
CHawkvisctrlctrl1 *m_HawkvisCtrl;//霍克视觉的ocx 控件
int m_nCam1Expore;//曝光值

@ -45,8 +45,6 @@ bool CClientMgr::Connect2Server()
m_bOnline = true;
}
return true;
}
@ -55,6 +53,7 @@ void CClientMgr::DisConnectServer()
if (m_hSocket!=INVALID_SOCKET)
{
Close();
m_bOnline = false;
}
}
@ -324,6 +323,48 @@ void CClientMgr::OnConnect(int nErrorCode)
CSocket::OnConnect(nErrorCode);
}
BOOL CClientMgr::Connect(LPCTSTR lpszHostAddress, UINT nHostPort)
{
SetTimeOut();
auto ret = CSocket::Connect(lpszHostAddress, nHostPort);
KillTimeOut();
return ret;
}
BOOL CClientMgr::SetTimeOut(UINT uTimeOut)
{
LARGE_INTEGER llCnt;
::QueryPerformanceCounter(&llCnt);
m_llDtStart = llCnt.QuadPart;
m_uTimeOut = uTimeOut;
return TRUE;
}
BOOL CClientMgr::KillTimeOut()
{
m_llDtStart = 0;//表明取消计时
return TRUE;
}
BOOL CClientMgr::OnMessagePending()
{
if (m_llDtStart)
{
LARGE_INTEGER lldtEnd;
::QueryPerformanceCounter(&lldtEnd);
LARGE_INTEGER llFrq;
::QueryPerformanceFrequency(&llFrq);
double dbDealy = (double)(lldtEnd.QuadPart - m_llDtStart) * 1000 / llFrq.QuadPart;
if (dbDealy > m_uTimeOut)
{
CancelBlockingCall();//退出阻塞的函数
AfxMessageBox("网络超时!");
return FALSE; // No need for idle time processing.
}
}
return CSocket::OnMessagePending();
}
bool CClientMgr::CheckServerDoneCmd()
{
int waitCnt = 0;

@ -61,6 +61,17 @@ private:
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnConnect(int nErrorCode);
//start--------------设定发送超时---------------------
private:
virtual BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort); //重写 加入超时
BOOL SetTimeOut(UINT uTimeOut = 500);//ms级延时
BOOL KillTimeOut();
virtual BOOL OnMessagePending() override;
LONGLONG m_llDtStart;
UINT m_uTimeOut;
//end--------------设定读写超时相关---------------------
void SendCmd_TransFile(CString filePath);//给伺服端传文件(复制到共享盘,无通信)
void DoEvents();
bool m_bOnline = false;

@ -519,7 +519,8 @@ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | _dwIOMode,NULL);
}
return IsOpen();
}
//ノ靹テエョソレ
public:
//ÉèÖÃ(ÖØÖÃ)´®¿Ú
virtual bool SetupPort()
{
if (!IsOpen())

@ -118,6 +118,10 @@ void CCommPortMgr::WriteBuf(LPVOID Buffer, DWORD dwBufferLength)
//gLogMgr->WriteDebugLog(str);
m_Com.Write(Buffer,dwBufferLength);
}
void CCommPortMgr::ClearCache()
{
m_Com.SetupPort();
}
//关闭串口
void CCommPortMgr::Close()
{

@ -13,6 +13,7 @@ public:
void SetWnd(HWND hWnd);
void Write(const char *szBuffer);
void WriteBuf(LPVOID Buffer, DWORD dwBufferLength);
void ClearCache();//重置读写缓冲区
CString ReadStr();
CString ReadBuf(char *szBuffer,DWORD dwBufferLength);
int Read(LPVOID Buffer, DWORD dwBufferLength);

@ -228,6 +228,26 @@ CMFCPropertyGridProperty * CCommonFlowMgr::CreatGridProperty()
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//添加属性变量映射
Name = _T("m_bCheckJig");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bCheckJig);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("检测治具到位");
Description = _T("是否需要检测治具到位");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bCheckJig, Description);
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
}
//-------------------------------------------------------------------------------//
{
@ -672,8 +692,8 @@ void CCommonFlowMgr::WriteWorkFileExt(vector<CLab> &LabVec)
LabVec.push_back(CLab(LAB_SPECIAL_ONE_OBJ_CUT_TIMES, m_SpecialOneObjMarkCnt));
LabVec.push_back(CLab(LAB_ONE_AREA_CUT_TIMES, m_AreaCycleCnt));
LabVec.push_back(CLab(LAB_ONE_CUT_SPEED, m_CutSpeed));
LabVec.push_back(CLab(LAB_ADJUST_OFFSET_X, m_ProductOffset.x));
LabVec.push_back(CLab(LAB_ADJUST_OFFSET_Y, m_ProductOffset.y));
LabVec.push_back(CLab(LAB_ADJUST_OFFSET_X, m_Jig1PrtOffset.x));
LabVec.push_back(CLab(LAB_ADJUST_OFFSET_Y, m_Jig1PrtOffset.y));
}
void CCommonFlowMgr::ReadWorkFile(CLabVecRang &LabVecRang)
{
@ -710,14 +730,14 @@ void CCommonFlowMgr::ReadWorkFile(CLabVecRang &LabVecRang)
CLab Lab = WorkFileMgr.FindLab(LabVecRang, LAB_ADJUST_OFFSET_X);
if (Lab.m_ValType != _TYPE_NULL)
{
m_ProductOffset.x = Lab.m_Double;
m_Jig1PrtOffset.x = Lab.m_Double;
}
}
{
CLab Lab = WorkFileMgr.FindLab(LabVecRang, LAB_ADJUST_OFFSET_Y);
if (Lab.m_ValType != _TYPE_NULL)
{
m_ProductOffset.y = Lab.m_Double;
m_Jig1PrtOffset.y = Lab.m_Double;
}
}
}
@ -1044,6 +1064,7 @@ bool CCommonFlowMgr::NormalMarkByPciCard(bool bSel, int times, int CyclicTimes)
gLogMgr->WriteDebugLog("Fuc---->NormalMarkByPciCard : bSel = " + Bool2Str(bSel));
//临时Product
CProduct Product;
Product.m_bManualMark = true;
//创建一个临时的area
CMarkArea MarkArea(Dbxy(0, 0), DbSize(100, 100));
//收集加工数据
@ -1071,7 +1092,7 @@ bool CCommonFlowMgr::NormalMarkByPciCard(bool bSel, int times, int CyclicTimes)
return false;
}
//移动到第一个area (不等待移动结束)
void CCommonFlowMgr::MoveToFirstArea()
void CCommonFlowMgr::MoveToFirstArea(Dbxy offset)
{
gLogMgr->WriteDebugLog("Fuc---->MoveToFirstArea");
CWorkCmdContainer CmdContainer;
@ -1096,8 +1117,8 @@ void CCommonFlowMgr::MoveToFirstArea()
{
Dbxy AreaRealBasePt = AreaVec[0].GetRealBasePt();//移动到实际位置
Dbxy MovePt;//移动点= area 的理论点
MovePt.x = AreaRealBasePt.x;
MovePt.y = AreaRealBasePt.y;
MovePt.x = AreaRealBasePt.x+offset.x;
MovePt.y = AreaRealBasePt.y+offset.y;
CWorkCmdMovePlatformXY *pCmd = new CWorkCmdMovePlatformXY();
pCmd->MoveToTargetPt(MovePt, TargetPt);
pCmd->InWorkState();
@ -1117,10 +1138,21 @@ bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel)
gLogMgr->WriteDebugLog("Fuc---->MultipleAreaMark : bSel = " + Bool2Str(bSel));
//先移动到第一个area (不等待移动结束)
MoveToFirstArea();
MoveToFirstArea(Product.GetProductBasePt());
//搜集加工数据(这里比较耗费时间)
gMarkAreaMgr->CollectWorkData(bSel, Product);
try
{
gMarkAreaMgr->CollectWorkData(bSel, Product);
}
catch (CExceptionMsg msg)
{
gTrackWorkFlow1.RadAlamOnOff(true);//报警提示
AfxMessageBox(msg.GetMsgStr());
gTrackWorkFlow1.RadAlamOnOff(false);//报警提示
return false;
}
if (!gMarkAreaMgr->HasWorkData())
return false;
//是否需要自动回原点
@ -1197,8 +1229,9 @@ bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel)
{
Dbxy AreaRealBasePt = (*iter).GetRealBasePt();//移动到实际位置
Dbxy MovePt;//移动点= area 的理论点
MovePt.x = AreaRealBasePt.x;
MovePt.y = AreaRealBasePt.y;
MovePt = AreaRealBasePt + Product.GetProductBasePt();
/*MovePt.x = AreaRealBasePt.x;
MovePt.y = AreaRealBasePt.y;*/
CWorkCmdMovePlatformXY *pCmd = new CWorkCmdMovePlatformXY();
pCmd->MoveToTargetPt(MovePt, TargetPt);
pCmd->InWorkState();//工作速度
@ -1379,7 +1412,8 @@ void CCommonFlowMgr::CameraCatchTwoMark(CProduct &Product)
Dbxy MarkPt2;
if (gObjComponentMgr->GetTwoMarkPt(MarkPt1, MarkPt2))//从ObjComponent 中获取定位点
{
Product.SetTheoryMarkPt(MarkPt1, MarkPt2);//设置定位点
Dbxy BasePt = Product.GetProductBasePt();
Product.SetTheoryMarkPt(MarkPt1+BasePt, MarkPt2+BasePt);//设置定位点
CameraCatchMarkExt(Product);
}
else//没有两个定位点
@ -1396,7 +1430,8 @@ bool CCommonFlowMgr::CameraCatchMark3(CProduct &Product)
//获取mark 坐标的大致位置
Dbxy MarkPt3;
//移动目标点(ccd 的中心)
Dbxy CameraPt = Camera.GetCenterPt();
Dbxy CameraPt = Camera.GetCoord();
CWorkCmdInvoker Invoker;
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();//指令集
@ -1413,21 +1448,15 @@ bool CCommonFlowMgr::CameraCatchMark3(CProduct &Product)
CmdContainer.AddCmd(pCmd);
}
//如果有mark3 先识别mark3
Product.SetbHasMarkPt3(false);
//Product.SetbHasMarkPt3(false);
if (gObjComponentMgr->GetMark3Pt(MarkPt3))
{
Product.SetbHasMarkPt3(true);
Product.SetTheoryMark3Pt(MarkPt3);
Product.SetTheoryMark3Pt(MarkPt3+Product.GetProductBasePt());
//移动mark 3 到CCD 中心
{
CWorkCmdMovePlatformXY *pCmd = new CWorkCmdMovePlatformXY();
Dbxy P2CatchMarkPos = MarkPt3;
if (Product.IsbNewAddProduct())//改造新增工件抓取定位时,需要偏移到位.
{
Dbxy NPoffset = GetNPOffset();
P2CatchMarkPos.x += NPoffset.x;
P2CatchMarkPos.y += NPoffset.y;
}
Dbxy P2CatchMarkPos = MarkPt3 + Product.GetProductBasePt();
pCmd->MoveToTargetPt(P2CatchMarkPos, CameraPt);
CmdContainer.AddCmd(pCmd);
}
@ -1479,7 +1508,7 @@ bool CCommonFlowMgr::CameraCatchMarkExt(CProduct &Product)
Product.GetMarkCoord(MarkPt1, MarkPt2);
//移动目标点(ccd 的中心)
Dbxy CameraPt = Camera.GetCenterPt();
Dbxy CameraPt = Camera.GetCoord();
CWorkCmdInvoker Invoker;
CWorkCmdContainer &CmdContainer = CWorkCmdContainer::GetInstance();//指令集
@ -1498,15 +1527,6 @@ bool CCommonFlowMgr::CameraCatchMarkExt(CProduct &Product)
Dbxy P2CatchMarkPos1 = MarkPt1;
Dbxy P2CatchMarkPos2 = MarkPt2;
if (Product.IsbNewAddProduct())
{
Dbxy NPoffset = GetNPOffset();
P2CatchMarkPos1.x += NPoffset.x;
P2CatchMarkPos1.y += NPoffset.y;
P2CatchMarkPos2.x += NPoffset.x;
P2CatchMarkPos2.y += NPoffset.y;
}
//识别mark1 和mark2
if (!Product.IsSetRealMarkPt1() || (Product.IsSetRealMarkPt1() && Product.IsSetRealMarkPt2()))
@ -1652,6 +1672,14 @@ void CCommonFlowMgr::MovePtToCamera(vector<Dbxy> &PtVec, vector<Dbxy> &ResultVec
pCmd->SetAfterDelay(300);//移动后延时
CmdContainer.AddCmd(pCmd);
}
//等待运动结束-------------------------------------------------
{
CWorkCmdWaitMotorStop *pCmd = new CWorkCmdWaitMotorStop();
pCmd->SetbWaitMotorX();
pCmd->SetbWaitMotorX2();
pCmd->SetbWaitMotorY();
CmdContainer.AddCmd(pCmd);
}
//抓取--------------------------------------------------------
if (bCatch)
{
@ -1659,7 +1687,7 @@ void CCommonFlowMgr::MovePtToCamera(vector<Dbxy> &PtVec, vector<Dbxy> &ResultVec
pCmd->SetResultVec(ResultVec);//绑定结果容器
pCmd->SetFrontDelay(Camera.GetCatchFrontDelay());//抓取前延时
pCmd->SetAfterDelay(300);//移动后延时
pCmd->SetbAlam(false);//不要蜂鸣器提示
pCmd->SetbAlam(true);//不要蜂鸣器提示
CmdContainer.AddCmd(pCmd);
}
}
@ -1717,12 +1745,14 @@ void CCommonFlowMgr::MoveSelObjToCamera(CProduct &Product)
#endif
void CCommonFlowMgr::SetAdjustOffsetAll(Dbxy Offset)
{
m_AdjustOffsetAll.x = Offset.x + m_ProductOffset.x;
m_AdjustOffsetAll.y = Offset.y + m_ProductOffset.y;
/*m_AdjustOffsetAll.x = m_ProductOffset.x;
m_AdjustOffsetAll.y = m_ProductOffset.y;*/
auto Jigoft = m_Jig1PrtOffset;
if (gCurLockTrackType == _ETrackType_Track_2)
Jigoft = m_Jig3PrtOffset;
m_AdjustOffsetAll = Offset + Jigoft;
}
void CCommonFlowMgr::ResetProductOffset()
{
m_ProductOffset.x = m_ProductOffset.y = 0;
m_Jig1PrtOffset.x = m_Jig1PrtOffset.y = 0;
}

@ -63,7 +63,7 @@ public:
private:
void SetLightStateCmd(CWorkCmdContainer &CmdContainer,bool bStart);
bool CameraCatchMarkExt(CProduct &Product);
void MoveToFirstArea();
void MoveToFirstArea(Dbxy offset);
private:
CCamera *m_CurCamera;//当前使用的相机
int m_AlamDelay;//报警延时(ms)
@ -73,6 +73,9 @@ private:
int m_CurWorkExecTimes;//当前执行次数(用来拷机)
bool m_bStartWorkMsg;//加工前提示
bool m_NoMarkCanWork;//没有定位点时也可以加工
public:
bool m_bCheckJig=true;//是否检测治具到位
private:
bool m_bWorkStop;//工作是否停止
bool m_bVacuum;//是否使用真空吸附(加工前吸附,结束后放开)
bool m_bCheckObjDataConsistency;//是否检查数据的一致性(避免obj 数据不相等的情况)
@ -95,8 +98,9 @@ private:
int m_SpecialOneObjMarkCnt;//特殊刀增加的切割次数
bool m_bCollectSpecialObj;//是否正在收集特殊对象数据
int m_CutSpeed;//切割速度
Dbxy m_ProductOffset;//针对产品的切割偏移
Dbxy m_Jig1PrtOffset;//针对产品&治具的切割偏移(主界面调整)
Dbxy m_Jig3PrtOffset;//针对产品&治具的切割偏移(主界面调整)
bool m_bConnectObj;//是否连接多个obj 数据
bool m_bBackToProductPt;//加工完成后是否返回取料点
@ -116,6 +120,7 @@ private:
bool m_bUseLaser;//是否开关激光
//振镜校准参数--------------------------------------------------------------
double m_CalibrationPointGap;//打点之间的间隔mm
public:
double m_CalibrationRange;//振镜校准范围mm
};

@ -479,7 +479,7 @@ void DlgCutDeviceCtrl::SetPar()
m_RotatoAdjust = gCommonFlowMgr->GetRotatoAdjust();//旋转调整
m_SizeAdjust = gCommonFlowMgr->GetAdjustSize();
m_MarkAreaCutCount = gCommonFlowMgr->GetAreaCycleCnt();//循环次数
UpdateData(FALSE);
//UpdateData(FALSE);
}
//应用参数
void DlgCutDeviceCtrl::OnBnClickedSavePar()

@ -10,6 +10,7 @@
#include "CommonFlowMgr.h"
#include "CameraHawkvis.h"
#include "ProgramCutMgr.h"
#include "PropertieMgr.h"
#include "SmartArchive.h"
#include <opencv2/opencv.hpp>
@ -61,8 +62,7 @@ void DlgHawkvisCamera::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ISP3000_LOGO_BTN, m_ISP3000LogoBtn);
DDX_Control(pDX, IDC_HAWKVISCTRLCTRL3, m_HawkvisCtrl1);
DDX_Control(pDX, IDC_HAWKVISCTRLCTRL4, m_HawkvisCtrl2);
DDX_Control(pDX, IDC_HAWKVISCTRLCTRL3, m_HawkvisCtrl);
DDX_Control(pDX, IDC_OPEN_CAM, m_OpenCamBtn);
DDX_Control(pDX, IDC_CLOSE_CAM, m_CloseCamBtn);
@ -85,7 +85,6 @@ void DlgHawkvisCamera::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_EDIT_SET_EXP2, m_CurTrackThreshold);
DDX_Text(pDX, IDC_STATIC_CurValue, m_CurPic_Definition);
}
BOOL DlgHawkvisCamera::OnInitDialog()
{
@ -105,44 +104,9 @@ BOOL DlgHawkvisCamera::OnInitDialog()
m_ContinueFrameBtn.SetUpColor(RGB_PINK);
Update();
Fresh();
try
{
if (m_HawkvisCtrl1.MV_SelectAdapterByIdx(0))
{
if (m_HawkvisCtrl1.MV_OpenCamera())
{
m_pHawkvisCtrl = &m_HawkvisCtrl1;
m_HawkvisCtrl1.MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore);
m_nExpore = gCameraHawkvis->m_nCam1Expore;
}
m_HawkvisCtrl1.SetCrossShow(1, 30, 30, -1, -1, TRUE);
if (m_HawkvisCtrl1.MV_GetOneFrame())
{
m_HawkvisCtrl1.ZoomFitWindow();
}
}
if (m_HawkvisCtrl2.MV_SelectAdapterByIdx(1))
{
if (m_HawkvisCtrl2.MV_OpenCamera())
{
m_pHawkvisCtrl = &m_HawkvisCtrl2;
m_HawkvisCtrl2.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore);
//m_nExpore = gCameraHawkvis->m_nCam2Expore;
}
m_HawkvisCtrl2.SetCrossShow(1, 30, 30, -1, -1, TRUE);
if (m_HawkvisCtrl2.MV_GetOneFrame())
{
m_HawkvisCtrl2.ZoomFitWindow();
}
}
}
catch (...)
{
AfxMessageBox("打开相机异常.");
}
((CButton*)GetDlgItem(IDC_CROSS_CHECK))->SetCheck(TRUE);
UpdateData(FALSE);
return TRUE;
}
@ -150,39 +114,24 @@ BOOL DlgHawkvisCamera::OnInitDialog()
void DlgHawkvisCamera::UpdateInfo()
{
//换文件时,自动换模板
if ( (!gLogMgr->IsDebuging()) && gCameraHawkvis->GetCurShapeModelID() != m_ShapeModelID)
if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID)
{
m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID();
m_pHawkvisCtrl = &m_HawkvisCtrl1;
OnBnClickedLoadCatchTemp();
Sleep(200);
m_pHawkvisCtrl = &m_HawkvisCtrl2;
OnBnClickedLoadCatchTemp();
}
if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex())
return;
m_DlgCurCamIndex = gCameraHawkvis->GetCamIndex(); //系数立即刷新,避免重复进入
if (gCameraHawkvis->GetCamIndex() == 0)
{
m_pHawkvisCtrl = &m_HawkvisCtrl1;
( (CButton*)GetDlgItem(IDC_RADIO1) )->SetCheck(FALSE);
( (CButton*)GetDlgItem(IDC_RADIO3) )->SetCheck(TRUE);
}
OnBnClickedToCam1();
if (gCameraHawkvis->GetCamIndex() == 1)
{
m_pHawkvisCtrl = &m_HawkvisCtrl2;
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);
//OnBnClickedToCam2();
}
OnBnClickedToCam2();
UpdateData(FALSE);
}
void DlgHawkvisCamera::Update()
void DlgHawkvisCamera::Fresh()
{
SetTimer(WORK_TIMER1, WORK_TIME_DELAY1, NULL);//用timer来更新否则会报错
}
@ -200,7 +149,7 @@ void DlgHawkvisCamera::OnTimer(UINT nIDEvent)
void DlgHawkvisCamera::OnBnClickedOpenCam()
{
#ifdef __HAWKVIS_MINDVISION_CCD__
if (m_pHawkvisCtrl->MV_OpenCamera())
if (m_HawkvisCtrl.MV_OpenCamera())
#else
if (m_HawkvisCtrl.HV_OpenCamera())
#endif
@ -209,36 +158,27 @@ void DlgHawkvisCamera::OnBnClickedOpenCam()
}
else
gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->ERR");
}
}
void DlgHawkvisCamera::OnBnClickedCloseCam()
{
#ifdef __HAWKVIS_MINDVISION_CCD__
if (m_pHawkvisCtrl->MV_CloseCamera())
{
gLogMgr->WriteDebugLog("Hawkvis : Close Cam OK");
}
else
{
gLogMgr->WriteDebugLog("Hawkvis : Close Cam Failed!");
}
m_HawkvisCtrl.MV_CloseCamera();
#else
m_HawkvisCtrl.HV_CloseCamera();
#endif
gLogMgr->WriteDebugLog("Hawkvis : Close Cam");
}
void DlgHawkvisCamera::OnBnClickedFrameOne()
{
m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, FALSE);
#ifdef __HAWKVIS_MINDVISION_CCD__
/*m_pHawkvisCtrl->MV_GetOneFrame();
Sleep(100);*/
if (m_pHawkvisCtrl->MV_GetOneFrame())
if (m_HawkvisCtrl.MV_GetOneFrame())
#else
if (m_HawkvisCtrl.HV_GetOneFrame())
#endif
{
//m_HawkvisCtrl.Rotate180();
m_pHawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.ZoomFitWindow();
gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK");
}
else
@ -248,14 +188,14 @@ void DlgHawkvisCamera::OnBnClickedFrameOne()
}
void DlgHawkvisCamera::OnBnClickedFrameContinue()
{
m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
#ifdef __HAWKVIS_MINDVISION_CCD__
if (m_pHawkvisCtrl->MV_GetContinueFrame())
if (m_HawkvisCtrl.MV_GetContinueFrame())
#else
if (m_HawkvisCtrl.HV_GetContinueFrame())
#endif
{
m_pHawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.ZoomFitWindow();
gLogMgr->WriteDebugLog("Hawkvis : FrameContinue --OK");
}
else
@ -265,13 +205,13 @@ void DlgHawkvisCamera::OnBnClickedFrameContinue()
}
void DlgHawkvisCamera::OnBnClickedReadBmp()
{
m_pHawkvisCtrl->ReadImage();
m_HawkvisCtrl.ReadImage();
}
void DlgHawkvisCamera::OnBnClickedSaveBmp()
{
CFileMgr FileMgr;
CString path = FileMgr.GetWorkPath();
m_pHawkvisCtrl->WriteImage((LPCTSTR)path, "OutputImg");
m_HawkvisCtrl.WriteImage((LPCTSTR)path, "OutputImg");
gLogMgr->WriteDebugLog("Hawkvis : SaveBmp");
}
//设置曝光值
@ -281,13 +221,15 @@ void DlgHawkvisCamera::OnBnClickedSetExpore()
#ifdef __HAWKVIS_MINDVISION_CCD__
if (m_DlgCurCamIndex == 0)
{
gCameraHawkvis->m_nCam1Expore = m_nExpore;
//gCameraHawkvis->m_nCam1Expore = m_nExpore;
gDevicePropertieMgr.ChangePropertieByVal(&gCameraHawkvis->m_nCam1Expore, m_nExpore);
}
else
{
gCameraHawkvis->m_nCam2Expore = m_nExpore;
//gCameraHawkvis->m_nCam2Expore = m_nExpore;
gDevicePropertieMgr.ChangePropertieByVal(&gCameraHawkvis->m_nCam2Expore, m_nExpore);
}
m_pHawkvisCtrl->MV_SetCameraExpTime(m_nExpore);
m_HawkvisCtrl.MV_SetCameraExpTime(m_nExpore);
#else
m_HawkvisCtrl.HV_SetCameraExpTime(m_nExpore);
#endif
@ -299,140 +241,123 @@ void DlgHawkvisCamera::OnBnClickedSetExpore()
void DlgHawkvisCamera::OnBnClickedZoomFull()
{
m_pHawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.ZoomFitWindow();
}
void DlgHawkvisCamera::OnBnClickedHkZoomIn()
{
m_pHawkvisCtrl->ZoomIn();
m_HawkvisCtrl.ZoomIn();
}
void DlgHawkvisCamera::OnBnClickedHkZoomOut()
{
m_pHawkvisCtrl->ZoomOut();
m_HawkvisCtrl.ZoomOut();
}
#if 1
//编辑模板
void DlgHawkvisCamera::OnBnClickedCreatCatchTemp()
{
//调用控件接口创建基于形状的模板输入参数为模板ID号。控件最多支持创建100个模板即模板号为099
// m_HawkvisCtrl.CreateShapeModel(0);
try
{
m_pHawkvisCtrl->CreateShapeModel(gCameraHawkvis->GetCurShapeModelID());
}
catch (...)
{
AfxMessageBox("编辑模板 异常!");
}
//m_HawkvisCtrl.CreateShapeModel(0);
m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID());
}
void DlgHawkvisCamera::OnBnClickedTestCatchTemp()
{
//清除之前绘制的圆
m_pHawkvisCtrl->ClearGraphicObject();
//抓取一帧
try
{
//清除之前绘制的圆
m_HawkvisCtrl.ClearGraphicObject();
//抓取一帧
#ifdef __HAWKVIS_MINDVISION_CCD__
if (!m_pHawkvisCtrl->MV_GetOneFrame())
if (!m_HawkvisCtrl.MV_GetOneFrame())
#else
if (!m_HawkvisCtrl->HV_GetOneFrame())
if (!m_HawkvisCtrl->HV_GetOneFrame())
#endif
{
CString str = _T("func : Hawkvis Get One Frame----->Error");
//CExceptionMsg Msg;
//Msg.SetMsg(str);
//throw Msg;
{
CString str = _T("func : Hawkvis Get One Frame----->Error");
gLogMgr->WriteDebugLog(str);
}
Sleep(300);//等待数据结果输出到ocx 控件上
//模板查找
double pdbX[10], pdbY[10], pdbAngles[10], pdbScale[10], pdbSore[10];
long nCount[1] = { 1 };
//FindShapeMode 控件的模板查找函数。
//第一个参数金字塔层数取值范围15
//第二个参数,输出查找到的目标列坐标
//第三个参数,输出查找到的目标行坐标
//第四个参数,输出查找到的目标角度
//第五个参数,输出查找到的目标伸缩度
//第六个参数,输出查找到的目标分数
//第七个参数,输出查找到的目标个数
//第八个参数输入查找模板的ID号
VARIANT *v_pdbX = new VARIANT[1];
VARIANT *v_pdbY = new VARIANT[1];
VARIANT *v_pdbAngles = new VARIANT[1];
VARIANT *v_pdbScale = new VARIANT[1];
VARIANT *v_pdbSore = new VARIANT[1];
bool ret = m_HawkvisCtrl.FindShapeModel(gCameraHawkvis->GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount);
if (!ret)//2018-01-15 增加保护,否则下面可能会报错
{
CString str = _T("func : Hawkvis Find Shape Model----->Error");
//CExceptionMsg Msg;
//Msg.SetMsg(str);
//throw Msg;
gLogMgr->WriteDebugLog(str);
return;
}
//pdbX
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbX->parray); ++index) {
::SafeArrayGetElement(v_pdbX->parray, &index, pdbX + index);
}
//pdbY
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbY->parray); ++index) {
::SafeArrayGetElement(v_pdbY->parray, &index, pdbY + index);
}
//pdbAngles
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbAngles->parray); ++index) {
::SafeArrayGetElement(v_pdbAngles->parray, &index, pdbAngles + index);
}
//pdbScale
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbScale->parray); ++index) {
::SafeArrayGetElement(v_pdbScale->parray, &index, pdbScale + index);
}
//pdbSore
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbSore->parray); ++index) {
::SafeArrayGetElement(v_pdbSore->parray, &index, pdbSore + index);
}
//显示查找到的模板的位置
#if 1
Dbxy pt;
CString str;
str.Format("X: %0.3f, Y:%0.f", pdbX[0], pdbY[0]);
pt.x = pdbX[0];
pt.y = pdbY[0];
str.Format("X: %0.3f, Y:%0.3f", pt.x, pt.y);
gLogMgr->WriteDebugLog(str);
}
Sleep(300);//等待数据结果输出到ocx 控件上
//模板查找
double pdbX[10], pdbY[10], pdbAngles[10], pdbScale[10], pdbSore[10];
long nCount[1] = { 1 };
//FindShapeMode 控件的模板查找函数。
//第一个参数金字塔层数取值范围15
//第二个参数,输出查找到的目标列坐标
//第三个参数,输出查找到的目标行坐标
//第四个参数,输出查找到的目标角度
//第五个参数,输出查找到的目标伸缩度
//第六个参数,输出查找到的目标分数
//第七个参数,输出查找到的目标个数
//第八个参数输入查找模板的ID号
VARIANT *v_pdbX = new VARIANT[1];
VARIANT *v_pdbY = new VARIANT[1];
VARIANT *v_pdbAngles = new VARIANT[1];
VARIANT *v_pdbScale = new VARIANT[1];
VARIANT *v_pdbSore = new VARIANT[1];
bool ret = false;
try
{
ret = m_pHawkvisCtrl->FindShapeModel(gCameraHawkvis->GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount);
#endif
//gCommonFlowMgr->CameraCatch();
}
catch (...)
{
ret = false;
AfxMessageBox("模板匹配 异常!");
}
if (!ret)//2018-01-15 增加保护,否则下面可能会报错
{
CString str = _T("func : Hawkvis Find Shape Model----->Error");
//CExceptionMsg Msg;
//Msg.SetMsg(str);
//throw Msg;
gLogMgr->WriteDebugLog(str);
return;
}
//pdbX
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbX->parray); ++index) {
::SafeArrayGetElement(v_pdbX->parray, &index, pdbX + index);
}
//pdbY
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbY->parray); ++index) {
::SafeArrayGetElement(v_pdbY->parray, &index, pdbY + index);
}
//pdbAngles
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbAngles->parray); ++index) {
::SafeArrayGetElement(v_pdbAngles->parray, &index, pdbAngles + index);
}
//pdbScale
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbScale->parray); ++index) {
::SafeArrayGetElement(v_pdbScale->parray, &index, pdbScale + index);
}
//pdbSore
for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbSore->parray); ++index) {
::SafeArrayGetElement(v_pdbSore->parray, &index, pdbSore + index);
}
//显示查找到的模板的位置
#if 1
Dbxy pt;
CString str;
str.Format("X: %0.3f, Y:%0.f", pdbX[0], pdbY[0]);
pt.x = pdbX[0];
pt.y = pdbY[0];
str.Format("X: %0.3f, Y:%0.3f", pt.x, pt.y);
gLogMgr->WriteDebugLog(str);
#endif
//gCommonFlowMgr->CameraCatch();
}
void DlgHawkvisCamera::OnBnClickedLoadCatchTemp()
{
CFileMgr FileMgr;
CString path = FileMgr.GetWorkPath();
// auto b=m_HawkvisCtrl.LoadShapeModel((LPCTSTR)path);
try
{
auto b = m_pHawkvisCtrl->LoadShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path);
CString str;
str.Format("Hawkvis : LoadatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID());
auto b = m_HawkvisCtrl.LoadShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path);
CString str;
str.Format("Hawkvis : LoadatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID());
if (b)
str += " 成功!";
else
str += " 失败!";
if (b)
str += " 成功!";
else
str += " 失败!";
gLogMgr->WriteDebugLog(str);
}
catch (...)
{
AfxMessageBox("加载模板 异常!");
}
gLogMgr->WriteDebugLog(str);
//gLogMgr->WriteDebugLog("Hawkvis : LoadCatchTemp");
}
void DlgHawkvisCamera::OnBnClickedSaveCatchTemp()
@ -443,59 +368,43 @@ void DlgHawkvisCamera::OnBnClickedSaveCatchTemp()
CFileMgr FileMgr;
CString path = FileMgr.GetWorkPath();
//auto b= m_HawkvisCtrl.SaveShapeModel((LPCTSTR)path);
try
{
auto b = m_pHawkvisCtrl->SaveShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path);
CString str;
str.Format("Hawkvis : SaveCatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID());
if (b)
str += " 成功!";
else
str += " 失败!";
gLogMgr->WriteDebugLog(str);
}
catch (...)
{
AfxMessageBox("保存模板 异常!");
}
auto b = m_HawkvisCtrl.SaveShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path);
CString str;
str.Format("Hawkvis : SaveCatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID());
if (b)
str += " 成功!";
else
str += " 失败!";
gLogMgr->WriteDebugLog(str);
}
#endif
void DlgHawkvisCamera::OnBnClickedToCam1()
{
m_pHawkvisCtrl = &m_HawkvisCtrl1;
return;
/*try
//提前刷新索引,避免重复进入
m_DlgCurCamIndex = 0;
gCameraHawkvis->SetCamIndex(0);
try
{
m_pHawkvisCtrl->MV_CloseCamera();
if (m_pHawkvisCtrl->MV_SelectAdapterByIdx(0))
m_HawkvisCtrl.MV_CloseCamera();
if (m_HawkvisCtrl.MV_SelectAdapterByIdx(0))
{
if (m_pHawkvisCtrl->MV_OpenCamera())
if (m_HawkvisCtrl.MV_OpenCamera())
{
OnBnClickedLoadCatchTemp();//读取模板
m_pHawkvisCtrl->MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore);
m_HawkvisCtrl.MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore);
m_nExpore = gCameraHawkvis->m_nCam1Expore;
//UpdateData(FALSE);
//OnBnClickedSetExpore();//设置曝光
}
m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
if (m_pHawkvisCtrl->MV_GetOneFrame())
{
m_pHawkvisCtrl->ZoomFitWindow();
}
/ *else
{
static bool bfirst = true;
if (bfirst)
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
if (m_HawkvisCtrl.MV_GetOneFrame())
{
AfxMessageBox("相机1连续采集失败!");//报错一次
bfirst = false;
m_HawkvisCtrl.ZoomFitWindow();
}
}* /
}
else
{
@ -504,49 +413,44 @@ void DlgHawkvisCamera::OnBnClickedToCam1()
{
bfirst = false;
AfxMessageBox("打开相机1失败!");//报错一次
}
}
m_DlgCurCamIndex = 0;
gCameraHawkvis->SetCamIndex(0);
((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE);
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);
gLogMgr->WriteDebugLog("Switch To Cam1");
}
catch (...)
{
AfxMessageBox("打开相机1 异常!");//报错一次
}*/
AfxMessageBox("切换至相机1发生异常!");
}
((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE);
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);
gLogMgr->WriteDebugLog("Switch To Cam1");
}
void DlgHawkvisCamera::OnBnClickedToCam2()
{
m_pHawkvisCtrl = &m_HawkvisCtrl2;
return;
{ //提前刷新索引,避免重复进入
m_DlgCurCamIndex = 1;
gCameraHawkvis->SetCamIndex(1);
/*
try
{
m_pHawkvisCtrl->MV_CloseCamera();
if (m_pHawkvisCtrl->MV_SelectAdapterByIdx(1))
m_HawkvisCtrl.MV_CloseCamera();
if (m_HawkvisCtrl.MV_SelectAdapterByIdx(1))
{
if (m_pHawkvisCtrl->MV_OpenCamera())
if (m_HawkvisCtrl.MV_OpenCamera())
{
OnBnClickedLoadCatchTemp();//读取模板
m_pHawkvisCtrl->MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore);
m_HawkvisCtrl.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore);
m_nExpore = gCameraHawkvis->m_nCam2Expore;
//UpdateData(FALSE);
//OnBnClickedSetExpore();//设置曝光
}
m_pHawkvisCtrl->SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
if (m_pHawkvisCtrl->MV_GetOneFrame())
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
if (m_HawkvisCtrl.MV_GetOneFrame())
{
m_pHawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.ZoomFitWindow();
}
}
}
else
{
static bool bfirst = true;
@ -556,30 +460,27 @@ void DlgHawkvisCamera::OnBnClickedToCam2()
bfirst = false;
}
}
m_DlgCurCamIndex = 1;
gCameraHawkvis->SetCamIndex(1);
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);
gLogMgr->WriteDebugLog("Switch To Cam2");
}
}
catch (...)
{
AfxMessageBox("打开相机2 异常!");//报错一次
}*/
AfxMessageBox("切换至相机2发生异常!");
}
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);
gLogMgr->WriteDebugLog("Switch To Cam2");
}
void DlgHawkvisCamera::OnBnClickedTestDefinition()
{
#ifdef __HAWKVIS_MINDVISION_CCD__
if (m_pHawkvisCtrl->MV_GetOneFrame())
if (m_HawkvisCtrl.MV_GetOneFrame())
#else
if (m_HawkvisCtrl.HV_GetOneFrame())
#endif
{
m_pHawkvisCtrl->ZoomFitWindow();
m_HawkvisCtrl.ZoomFitWindow();
gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK");
}
else
@ -592,7 +493,7 @@ void DlgHawkvisCamera::OnBnClickedTestDefinition()
CFileMgr fg;
CString path = fg.GetWorkPath();
m_pHawkvisCtrl->WriteImage((LPCTSTR)path, "PicForDefinition");
m_HawkvisCtrl.WriteImage((LPCTSTR)path, "PicForDefinition");
Sleep(50);
path += "\\PicForDefinition.bmp";
Mat imageSource = imread((LPCTSTR)path);
@ -604,7 +505,7 @@ void DlgHawkvisCamera::OnBnClickedTestDefinition()
Sobel(imageSource, imageSobel, CV_16U, 1, 1);
m_CurPic_Definition = mean(imageSobel)[0];
PostMessage(WM_UPDATE_FALSE);
}
}
bool DlgHawkvisCamera::bCurPicDefinitionOK()
{

@ -15,16 +15,14 @@ public:
DlgHawkvisCamera(CWnd* pParent = NULL); // 标准构造函数
virtual ~DlgHawkvisCamera();
virtual UINT GetIDD() { return DlgHawkvisCamera::IDD; };
virtual void Update();
void Fresh();
// 对话框数据
enum { IDD = IDD_CAMERA_DLG };
private:
CMyBttom m_ISP3000LogoBtn;//log 按钮,没什么用处
int m_nExpore;//曝光值0 ~ 2000000
CHawkvisctrlctrl1* m_pHawkvisCtrl;//霍克视觉的控件指针
CHawkvisctrlctrl1 m_HawkvisCtrl1;//霍克视觉的控件
CHawkvisctrlctrl1 m_HawkvisCtrl2;//霍克视觉的控件
CHawkvisctrlctrl1 m_HawkvisCtrl;//霍克视觉的控件
int m_DlgCurCamIndex=-1;
int m_ShapeModelID = -1;
@ -81,7 +79,6 @@ public:
float m_CurPic_Definition;
float m_CurTrackThreshold;
};
extern DlgHawkvisCamera *gDlgHawkvisCamera;

@ -30,7 +30,7 @@
#define WORK_TIME_DELAY1 200
#define WORK_TIMER2 2
#define WORK_TIME_DELAY2 50
#define WORK_TIME_DELAY2 150
IMPLEMENT_DYNAMIC(DlgPlatformCtrl, CDialogEx)

@ -7,7 +7,7 @@
#define WORK_TIMER1 1
#define WORK_TIME_DELAY1 20
#define WORK_TIME_DELAY1 200
IMPLEMENT_DYNAMIC(CDlgProgress, CDialogEx)

@ -79,6 +79,8 @@ bool bTrack2ProductFlg = false;//
bool bSaveLockFlg = false;
CDlgSW_XL_Flow::CDlgSW_XL_Flow(CWnd* pParent /*=NULL*/)
: m_Jig3PrtOft_x(0)
, m_Jig3PrtOft_y(0)
{
m_LaserSpeed =800;
m_OneObjMarkCnt = 1;//切割次数
@ -129,9 +131,11 @@ void CDlgSW_XL_Flow::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_CUT_CNT, m_OneObjMarkCnt);
DDX_Text(pDX, IDC_SPECIAL_CUT_CNT, m_SpecialOneObjMarkCnt);
DDX_Text(pDX, IDC_AREA_CUT_CNT, m_MarkAreaCutCount);
DDX_Text(pDX, IDC_CUT_OFFSET_X, m_ProductOffset.x);
DDX_Text(pDX, IDC_CUT_OFFSET_Y, m_ProductOffset.y);
DDX_Text(pDX, IDC_CUT_OFFSET_X, m_Jig1PrtOft_x);
DDX_Text(pDX, IDC_CUT_OFFSET_Y, m_Jig1PrtOft_y);
DDX_Control(pDX, IDC_BOOL_SEL_MARK2, m_SetMarkPosBtn);
DDX_Text(pDX, IDC_CUT_OFFSET_X2, m_Jig3PrtOft_x);
DDX_Text(pDX, IDC_CUT_OFFSET_Y2, m_Jig3PrtOft_y);
}
BOOL CDlgSW_XL_Flow::OnInitDialog()
@ -167,6 +171,26 @@ void CDlgSW_XL_Flow::OnTimer(UINT nIDEvent)
//SetTimer(UPDATE_INFO_TIMER,UPDATE_INFO_DELAY,NULL);
}
static bool bExe = true;
static int Times = 0;
if (gTrackWorkFlow1.IsTrackIdle()&&gTrackWorkFlow2.IsTrackIdle())
{
if (bExe)
{
Times++;
if (Times>300)
{
bExe = false;
Times = 0;
gTrackWorkFlow1.SendAutoStartFlg(false);
}
}
}
else
{
Times = 0;
bExe = true;
}
CDialog::OnTimer(nIDEvent);
}
@ -407,10 +431,15 @@ void CDlgSW_XL_Flow::OnBnClickedThrowEdgeBtn2()
}
void CDlgSW_XL_Flow::OnBnClickedUnloadBtn1()
{
if (gTrackWorkFlow1.GetCurTrackWorkStep()==_ETrack_Step_Unload)
gTrackWorkFlow1.KillCurWorkThread();
gProgram_SZ_XL->ManualOperation(_ETrackType_Track_1,_ETrack_Step_Throw_Edge_End);
}
void CDlgSW_XL_Flow::OnBnClickedUnloadBtn2()
{
if (gTrackWorkFlow2.GetCurTrackWorkStep() == _ETrack_Step_Unload)
gTrackWorkFlow2.KillCurWorkThread();
gProgram_SZ_XL->ManualOperation(_ETrackType_Track_2,_ETrack_Step_Throw_Edge_End);
}
void CDlgSW_XL_Flow::OnBnClickedTrack1ProductCarrierOpenClose()
@ -490,7 +519,23 @@ void CDlgSW_XL_Flow::UpdateCutPar()
m_OneObjMarkCnt = gCommonFlowMgr->m_OneObjMarkCnt;//切割次数
m_SpecialOneObjMarkCnt = gCommonFlowMgr->m_SpecialOneObjMarkCnt;//切割次数
m_MarkAreaCutCount = gCommonFlowMgr->GetAreaCycleCnt();//循环次数
m_ProductOffset = gCommonFlowMgr->m_ProductOffset;//针对产品的切割偏移
m_Jig1PrtOft_x = gCommonFlowMgr->m_Jig1PrtOffset.x;//针对产品的切割偏移
m_Jig1PrtOft_y = gCommonFlowMgr->m_Jig1PrtOffset.y;//针对产品的切割偏移
{
CString path;
gProgram_SZ_XL->GetDxfParFilePath("pjo", path);
CSmartArchive ar(path, false);
ar + m_Jig1PrtOft_x;
ar + m_Jig1PrtOft_y;
ar + m_Jig3PrtOft_x;
ar + m_Jig3PrtOft_y;
gCommonFlowMgr->m_Jig1PrtOffset.x = m_Jig1PrtOft_x;
gCommonFlowMgr->m_Jig1PrtOffset.y = m_Jig1PrtOft_y;
gCommonFlowMgr->m_Jig3PrtOffset.x= m_Jig3PrtOft_x;
gCommonFlowMgr->m_Jig3PrtOffset.y = m_Jig3PrtOft_y;
}
UpdateData(FALSE);
}
@ -506,12 +551,29 @@ void CDlgSW_XL_Flow::OnBnClickedSavePar()
gCommonFlowMgr->m_OneObjMarkCnt = m_OneObjMarkCnt;//切割次数
gCommonFlowMgr->m_SpecialOneObjMarkCnt = m_SpecialOneObjMarkCnt;//切割次数
gCommonFlowMgr->m_AreaCycleCnt = (m_MarkAreaCutCount);//区域循环次数
gCommonFlowMgr->m_ProductOffset = m_ProductOffset;//针对产品的切割偏移
gCommonFlowMgr->m_Jig1PrtOffset.x = m_Jig1PrtOft_x;//针对产品的切割偏移
gCommonFlowMgr->m_Jig1PrtOffset.y = m_Jig1PrtOft_y;//针对产品的切割偏移
gCommonFlowMgr->m_Jig3PrtOffset.x = m_Jig3PrtOft_x;//针对产品的切割偏移
gCommonFlowMgr->m_Jig3PrtOffset.y = m_Jig3PrtOft_y;//针对产品的切割偏移
{
CString path;
gProgram_SZ_XL->GetDxfParFilePath("pjo", path);
CSmartArchive ar(path, true);
ar + m_Jig1PrtOft_x;
ar + m_Jig1PrtOft_y;
ar + m_Jig3PrtOft_x;
ar + m_Jig3PrtOft_y;
}
//保存dxf 对应的切割参数
gProgram_SZ_XL->SaveCutPar();
//应用参数时服务端重新打开当前文件
gClientMgr->SendCmd_OpenFile(gProgramCutMgr->GetCurOpenFileFullName());
@ -538,6 +600,8 @@ void CDlgSW_XL_Flow::OpenWorkFile(bool bDxf)
//area移动到中心
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0,0));
GetCurViewPtr()->DoZoomFull();
}
void CDlgSW_XL_Flow::OnBnClickedOpenDxf()
@ -716,7 +780,8 @@ void CDlgSW_XL_Flow::OnBnClickedAdjustProductPos()
if (!gAuthorityMgr->CheckAuthority(_ADMIN,true))
return;
gProductMgr->SetProductCenterPt();
//gProductMgr->SetProductCenterPt();
gProductMgr->SetCamCoord();
//保存加工参数
gProgramCutMgr->SaveWorkParFile();
}

@ -64,8 +64,13 @@ private:
int m_MarkAreaCutCount;//区域循环切割次数
int m_OneObjMarkCnt;//切割次数
int m_SpecialOneObjMarkCnt;//特殊切割次数
Dbxy m_ProductOffset;//针对产品的切割偏移
//Dbxy m_ProductOffset;//针对产品的切割偏移
double m_Jig1PrtOft_x=0;//针对产品的切割偏移
double m_Jig1PrtOft_y=0;//针对产品的切割偏移
// 治具3产品偏移x
double m_Jig3PrtOft_x;
// 治具3产品偏移y
double m_Jig3PrtOft_y;
vector<CString> KnownFileNameVec;//已知的文件名集合
public:
afx_msg void OnBnClickedStartBtn1();
@ -106,4 +111,5 @@ public:
afx_msg void OnBnClickedAdjustProductPos();
afx_msg void OnBnClickedDisableServer();
CMyBttom m_SetMarkPosBtn;
};

@ -81,7 +81,7 @@ bool CEncryptionMgr::CheckLockState()
{
m_LeftDays = 0;//剩余的天数
}
else if(code>0 && code!=7)//其他错误(不要检查磁盘序列号)
else if((code>0) &&( code!=7)&&(!gLogMgr->IsDebuging())) //其他错误(不要检查磁盘序列号)
{
m_LeftDays = 0;//剩余的天数
CString s;

Binary file not shown.

Binary file not shown.

@ -213,7 +213,7 @@ int CLaiPuLaserApp::ExitInstance()
//TODO: 处理可能已添加的附加资源
AfxOleTerm(FALSE);
gModuleDeviceMgr.OnExitApp();
return CWinAppEx::ExitInstance();
return CWinAppEx::ExitInstance();
}
// CLaiPuLaserApp 消息处理程序

Binary file not shown.

@ -48,7 +48,7 @@
<IncludePath>./OpenCV/Include/opencv2;./OpenCV/Include;C:\Program Files (x86)\Advantech\Common Motion\Public;C:\Program Files (x86)\Advantech\Common Motion\Examples\General;C:\Program Files\Advantech\Common Motion\Public;C:\Program Files\Advantech\Common Motion\Examples\General;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\include;C:\Program Files\IVI Foundation\VISA\WinNT\include;$(IncludePath)</IncludePath>
<ReferencePath>C:\Program Files (x86)\IVI Foundation\VISA\WinNT\lib\bc;C:\Program Files\IVI Foundation\VISA\WinNT\lib\bc;$(ReferencePath)</ReferencePath>
<LibraryPath>D:\紫外切割机\OpenCVStaticlib;./OpenCV/staticlib;D:\Personal\Documents\Gemalto\SuperDog 2.4\Samples\Licensing\C\x64\msc\lib;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\lib\msc;C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc;$(LibraryPath)</LibraryPath>
<TargetName>$(ProjectName)2Cam</TargetName>
<TargetName>$(ProjectName)2Cam-Push</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>

@ -63,8 +63,8 @@ CMFCPropertyGridProperty *CLaser::CreatGridProperty()
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("激光坐标X");
Description = _T("激光中心相对原点的坐标X");
PropertyName = _T("激光相对坐标X");
Description = _T("激光中心相对CCD1中心的坐标X");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_LaserCoord.x, Description);
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
@ -80,8 +80,8 @@ CMFCPropertyGridProperty *CLaser::CreatGridProperty()
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("激光坐标Y");
Description = _T("激光中心相对原点的坐标Y");
PropertyName = _T("激光相对坐标Y");
Description = _T("激光中心相对CCD1的坐标Y");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_LaserCoord.y, Description);
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);

@ -1,6 +1,6 @@
#pragma once
#include "module.h"
#include "CameraHawkvis.h"
//¼¤¹â
class CLaser :public CModule
{
@ -12,7 +12,7 @@ public:
virtual void WriteWorkFileExt(vector<CLab> &LabVec);
virtual void ReadWorkFile(CLabVecRang &LabVecRang);
Dbxy GetCoord(){return m_LaserCoord;};
Dbxy GetCoord(){return m_LaserCoord+gCameraHawkvis->m_Coord;};
void SetCoord(Dbxy pt){m_LaserCoord = pt;};
int GetOpenDelay(){return m_OpenDelay;};
void SetOpenDelay(int n){m_OpenDelay = n;};

@ -6,9 +6,9 @@
#include "PropertieMgr.h"
#include "BitOperation.h"
#include "AuthorityMgr.h"
#include "WorkTime.h"
CLogMgr* gLogMgr = NULL;//日志管理对象
CLogMgr* gLogMgr = new CLogMgr;//日志管理对象
CLogMgr::CLogMgr(void)
{
@ -17,6 +17,14 @@ CLogMgr::CLogMgr(void)
m_DebugCmdDelay = 100;//调试指令延时时间
m_LogListMaxLine = 1000;//日志列表最大的行数,超过时清空
m_bWriteToLogList = true;//输出到日志列表
//创建记录文本日志的文件夹
CFileMgr fg;
fg.GetFullFilePath(PlcLogDir, "\\PlcLog");
if (!PathIsDirectory(PlcLogDir))
{
CreateDirectory(PlcLogDir,NULL);
}
}
CLogMgr::~CLogMgr(void)
{
@ -287,5 +295,24 @@ void CLogMgr::WriteDebugLogFile(CString str)
{
m_DebugLogFile<<str<<endl;
}
}
void CLogMgr::WritePlcTimeLog(CString str)
{
CWorkTime wm;
auto fileName=wm.GetCurDate("-");
auto path = PlcLogDir + "\\"+fileName + ".txt";
auto LogHead = wm.GetCurTime(":")+" >";
str = LogHead + str + "\n";
CStdioFile file;
if (file.Open(path,CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate))
{
file.SeekToEnd();
file.WriteString(str);
file.Close();
}
}
#endif

@ -53,6 +53,8 @@ public:
void WriteByte(BYTE bit);
void WriteDebugLogFile(CString str);
void SetbWriteDebugLog(bool b){m_bWriteDebugLog = b;};
void WritePlcTimeLog(CString str);//自动记录时间,输出到文本,日期命名
private:
#ifdef __DLG_PANE_CMD__
COutputWnd * m_pOutputCmd;//命令输出
@ -66,6 +68,9 @@ private:
bool m_bDebug;//是否正在调试
int m_DebugCmdDelay;//调试指令延时时间
CString PlcLogDir;//记录与PLC通信的文本文件 所在的文件夹
public:
Dbxy LastTargetCoord;
};
extern CLogMgr* gLogMgr;

@ -215,8 +215,8 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
m_PaneHawkvisCamera.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_PaneHawkvisCamera);
m_PaneCutDeviceCtrl.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_PaneCutDeviceCtrl);
//m_PaneCutDeviceCtrl.EnableDocking(CBRS_ALIGN_ANY);
//DockPane(&m_PaneCutDeviceCtrl);
m_PaneSW_XL_Flow.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_PaneSW_XL_Flow);
@ -391,14 +391,14 @@ BOOL CMainFrame::CreateDockingWindows()
}
m_PaneHawkvisCamera.EnableDocking(CBRS_ALIGN_ANY);
m_PaneCutDeviceCtrl.SetDlg(&m_DlgCutDeviceCtrl);
/* m_PaneCutDeviceCtrl.SetDlg(&m_DlgCutDeviceCtrl);
if (!m_PaneCutDeviceCtrl.Create(_T("设备控制"), this, CRect(0, 0, 100, 100), TRUE, m_DlgCutDeviceCtrl.GetIDD(),
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建Ctrl Btn/n");
return FALSE;
}
m_PaneCutDeviceCtrl.EnableDocking(CBRS_ALIGN_ANY);
m_PaneCutDeviceCtrl.EnableDocking(CBRS_ALIGN_ANY);*/
m_PaneSW_XL_Flow.SetDlg(&m_DlgSW_XL_Flow);
if (!m_PaneSW_XL_Flow.Create(_T("流程控制"), this, CRect(0, 0, 100, 100), TRUE, m_DlgSW_XL_Flow.GetIDD(),

@ -110,8 +110,8 @@ public: //
DlgHawkvisCamera m_DlgHawkvisCamera;
CPaneDialogTmp m_PaneHawkvisCamera;
DlgCutDeviceCtrl m_DlgCutDeviceCtrl;
CPaneDialogTmp m_PaneCutDeviceCtrl;
//DlgCutDeviceCtrl m_DlgCutDeviceCtrl;
//CPaneDialogTmp m_PaneCutDeviceCtrl;
CDlgSW_XL_Flow m_DlgSW_XL_Flow;

@ -145,9 +145,8 @@ void CMarkArea::SetBasePt(Dbxy pt)
//获取实际中心位置
Dbxy CMarkArea::GetRealBasePt()
{
if (m_RealBasePt.Equal(Dbxy(0, 0)))
/*if (m_RealBasePt.Equal(Dbxy(0, 0)))*/
m_RealBasePt = m_BasePt;
return m_RealBasePt;
}
//计算实际中心点

@ -47,7 +47,7 @@ CModuleDeviceMgr::~CModuleDeviceMgr(void)
void CModuleDeviceMgr::CreatAllModule()
{
//日志管理模块
gLogMgr = new CLogMgr;
//gLogMgr = new CLogMgr;
m_ModuleVec.push_back((CModule*)gLogMgr);
//权限管理
m_ModuleVec.push_back((CModule*)gAuthorityMgr);

@ -696,6 +696,10 @@ void MotionCard_PCI1245::ResetAllAsixCoord()
//从运动控制卡读取平台当前的坐标
Dbxy MotionCard_PCI1245::GetPlatformXYCoord()
{
if (gLogMgr->IsDebuging())
{
return gLogMgr->LastTargetCoord;
}
Dbxy Coord;
Dbxy OnePulseDis = gPlatformXY->GetMotorXYOnePulseDis();
//获取控制卡返回的脉冲位置
@ -780,7 +784,11 @@ Dbxy MotionCard_PCI1245::MovePlatformXY(Dbxy Coord)
}
gLogMgr->WriteDebugLog("Fuc---->MovePlatformXY 1245L");
CString strTemp;
strTemp.Format("Coord x : %f,Coord y : %f",Coord.y);
strTemp.Format("***[Move To]===>Coord x : %f,Coord y : %f", Coord.x,Coord.y);
if (gLogMgr->IsDebuging())
{
gLogMgr->LastTargetCoord = Coord;
}
gLogMgr->WriteDebugLog(strTemp);
//从运动控制卡读取平台当前的坐标---------------
return GetPlatformXYCoord();
@ -1202,7 +1210,7 @@ bool MotionCard_PCI1245::CheckMotorActCoord(CMotor &Motor)
if(Motor.IsbRevActCoordDir())
ActualCoord *=(-1);
double ActPluseErrCnt = CmdCoord-ActualCoord;
double ActPluseErrCnt = abs(CmdCoord)-abs(ActualCoord);
if(fabs(ActPluseErrCnt)>m_MaxActCoordErr)
{
return false;

@ -7,11 +7,12 @@ public:
CPaneDevicePar(void);
~CPaneDevicePar(void);
void SetComboSelNull();
afx_msg void OnCbnSelPropertyChange();
protected:
virtual void IniObjectCombo();
virtual void RemoveAllProperty();
afx_msg LRESULT OnPropertyChanged(WPARAM,LPARAM);
afx_msg void OnCbnSelPropertyChange();
DECLARE_MESSAGE_MAP()
};

@ -202,33 +202,33 @@ void CProduct::CalAffinePars()
CString logstr;
Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt();
//Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt();
/*Dbxy T2oft = Dbxy(0, 0);
if (gCameraHawkvis->GetCamIndex()==1&&(!m_bNewAddProduct))//轨道2有额外偏移 (非新增那片)
T2oft = gProgram_SZ_XL->GetTrack2Offset(); */
o_TheoryMarkPt1 = m_TheoryMarkPt1-DataCenter;
//o_TheoryMarkPt1 = m_TheoryMarkPt1-DataCenter;
logstr.Format("TheoryMarkPt1 Coord(%f,%f)", o_TheoryMarkPt1.x, o_TheoryMarkPt1.y);
gLogMgr->WriteDebugLog(logstr);
o_TheoryMarkPt2 = m_TheoryMarkPt2 - DataCenter;
//o_TheoryMarkPt2 = m_TheoryMarkPt2 - DataCenter;
logstr.Format("TheoryMarkPt2 Coord(%f,%f)", o_TheoryMarkPt2.x, o_TheoryMarkPt2.y);
gLogMgr->WriteDebugLog(logstr);
o_TheoryMarkPt3 = m_TheoryMarkPt3 - DataCenter;
//o_TheoryMarkPt3 = m_TheoryMarkPt3 - DataCenter;
logstr.Format("TheoryMarkPt3 Coord(%f,%f)", o_TheoryMarkPt3.x, o_TheoryMarkPt3.y);
gLogMgr->WriteDebugLog(logstr);
o_RealMarkPt1 = m_RealMarkPt1 - DataCenter;
o_RealMarkPt1 = m_RealMarkPt1 - m_BasePt;
logstr.Format("RealMarkPt1 Coord(%f,%f)", o_RealMarkPt1.x, o_RealMarkPt1.y);
gLogMgr->WriteDebugLog(logstr);
o_RealMarkPt2 = m_RealMarkPt2 - DataCenter;
o_RealMarkPt2 = m_RealMarkPt2 - m_BasePt;
logstr.Format("RealMarkPt2 Coord(%f,%f)", o_RealMarkPt2.x, o_RealMarkPt2.y);
gLogMgr->WriteDebugLog(logstr);
o_RealMarkPt3 = m_RealMarkPt3 - DataCenter;
o_RealMarkPt3 = m_RealMarkPt3 - m_BasePt;
logstr.Format("RealMarkPt3 Coord(%f,%f)", o_RealMarkPt3.x, o_RealMarkPt3.y);
gLogMgr->WriteDebugLog(logstr);
@ -507,45 +507,44 @@ void CProduct::TheoryDataToRealData(vector<Dbxy> &vec, Dbxy &AreaCenter, Dbxy Cu
{
vector<Dbxy>::iterator iter = vec.begin();
vector<Dbxy>::iterator iter_end = vec.end();
Dbxy DataCenter = gObjComponentMgr->GetAllObjCenterPt();
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 y = (*iter).y;
//计算变换
double retx = m_p00*x + m_p01*y + m_p02;
double rety = m_p10*x + m_p11*y + m_p12;
//强制的微调旋转量
/*double retx2 = m_rp00*retx + m_rp01*rety + m_rp02;
double rety2 = m_rp10*retx + m_rp11*rety + m_rp12;*/
(*iter).x = retx;//2;
(*iter).y = rety;//2;
(*iter).x = retx;
(*iter).y = rety;
auto temp = AreaCenter;//-DataCenter;//以区域中心为原点
(*iter) = (*iter) - temp;
//(*iter) = (*iter) - AreaCenter;
//振镜缩放
Dbxy Scale = gProgram_SZ_XL->GetJig1Scale();
if (gCameraHawkvis->GetCamIndex() == 1)
if (!m_bManualMark)
{
Scale = gProgram_SZ_XL->GetJig3Scale();
Dbxy Scale = gProgram_SZ_XL->GetJig1Scale();
if (gCameraHawkvis->GetCamIndex() == 1)
{
Scale = gProgram_SZ_XL->GetJig3Scale();
}
(*iter).x *= Scale.x;
(*iter).y *= Scale.y;
//区域内其他的偏移调整
(*iter).x += CutAdjust.x;
(*iter).y += CutAdjust.y;
}
auto DataRange = (gCommonFlowMgr->m_CalibrationRange)/2;
if ( (abs(iter->x)>DataRange) || (abs(iter->y)>DataRange) )
{
CExceptionMsg Msg;
Msg.SetMsg(CString("标刻数据错数!超出校准范围!"));
throw Msg;//抛出异常
//AfxMessageBox("标刻数据错数!超出标刻范围!");
}
(*iter).x *= Scale.x;
(*iter).y *= Scale.y;
//区域内其他的偏移调整
(*iter).x +=CutAdjust.x;
(*iter).y += CutAdjust.y;
}
}

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

@ -42,7 +42,7 @@ CProductMgr::~CProductMgr(void)
void CProductMgr::Ini()
{
ResetProductVec(m_UseProductCnt);
GetFrame()->m_DlgCutDeviceCtrl.Update();
// GetFrame()->m_DlgCutDeviceCtrl.Update();
}
void CProductMgr::ResetProductVec(int cnt)
{
@ -791,4 +791,69 @@ void CProductMgr::SetProductCenterPt()
MsgBox.Show("位置调整完成!");
}
//通过设置product的中心点来控制默认抓取偏移
//mark 1移动到CCD 中心,然后点调整
void CProductMgr::SetCamCoord()
{
Dbxy MarkPt1;
Dbxy MarkPt2;
if (gObjComponentMgr->GetTwoMarkPt(MarkPt1, MarkPt2) == false)
{
CMsgBox MsgBox;
MsgBox.Show("没有定位点1!");
return;
}
//当前实际的坐标值
Dbxy CurPlatCoord = gPlatformXY->GetCoord();
CProduct &Product = m_ProductVec[0];
bool bETrackType_Track_2 = (CurPlatCoord.y > 200);//在X2 轴上调整
//将数据移动到当前product 的基准点上
//Dbxy CurBasePt = Product.GetProductBasePt();
if (bETrackType_Track_2)
{
Dbxy Track2Offset = gProgram_SZ_XL->GetTrack2Offset();
CurPlatCoord.x -= Track2Offset.x;
CurPlatCoord.y -= Track2Offset.y;
}
//gProgramCutMgr->MoveObjData(CurBasePt);
CCamera &Camera = *gCameraHawkvis;
Dbxy CameraPt;// = Camera.GetCoord();
CameraPt.x = CurPlatCoord.x + MarkPt1.x;
CameraPt.y =MarkPt1.y- CurPlatCoord.y;
Camera.SetCoord(CameraPt);
/*Dbxy PlatCoord;//MarkPt1 移到Camera 的理论坐标值
PlatCoord.x = CameraPt.x - MarkPt1.x;
PlatCoord.y = MarkPt1.y - CameraPt.y;
Dbxy Offset;//移动偏移量
Offset.x = PlatCoord.x - CurPlatCoord.x;
Offset.y = CurPlatCoord.y - PlatCoord.y;
CurBasePt.x += Offset.x;
CurBasePt.y += Offset.y;
if (bETrackType_Track_2)//按轨道1 来设置
{
Dbxy Track2Offset = gProgram_SZ_XL->GetTrack2Offset();
CurBasePt.x -= Track2Offset.x;
CurBasePt.y -= Track2Offset.y;
}
Product.SetBasePt(CurBasePt);*/
gDevicePropertieMgr.SaveAllPropertie();
CMsgBox MsgBox;
MsgBox.Show("位置调整完成!");
}
#endif

@ -47,6 +47,7 @@ public:
void SetDefualtRect(DbRect r){m_DefualtRect = r;};
Dbxy GetDefualtBasePt();
void SetProductCenterPt();
void SetCamCoord();
double GetMaxMarkDisDiff(){return m_MaxMarkDisDiff;};
double GetAdjustAngle() { return m_AngleAdjust; };//»ñÈ¡µ÷Õû½Ç¶È
private:

@ -34,7 +34,7 @@ CProgramCutMgr::~CProgramCutMgr(void)
}
void CProgramCutMgr::Ini()
{
GetFrame()->m_DlgCutDeviceCtrl.SetPar();
// GetFrame()->m_DlgCutDeviceCtrl.SetPar();
}
#if 1
//打开加工文件(bOpenDxf 为false 的时候可以不重新打开dxf)

@ -463,7 +463,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("轨道2抓取偏移X");
PropertyName = _T("轨道2位置偏移X");
Description = _T("轨道2相对轨道1 的偏移量X");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Track2Offset.x, Description);
//p->AllowEdit(FALSE);//不可修改
@ -482,7 +482,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("轨道2抓取偏移Y");
PropertyName = _T("轨道2位置偏移Y");
Description = _T("轨道2相对轨道1 的偏移量Y");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_Track2Offset.y, Description);
//p->AllowEdit(FALSE);//不可修改
@ -503,7 +503,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("治具2抓取偏移X");
PropertyName = _T("治具2位置偏移X");
Description = _T("轨道1上治具2相对治具1位置偏移量X");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_NPCatchOffset1.x, Description);
//p->AllowEdit(FALSE);//不可修改
@ -522,7 +522,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("治具2抓取偏移Y");
PropertyName = _T("治具2位置偏移Y");
Description = _T("轨道1上治具2相对治具1位置偏移量Y");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_NPCatchOffset1.y, Description);
//p->AllowEdit(FALSE);//不可修改
@ -543,7 +543,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("治具4抓取偏移X");
PropertyName = _T("治具4位置偏移X");
Description = _T("轨道2上治具4相对治具3位置偏移量X");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_NPCatchOffset2.x, Description);
//p->AllowEdit(FALSE);//不可修改
@ -562,7 +562,7 @@ CMFCPropertyGridProperty *CProgram_SZ_XL::CreatGridProperty()
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("治具4抓取偏移Y");
PropertyName = _T("治具4位置偏移Y");
Description = _T("轨道2上治具4相对治具3位置偏移量Y");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_NPCatchOffset2.y, Description);
//p->AllowEdit(FALSE);//不可修改
@ -1053,7 +1053,7 @@ bool CProgram_SZ_XL::IsbAutoWorking()
void CProgram_SZ_XL::StartAutoWork(ETrackType TrackType)
{
#ifdef _USE_LAIPU_SUPERDOG
if (gEncryptionMgr->CheckLockState() == false)
if (gEncryptionMgr->CheckLockState() == false&&(!gLogMgr->IsDebuging()))
{
return;
}
@ -1345,7 +1345,7 @@ void CProgram_SZ_XL::ReadLoadPlcMsgExt()
//分析收到上料机的PLC 消息
void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
{
CString LogStr1, LogStr2;
CString LogStr="未解析的指令!";
bool ret = false;
if (gTrackWorkFlow1.GetCurTrackWorkStep() == _ETrack_Step_Unload)//只有unload 中收到信号才算
@ -1364,27 +1364,27 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
}
LogStr1 = "轨道1 下料完成";
LogStr = "轨道1 下料完成";
}
if (RecvStr.Find("$(KL1E)#", 0) != -1)//轨道1 下料错误
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
LogStr1 = "轨道1 下料错误";
LogStr = "轨道1 下料错误";
}
if (RecvStr.Find("$(KL7D1)#", 0) != -1)//轨道1拉出载具完成
{
gTrackWorkFlow1.m_bPullJigOut = true;
LogStr1 = "轨道1载具拉出";
LogStr = "轨道1载具拉出";
}
if (RecvStr.Find("$(KL1D9)#", 0) != -1)//轨道1可推出
if (RecvStr.Find("$(KL9D1)#", 0) != -1)//轨道1可推出
{
gTrackWorkFlow1.m_bPushJigReady = true;
LogStr1 = "轨道1载具可推出";
LogStr = "轨道1载具可推出";
}
if (RecvStr.Find("$(KL9E)#", 0) != -1)//轨道1不可推出
{
gTrackWorkFlow1.m_bPushJigReady = false;
LogStr1 = "轨道1载具不可推出--from下料机";
LogStr = "轨道1载具不可推出--from下料机";
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
}
ret = true;
@ -1406,28 +1406,28 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_End);
}
LogStr1 = "轨道2 下料完成";
LogStr = "轨道2 下料完成";
}
if (RecvStr.Find("$(KL2E)#", 0) != -1)//轨道2 下料错误
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
LogStr1 = "轨道2 下料错误";
LogStr = "轨道2 下料错误";
}
if (RecvStr.Find("$(KL8D1)#", 0) != -1)//轨道1拉出载具完成
{
//gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_PulledOut);
gTrackWorkFlow2.m_bPullJigOut = true;
LogStr1 = "轨道2载具拉出";
LogStr = "轨道2载具拉出";
}
if (RecvStr.Find("$(KL1D10)#", 0) != -1)//轨道1拉出载具完成
if (RecvStr.Find("$(KL10D1)#", 0) != -1)//轨道1拉出载具完成
{
gTrackWorkFlow2.m_bPushJigReady = true;
LogStr1 = "轨道2载具可推出";
LogStr = "轨道2载具可推出";
}
if (RecvStr.Find("$(KL10E)#", 0) != -1)//轨道1拉出载具完成
{
gTrackWorkFlow2.m_bPushJigReady = false;
LogStr1 = "轨道2载具不可推出--from下料机";
LogStr = "轨道2载具不可推出--from下料机";
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Unload_Err);
}
ret = true;
@ -1440,12 +1440,12 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
if (RecvStr.Find("$(KL3D1)#", 0) != -1)//轨道1 上料完成
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Load_End);
LogStr1 = "轨道1 上料完成";
LogStr = "轨道1 上料完成";
}
if (RecvStr.Find("$(KL3E)#", 0) != -1)//轨道1 上料错误
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Load_Err);
LogStr1 = "轨道1 上料错误";
LogStr = "轨道1 上料错误";
}
ret = true;
}
@ -1455,12 +1455,12 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
if (RecvStr.Find("$(KL4D1)#", 0) != -1)//轨道2 上料完成
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Load_End);
LogStr1 = "轨道2 上料完成";
LogStr = "轨道2 上料完成";
}
if (RecvStr.Find("$(KL4E)#", 0) != -1)//轨道2 上料完成
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Load_Err);
LogStr1 = "轨道2 上料错误";
LogStr = "轨道2 上料错误";
}
ret = true;
}
@ -1471,13 +1471,13 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
if (RecvStr.Find("$(KL5D1)#", 0) != -1)//轨道1 去边框完成(01000000)
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_End);
LogStr1 = "轨道1 去边框完成";
LogStr = "轨道1 去边框完成";
}
if (RecvStr.Find("$(KL5E)#", 0) != -1)//轨道1 去边框完成(01000000)
{
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_Err);
LogStr1 = "轨道1 去边框错误";
LogStr = "轨道1 去边框错误";
}
ret = true;
}
@ -1487,12 +1487,12 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
if (RecvStr.Find("$(KL6D1)#", 0) != -1)//轨道2 去边框完成(10000000)
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_End);
LogStr1 = "轨道2 去边框完成";
LogStr = "轨道2 去边框完成";
}
if (RecvStr.Find("$(KL6E)#", 0) != -1)//轨道2 去边框完成(10000000)
{
gTrackWorkFlow2.SetCurTrackWorkStep(_ETrack_Step_Throw_Edge_Err);
LogStr1 = "轨道2 去边框错误";
LogStr = "轨道2 去边框错误";
}
ret = true;
}
@ -1545,18 +1545,17 @@ void CProgram_SZ_XL::AnalyzeRecvLoadMsg(CString &RecvStr)
ret = true;
}*/
if (ret)
//if (ret)
{
gLogMgr->WriteDebugLog(RecvStr);
if (LogStr1 != "")
{
gLogMgr->WriteDebugLog(LogStr1);
}
if (LogStr2 != "")
{
gLogMgr->WriteDebugLog(LogStr2);
}
//gLogMgr->WriteDebugLog("ReadLoadDeviceMsg: "+RecvStr);
CString str = "ReadLoadDeviceMsg: " + RecvStr+"==> ";
gLogMgr->WriteDebugLog(str+LogStr);
}
/*else
{
CString str = "ReadLoadDeviceMsg: " + RecvStr + "==> 未能解析的指令!";
gLogMgr->WriteDebugLog(str );
}*/
}
#include <mutex>
@ -1652,13 +1651,13 @@ bool CProgram_SZ_XL::GetLoadCmdStr(ETrackType TrackType, ETrackWorkStep WorkStep
if (_ETrackType_Track_1 == TrackType)
{
StrOn = "$(KL3)#";
StrOff = "@00WD0507000051*";
//StrOff = "@00WD0507000051*";
LogStr = "轨道1 上料请求";
}
else
{
StrOn = "$(KL4)#";
StrOff = "@00WD050800005E*";
//StrOff = "@00WD050800005E*";
LogStr = "轨道2 上料请求";
}
Ret = true;
@ -1668,13 +1667,13 @@ bool CProgram_SZ_XL::GetLoadCmdStr(ETrackType TrackType, ETrackWorkStep WorkStep
if (_ETrackType_Track_1 == TrackType)
{
StrOn = "$(KL5)#";
StrOff = "@00WD050900005F*";
//StrOff = "@00WD050900005F*";
LogStr = "轨道1去边框请求";
}
else
{
StrOn = "$(KL6)#";
StrOff = "@00WD0510000057*";
//StrOff = "@00WD0510000057*";
LogStr = "轨道2去边框请求";
}
Ret = true;
@ -1684,13 +1683,13 @@ bool CProgram_SZ_XL::GetLoadCmdStr(ETrackType TrackType, ETrackWorkStep WorkStep
if (_ETrackType_Track_1 == TrackType)
{
StrOn = "$(KL1)#";
StrOff = "@00WD050900005F*";
//StrOff = "@00WD050900005F*";
LogStr = "轨道1下料请求";
}
else
{
StrOn = "$(KL2)#";
StrOff = "@00WD0510000057*";
//StrOff = "@00WD0510000057*";
LogStr = "轨道2下料请求";
}
Ret = true;
@ -1700,21 +1699,39 @@ bool CProgram_SZ_XL::GetLoadCmdStr(ETrackType TrackType, ETrackWorkStep WorkStep
if (_ETrackType_Track_1 == TrackType)
{
StrOn = "$(KL7)#";
StrOff = "@00WD050900005F*";
//StrOff = "@00WD050900005F*";
LogStr = "轨道1可送回治具";
}
else
{
StrOn = "$(KL8)#";
StrOff = "@00WD0510000057*";
//StrOff = "@00WD0510000057*";
LogStr = "轨道2可送回治具";
}
Ret = true;
}
else if (WorkStep == _ETrack_Step_PushOut_Finished)//等待送回载具
{
if (_ETrackType_Track_1 == TrackType)
{
StrOn = "$(KL9)#";
//StrOff = "@00WD050900005F*";
LogStr = "通知下料机:轨道1推出治具完成";
}
else
{
StrOn = "$(KL10)#";
//StrOff = "@00WD0510000057*";
LogStr = "通知下料机:轨道2推出治具完成";
}
Ret = true;
gLogMgr->WritePlcTimeLog(LogStr);
}
if (Ret)
{
// gLogMgr->WriteDebugLog("Str1 = "+StrOn);
//gLogMgr->WriteDebugLog("Str2 = "+StrOff);
LogStr = "SendLoadDeviceMsg: " + StrOn + "==>" + LogStr;
gLogMgr->WriteDebugLog(LogStr);
}
return Ret;
@ -1753,8 +1770,9 @@ bool CProgram_SZ_XL::SendMsgToLoadDevice(ETrackType TrackType, ETrackWorkStep Wo
{
char Buf[BUF_LEN];
int len = CreatBuf(Buf, StrOn);
m_LoadDeviceCOM.ClearCache();
m_LoadDeviceCOM.WriteBuf(Buf, len);
gLogMgr->WriteDebugLog("SendMsgToLoadDevice: "+StrOn);
//gLogMgr->WriteDebugLog("SendMsgToLoadDevice: "+StrOn);
/* Sleep(100);
m_LoadDeviceCOM.WriteBuf(Buf,len);//再发一次
Sleep(m_LoadCmdDelay);//等待plc 检测到上升沿的时间
@ -1771,9 +1789,10 @@ bool CProgram_SZ_XL::SendMsgToLoadDevice(ETrackType TrackType, ETrackWorkStep Wo
return Ret;
}
//发送消息并检查反馈(发送SendMsg 并检查反馈信号是否为RevMsg)
/*
bool CProgram_SZ_XL::SendMsgToLoadPlc(CString &SendMsg, CString &RevMsg)
{
return true;
}
}*/
#endif

@ -52,8 +52,9 @@ public:
Dbxy GetNPOffsetT1() { return m_NPCatchOffset1; }; //获取轨道1,新加片位置偏移
Dbxy GetNPOffsetT2() { return m_NPCatchOffset2; }; //获取轨道2,新加片位置偏移
private:
bool GetDxfParFilePath(CString Suffix,CString &FilePath);
private:
void ReadLoadPlcMsgExt();
void InitLoadDeviceCom();
void ResetLoadUnloadSignal();
@ -62,7 +63,6 @@ private:
void AnalyzeRecvLoadMsg(CString &RecvStr);
bool CompareBuf(char *Buf,CString str);
int CreatBuf(char *Buf,CString str);
bool SendMsgToLoadPlc(CString &SendMsg,CString &RevMsg);
bool GetLoadCmdStr(ETrackType TrackType,ETrackWorkStep WorkStep,CString &StrOn,CString &StrOnRev,CString &StrOff,CString &StrOffRev);
public:
CString m_ServerIP="127.0.0.1";//副机IP
@ -109,8 +109,8 @@ private:
Dbxy m_Jig1Scale=Dbxy(1,1); //治具1自定义比率(振镜)
Dbxy m_Jig3Scale = Dbxy(1, 1);//治具3自定义比率(振镜)
Dbxy m_Jig1MarkOffset;//治具1的加工振镜偏移
Dbxy m_Jig3MarkOffset;//治具3的加工振镜偏移
Dbxy m_Jig1MarkOffset;//治具1的加工振镜偏移(属性页调整,应对硬件偏移)
Dbxy m_Jig3MarkOffset;//治具3的加工振镜偏移(属性页调整,应对硬件偏移)
double m_Track1DangerCoordStart;//轨道1 的危险范围start
double m_Track1DangerCoordEnd;//轨道1 的危险范围end

@ -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()
{

@ -27,6 +27,7 @@ enum ETrackWorkStep
_ETrack_Step_Unload,//下料中20
_ETrack_Step_PulledOut,//等待拉走治具
_ETrack_Step_WaitBack,//等待送回空治具
_ETrack_Step_PushOut_Finished,//等待送回空治具
_ETrack_Step_Unload_End,//下料完成21
_ETrack_Step_Unload_Err,//下料错误22
};
@ -89,6 +90,8 @@ public:
void SetbCircleStop(bool b){m_bCircleStop = b;};
bool GetbCircleStop() { return m_bCircleStop ; };
BOOL m_bCarrierOpen = true;//当前气缸是否松开
bool IsTrackIdle();//是否轨道空闲中
void KillCurWorkThread();
private:
void Load();
void MoveToWaitPos();
@ -100,6 +103,7 @@ private:
void ThrowEdge();
void UnLoad();
void CatchMark();
void CatchMarkNewly();
void ChangePlatXYGroupIdx();
CString GetSendPlcMsgStr(ETrackPlcCmd PlcCmd);
void WriteRecordTimesToFile();
@ -122,7 +126,7 @@ private:
bool m_bLoadProduct;//轨道上是否load 了产品
int m_CutProductCnt;//切割产品的数量
bool m_bCircleStop;//当前循环后停止
CWinThread * m_pthread=NULL;
public:
atomic_bool m_bPushJigOut = false;//推出指令发出后,是否推出了载具
atomic_bool m_bPullJigOut = false;//下料指令发出后,是否拉走了载具
@ -132,3 +136,4 @@ public:
extern CTrackWorkFlow gTrackWorkFlow1;//轨道1 的流程管理
extern CTrackWorkFlow gTrackWorkFlow2;//轨道2 的流程管理
extern ETrackType gCurLockTrackType;

@ -11,6 +11,7 @@ public:
CPropertie();
~CPropertie();
void SetpVal(void *pVal){m_pVal = pVal;};
void * GetpVal() { return m_pVal; };
void SetType(PROPERTIE_TYPE Type){m_Type = Type;};
void SetpModule(CModule *pModule){m_pModule = pModule;};
void SetName(CString &Name){m_Name = Name;};

@ -1,7 +1,7 @@
#include "StdAfx.h"
#include "PropertieMgr.h"
#include "Propertie.h"
#include "GlobalFunction.h"
CPropertieMgr gDevicePropertieMgr;//设备属性管理
CPropertieMgr gDrawPropertieMgr;//绘制属性管理
@ -79,3 +79,54 @@ void CPropertieMgr::SaveAllPropertie()
}
}
}
bool CPropertieMgr::ChangePropertieByName(CString name, _variant_t newVal)
{
auto iter = m_PropertieValMap.begin();
auto iter_end = m_PropertieValMap.end();
for (;iter != iter_end;iter++)
{
if ((iter->first)->GetName() == name)
{
iter->second->PropertyChangeVal(newVal);
gDevicePropertieMgr.UpdateDevicePropertyPage();
return true;
}
}
return false;
}
bool CPropertieMgr::ChangePropertieByVal(void * pVal, _variant_t newVal)
{
auto iter = m_AllPropertieVec.begin();
auto iter_end = m_AllPropertieVec.end();
for (;iter != iter_end;iter++)
{
if ((*iter)->GetpVal() == pVal)
{
(*iter)->PropertyChangeVal(newVal);
gDevicePropertieMgr.UpdateDevicePropertyPage();
return true;
}
}
return false;
}
void CPropertieMgr::UpdateDevicePropertyPage()
{
GetFrame()->m_PaneDevicePar.OnCbnSelPropertyChange();
}
/*
CPropertie * CPropertieMgr::GetPropertie(void * pVal)
{
auto iter = m_AllPropertieVec.begin();
auto iter_end = m_AllPropertieVec.end();
for (;iter != iter_end;iter++)
{
if ((*iter)->GetpVal() == pVal)
{
return *iter;
}
}
return NULL;
}*/

@ -14,6 +14,12 @@ public:
void DelAllPropertie();
void SaveAllPropertie();
void SetSaveAllPropertie(bool b){m_bSaveAllPropertie = b;};
bool ChangePropertieByName(CString name, _variant_t newVal); //根据在属性列表中的名 ,获取属性
bool ChangePropertieByVal(void* pVal, _variant_t newVal); //根据变量地址,修改其数据并刷新到属性表
void UpdateDevicePropertyPage();
private:
void DelAllPropertieVec();
private:

@ -3,6 +3,7 @@
#include "ExceptionMsg.h"
#include "Program_SZ_XL_TrackWorkFlow.h"
#include "CommonFlowMgr.h"
#include "CameraHawkvis.h"
CWorkCmdCameraCatch::CWorkCmdCameraCatch(CCamera &Camera)
:m_Camera(Camera)
{
@ -35,12 +36,12 @@ bool CWorkCmdCameraCatch::Excute()
//设置实际定位点的值
if(m_pProduct != NULL)
{
if (m_pProduct->IsbNewAddProduct())
/*if (m_pProduct->IsbNewAddProduct())
{
Dbxy NPoffset = gCommonFlowMgr->GetNPOffset();
pt.x -= NPoffset.x;
pt.y -= NPoffset.y;
}
}*/
if(m_bCatchMark3)//抓取的是mark3
{
m_pProduct->SetRealMark3Pt(pt);
@ -53,7 +54,8 @@ bool CWorkCmdCameraCatch::Excute()
//顺便保存在容器中
if(m_pResultVec != NULL)
{
m_pResultVec->push_back(pt);
auto CamCoord = gCameraHawkvis->m_Coord;
m_pResultVec->push_back(pt- CamCoord);
}
return true;
}

@ -202,7 +202,7 @@ void CWorkCmdInvoker::ExcuteAllCmdExt()
gProgressMgr.SetCurProgress(static_cast<int>(k),size);
#endif
//设置时间
GetFrame()->m_DlgCutDeviceCtrl.Update();
//GetFrame()->m_DlgCutDeviceCtrl.Update();
}
catch(CExceptionMsg &Msg)
{

@ -1,6 +1,6 @@
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装
// 注意: 不要修改此文件的内容。 如果此类由
// 注意: 不要修改此文件的内容。如果此类由
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。

@ -1,12 +1,12 @@
#pragma once
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装
// 计算机生成了由 Microsoft Visual C++ 创建的 IDispatch 包装
// 注意: 不要修改此文件的内容。 如果此类由
// 注意: 不要修改此文件的内容。如果此类由
// Microsoft Visual C++ 重新生成,您的修改将被覆盖。
/////////////////////////////////////////////////////////////////////////////
// CHawkvisctrlctrl1 包装
// CHawkvisctrlctrl1 包装
class CHawkvisctrlctrl1 : public CWnd
{
@ -247,6 +247,44 @@ public:
InvokeHelper(0x42, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, in_center_x, in_center_y, in_radius, interval, startAngle, endAngle, measurePosCount, fit_position, sigma, threshold, riowidth, out_center_x, out_enter_y, out_radius);
return result;
}
BOOL HV_GetOneFrame()
{
BOOL result;
InvokeHelper(0x43, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL HV_GetContinueFrame()
{
BOOL result;
InvokeHelper(0x44, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL HV_OpenCamera()
{
BOOL result;
InvokeHelper(0x45, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL HV_CloseCamera()
{
BOOL result;
InvokeHelper(0x46, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL HV_SetCameraExpTime(long nExpTime)
{
BOOL result;
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x47, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nExpTime);
return result;
}
BOOL HV_GetCameraExpTimeRange(long * pnMax, long * pnMin)
{
BOOL result;
static BYTE parms[] = VTS_PI4 VTS_PI4 ;
InvokeHelper(0x48, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, pnMax, pnMin);
return result;
}
BOOL CrossLineLine(long l1_point1_x, long l1_point1_y, long l1_point2_x, long l1_point2_y, long l2_point1_x, long l2_point1_y, long l2_point2_x, long l2_point2_y, double * cross_x, double * cross_y)
{
BOOL result;
@ -261,11 +299,11 @@ public:
InvokeHelper(0x4a, DISPATCH_METHOD, VT_UI4, (void*)&result, parms, start_x, start_y, end_x, end_y, nLineColor);
return result;
}
BOOL DisplayCross(long CenterX, long CenterY, long Thickness, long Length, long LineColor, BOOL bFill, long nFillColor)
BOOL DisplayCross(long centre_x, long centre_y, long thickness, long lenght, long nLineColor, BOOL bFill, long nFillColor)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_BOOL VTS_I4 ;
InvokeHelper(0x4b, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, CenterX, CenterY, Thickness, Length, LineColor, bFill, nFillColor);
InvokeHelper(0x4b, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, centre_x, centre_y, thickness, lenght, nLineColor, bFill, nFillColor);
return result;
}
BOOL InvalidateAndUpdateControl()
@ -405,6 +443,34 @@ public:
InvokeHelper(0x60, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, elem_width, elem_height, modulus);
return result;
}
BOOL HV_EnumNetworkAdapters(long * adaptersCount)
{
BOOL result;
static BYTE parms[] = VTS_PI4 ;
InvokeHelper(0x61, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, adaptersCount);
return result;
}
BOOL HV_QueryDevDescribeByIdx(long adapterIdx, BSTR * describe)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_PBSTR ;
InvokeHelper(0x62, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, adapterIdx, describe);
return result;
}
BOOL HV_SelectAdapter(LPCTSTR describe)
{
BOOL result;
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x63, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, describe);
return result;
}
BOOL HV_SetPacketSize(long nPacketSize)
{
BOOL result;
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x64, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nPacketSize);
return result;
}
void RotateLeft()
{
InvokeHelper(0x65, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
@ -634,219 +700,6 @@ public:
InvokeHelper(0x89, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nMin, nMax);
return result;
}
BOOL Measure1D(long StartX, long StartY, long EndX, long EndY, long threshold, double sigma, long ROI, long Transition, long * Count, VARIANT * ResultX, VARIANT * ResultY, VARIANT * ResultAmplitude, VARIANT * ResultDistance)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_R8 VTS_I4 VTS_I4 VTS_PI4 VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
InvokeHelper(0x8a, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, StartX, StartY, EndX, EndY, threshold, sigma, ROI, Transition, Count, ResultX, ResultY, ResultAmplitude, ResultDistance);
return result;
}
BOOL MeasureExtremum(long CenterX, long CenterY, long LongEdge, long ShortEdge, float angle, long threshold, long ROI, float sigma, long Transition, long StartEdge, long gap, float * ResultNearestX, float * ResultNearestY, float * ResultFarthestX, float * ResultFarthestY)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_R4 VTS_I4 VTS_I4 VTS_R4 VTS_I4 VTS_I4 VTS_I4 VTS_PR4 VTS_PR4 VTS_PR4 VTS_PR4 ;
InvokeHelper(0x8b, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, CenterX, CenterY, LongEdge, ShortEdge, angle, threshold, ROI, sigma, Transition, StartEdge, gap, ResultNearestX, ResultNearestY, ResultFarthestX, ResultFarthestY);
return result;
}
void DisplayRotateRectangle(long CenterX, long CenterY, long LongEdge, long ShortEdge, float angle, long Thickness, unsigned long LineColor)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_R4 VTS_I4 VTS_UI4 ;
InvokeHelper(0x8c, DISPATCH_METHOD, VT_EMPTY, NULL, parms, CenterX, CenterY, LongEdge, ShortEdge, angle, Thickness, LineColor);
}
unsigned long DisplayRotateLine(long CenterX, long CenterY, float angle, long Length, long Thickness, unsigned long LineColor)
{
unsigned long result;
static BYTE parms[] = VTS_I4 VTS_I4 VTS_R4 VTS_I4 VTS_I4 VTS_UI4 ;
InvokeHelper(0x8d, DISPATCH_METHOD, VT_UI4, (void*)&result, parms, CenterX, CenterY, angle, Length, Thickness, LineColor);
return result;
}
void DisplayArrow(long StartX, long StartY, long EndX, long EndY, unsigned long Thickness, unsigned long LineColor, float ArrowHeadRate)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 VTS_UI4 VTS_UI4 VTS_R4 ;
InvokeHelper(0x8e, DISPATCH_METHOD, VT_EMPTY, NULL, parms, StartX, StartY, EndX, EndY, Thickness, LineColor, ArrowHeadRate);
}
void SetZoomParams(long OrgX, long OrgY, float Scale)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_R4 ;
InvokeHelper(0x8f, DISPATCH_METHOD, VT_EMPTY, NULL, parms, OrgX, OrgY, Scale);
}
BOOL EditDataFilter(unsigned long FilterID, unsigned short FilterType, unsigned long width, float sigma)
{
BOOL result;
static BYTE parms[] = VTS_UI4 VTS_UI2 VTS_UI4 VTS_R4 ;
InvokeHelper(0x90, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FilterID, FilterType, width, sigma);
return result;
}
BOOL DataFiltering(unsigned long FilterID, double inData, double * outData)
{
BOOL result;
static BYTE parms[] = VTS_UI4 VTS_R8 VTS_PR8 ;
InvokeHelper(0x91, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FilterID, inData, outData);
return result;
}
void DeleteFilter(unsigned long FilterID)
{
static BYTE parms[] = VTS_UI4 ;
InvokeHelper(0x92, DISPATCH_METHOD, VT_EMPTY, NULL, parms, FilterID);
}
void ResetFilter(unsigned long FilterID)
{
static BYTE parms[] = VTS_UI4 ;
InvokeHelper(0x93, DISPATCH_METHOD, VT_EMPTY, NULL, parms, FilterID);
}
void GetZoomParams(long * OrgX, long * OrgY, float * Scale)
{
static BYTE parms[] = VTS_PI4 VTS_PI4 VTS_PR4 ;
InvokeHelper(0x94, DISPATCH_METHOD, VT_EMPTY, NULL, parms, OrgX, OrgY, Scale);
}
BOOL AVT_APISystemStartUp()
{
BOOL result;
InvokeHelper(0x95, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_APISystemShutDown()
{
BOOL result;
InvokeHelper(0x96, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_EnumCameras(long * nCamerasCount)
{
BOOL result;
static BYTE parms[] = VTS_PI4 ;
InvokeHelper(0x97, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nCamerasCount);
return result;
}
BOOL AVT_QueryCameraIDByIdx(long nIndex, BSTR * CameraID)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_PBSTR ;
InvokeHelper(0x98, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nIndex, CameraID);
return result;
}
BOOL AVT_SelectCameraDeviceByIdx(long nIndex)
{
BOOL result;
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x99, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nIndex);
return result;
}
BOOL AVT_SelectCameraDeviceByCameraID(LPCTSTR CameraID)
{
BOOL result;
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x9a, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, CameraID);
return result;
}
BOOL AVT_OpenCamera()
{
BOOL result;
InvokeHelper(0x9b, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_CloseCamera()
{
BOOL result;
InvokeHelper(0x9c, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_GetOneFrame()
{
BOOL result;
InvokeHelper(0x9d, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_GetContinueFrames()
{
BOOL result;
InvokeHelper(0x9e, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
return result;
}
BOOL AVT_SetImageReverse(BOOL bReverseXStatus, BOOL bReverseYStatus)
{
BOOL result;
static BYTE parms[] = VTS_BOOL VTS_BOOL ;
InvokeHelper(0x9f, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bReverseXStatus, bReverseYStatus);
return result;
}
BOOL AVT_SetExposureTime(long nExpTime)
{
BOOL result;
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0xa0, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nExpTime);
return result;
}
BOOL AVT_GetExposureTime(long * nExpTime)
{
BOOL result;
static BYTE parms[] = VTS_PI4 ;
InvokeHelper(0xa1, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nExpTime);
return result;
}
BOOL AVT_GetExposureTimeRange(long * nExpTimeMin, long * nExpTimeMax)
{
BOOL result;
static BYTE parms[] = VTS_PI4 VTS_PI4 ;
InvokeHelper(0xa2, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nExpTimeMin, nExpTimeMax);
return result;
}
BOOL AVT_SetGain(double dbGain)
{
BOOL result;
static BYTE parms[] = VTS_R8 ;
InvokeHelper(0xa3, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, dbGain);
return result;
}
BOOL AVT_GetGain(double * dbGain)
{
BOOL result;
static BYTE parms[] = VTS_PR8 ;
InvokeHelper(0xa4, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, dbGain);
return result;
}
BOOL AVT_GetGainRange(double * dbGainMin, double * dbGainMax)
{
BOOL result;
static BYTE parms[] = VTS_PR8 VTS_PR8 ;
InvokeHelper(0xa5, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, dbGainMin, dbGainMax);
return result;
}
BOOL AVT_SetGainAutoStatus(BOOL bStatus)
{
BOOL result;
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0xa6, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bStatus);
return result;
}
BOOL AVT_GetGainAutoStatus(BOOL * bStatus)
{
BOOL result;
static BYTE parms[] = VTS_PBOOL ;
InvokeHelper(0xa7, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, bStatus);
return result;
}
BOOL AVT_SetGainAutoRange(double dbGainAutoMin, double dbGainAutoMax)
{
BOOL result;
static BYTE parms[] = VTS_R8 VTS_R8 ;
InvokeHelper(0xa8, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, dbGainAutoMin, dbGainAutoMax);
return result;
}
BOOL AVT_SetDSPSubregion(long nRectTop, long nRectBottom, long nRectLeft, long nRectRight)
{
BOOL result;
static BYTE parms[] = VTS_I4 VTS_I4 VTS_I4 VTS_I4 ;
InvokeHelper(0xa9, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, nRectTop, nRectBottom, nRectLeft, nRectRight);
return result;
}
BOOL RemoveGraphicObject(unsigned long ObjID)
{
BOOL result;
static BYTE parms[] = VTS_UI4 ;
InvokeHelper(0xaa, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, ObjID);
return result;
}
// Properties
//

Binary file not shown.

Binary file not shown.

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

Loading…
Cancel
Save