Compare commits

...

15 Commits

@ -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,11 +448,11 @@ 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);
@ -459,14 +463,17 @@ Dbxy CCamera::CCDcoord2Platformcoord(Dbxy CCDpt)
}
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);
@ -481,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,14 +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__
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");
@ -227,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 (...)
@ -278,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;

@ -18,8 +18,11 @@ public:
bool SwitchCamera(long CamIndex); //根据相机索引 0、1 切换相机。由相机控件所在对话框Timmer检测当前索引切换相机跨线程直接切换会崩溃。
void OpenTemp();
unsigned char GetCurShapeModelID() { return m_CurShapeModelID; };
void SetCurShapeModelID(int ID) { m_CurShapeModelID=ID; };
// 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 控件

@ -45,8 +45,6 @@ bool CClientMgr::Connect2Server()
m_bOnline = true;
}
return true;
}

@ -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;
}
}
}
@ -1071,7 +1091,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 +1116,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,7 +1137,7 @@ bool CCommonFlowMgr::MultipleAreaMark(CProduct &Product, bool bSel)
gLogMgr->WriteDebugLog("Fuc---->MultipleAreaMark : bSel = " + Bool2Str(bSel));
//先移动到第一个area (不等待移动结束)
MoveToFirstArea();
MoveToFirstArea(Product.GetProductBasePt());
//搜集加工数据(这里比较耗费时间)
gMarkAreaMgr->CollectWorkData(bSel, Product);
@ -1197,8 +1217,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 +1400,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 +1418,7 @@ 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 +1435,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 +1495,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 +1514,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 +1659,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 +1674,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);
}
}
@ -1716,13 +1731,15 @@ 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;//加工完成后是否返回取料点

@ -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,105 +104,32 @@ BOOL DlgHawkvisCamera::OnInitDialog()
m_ContinueFrameBtn.SetUpColor(RGB_PINK);
Update();
try
{
if (m_HawkvisCtrl2.MV_SelectAdapterByIdx(1))
{
if (m_HawkvisCtrl2.MV_OpenCamera())
{
m_pHawkvisCtrl = &m_HawkvisCtrl2;
m_HawkvisCtrl2.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore);
}
else
{
AfxMessageBox("相机2 MV_OpenCamera 失败!");
}
m_HawkvisCtrl2.SetCrossShow(1, 30, 30, -1, -1, TRUE);
if (m_HawkvisCtrl2.MV_GetOneFrame())
{
m_HawkvisCtrl2.ZoomFitWindow();
}
else
{
AfxMessageBox("相机2 MV_GetOneFrame 失败!");
}
}
Fresh();
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;
}
else
{
AfxMessageBox("相机1 MV_OpenCamera 失败!");
}
m_HawkvisCtrl1.SetCrossShow(1, 30, 30, -1, -1, TRUE);
if (m_HawkvisCtrl1.MV_GetOneFrame())
{
m_HawkvisCtrl1.ZoomFitWindow();
}
else
{
AfxMessageBox("相机1 MV_GetOneFrame 失败!");
}
}
}
catch (...)
{
AfxMessageBox("打开相机异常.");
}
((CButton*)GetDlgItem(IDC_CROSS_CHECK))->SetCheck(TRUE);
UpdateData(FALSE);
return TRUE;
}
//观察平台坐标的变化
void DlgHawkvisCamera::UpdateInfo()
{
//换文件时,自动换模板
if ((!gLogMgr->IsDebuging()) && gCameraHawkvis->GetCurShapeModelID() != m_ShapeModelID)
/*//换文件时,自动换模板
if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID)
{
auto temp = m_pHawkvisCtrl;
m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID();
m_pHawkvisCtrl = &m_HawkvisCtrl1;
OnBnClickedLoadCatchTemp();
Sleep(200);
m_pHawkvisCtrl = &m_HawkvisCtrl2;
OnBnClickedLoadCatchTemp();
m_pHawkvisCtrl = temp;
}
}*/
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来更新否则会报错
}
@ -221,7 +147,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
@ -234,32 +160,23 @@ void DlgHawkvisCamera::OnBnClickedOpenCam()
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
@ -269,14 +186,14 @@ Sleep(100);*/
}
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
@ -286,13 +203,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");
}
//设置曝光值
@ -302,13 +219,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
@ -320,140 +239,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 += " 失败!";
gLogMgr->WriteDebugLog(str);
}
catch (...)
{
AfxMessageBox("加载模板 异常!");
}
if (b)
str += " 成功!";
else
str += " 失败!";
gLogMgr->WriteDebugLog(str);
//gLogMgr->WriteDebugLog("Hawkvis : LoadCatchTemp");
}
void DlgHawkvisCamera::OnBnClickedSaveCatchTemp()
@ -464,59 +366,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);
OnBnClickedLoadCatchTemp();//读取模板
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_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;
if (bfirst)
{
AfxMessageBox("相机1连续采集失败!");//报错一次
bfirst = false;
}
}* /
}
else
{
@ -524,83 +410,75 @@ void DlgHawkvisCamera::OnBnClickedToCam1()
if (bfirst)
{
bfirst = false;
AfxMessageBox("打开相机1失败!");//报错一次
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_DlgCurCamIndex = 1;
gCameraHawkvis->SetCamIndex(1);
m_pHawkvisCtrl = &m_HawkvisCtrl2;
return;
/*
try
try
{
m_HawkvisCtrl.MV_CloseCamera();
if (m_HawkvisCtrl.MV_SelectAdapterByIdx(1))
{
m_pHawkvisCtrl->MV_CloseCamera();
if (m_pHawkvisCtrl->MV_SelectAdapterByIdx(1))
if (m_HawkvisCtrl.MV_OpenCamera())
{
OnBnClickedLoadCatchTemp();//读取模板
m_HawkvisCtrl.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore);
m_nExpore = gCameraHawkvis->m_nCam2Expore;
//UpdateData(FALSE);
//OnBnClickedSetExpore();//设置曝光
}
m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck());
if (m_HawkvisCtrl.MV_GetOneFrame())
{
if (m_pHawkvisCtrl->MV_OpenCamera())
{
OnBnClickedLoadCatchTemp();//读取模板
m_pHawkvisCtrl->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_pHawkvisCtrl->ZoomFitWindow();
}
m_HawkvisCtrl.ZoomFitWindow();
}
}
else
else
{
static bool bfirst = true;
if (bfirst)
{
static bool bfirst = true;
if (bfirst)
{
AfxMessageBox("打开相机2失败!");//报错一次
bfirst = false;
}
AfxMessageBox("打开相机2失败!");//报错一次
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发生异常!");
}
catch (...)
{
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
@ -613,7 +491,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);
@ -625,7 +503,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,7 +79,9 @@ 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;//切割次数
m_SpecialOneObjMarkCnt = 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()
@ -166,7 +170,27 @@ void CDlgSW_XL_Flow::OnTimer(UINT nIDEvent)
UpdateDlgInfo();
//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;
};

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.

@ -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,7 +6,7 @@
#include "PropertieMgr.h"
#include "BitOperation.h"
#include "AuthorityMgr.h"
#include "WorkTime.h"
CLogMgr* gLogMgr = new CLogMgr;//日志管理对象
@ -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,7 @@ private:
bool m_bDebug;//是否正在调试
int m_DebugCmdDelay;//调试指令延时时间
CString PlcLogDir;//记录与PLC通信的文本文件 所在的文件夹
public:
Dbxy LastTargetCoord;
};

@ -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;
}
//计算实际中心点

@ -784,7 +784,7 @@ 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;

@ -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);

@ -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);//不可修改
@ -1725,6 +1725,7 @@ bool CProgram_SZ_XL::GetLoadCmdStr(ETrackType TrackType, ETrackWorkStep WorkStep
LogStr = "通知下料机:轨道2推出治具完成";
}
Ret = true;
gLogMgr->WritePlcTimeLog(LogStr);
}
if (Ret)
{

@ -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();
@ -108,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://下料错误
@ -419,6 +447,7 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
{
gTrackWorkFlow1.m_bPushJigOut = true;
logstrT = "轨道1推出治具完成!";
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ5D1)#] ==>轨道1推出治具完成");
}
@ -467,6 +496,7 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
{
gTrackWorkFlow2.m_bPushJigOut = true;
logstrT = "轨道2推出治具完成!";
gLogMgr->WritePlcTimeLog(logstrH + logstrT);
//gLogMgr->WriteDebugLog("ReadPlcMsg [$(KQ6D1)#] ==>轨道2推出治具完成");
}
@ -485,6 +515,7 @@ void CTrackWorkFlow::AnalyzeRecvPlcCmd(char *buf, int len)
}
gLogMgr->WriteDebugLog(logstrH + logstrT);
}
#endif
@ -581,6 +612,7 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
msg += "K";
log = "SendPlcMsg: $(KQK)# ==>轨道2 推出治具";
}
gLogMgr->WritePlcTimeLog(log);
}
if (PlcCmd == _ETrack_PlcCmd_Check_Jig_In)//检测轨道治具
@ -621,6 +653,7 @@ CString CTrackWorkFlow::GetSendPlcMsgStr(ETrackPlcCmd PlcCmd)
log = "SendPlcMsg: $(KQ2)# ==>红灯蜂鸣器关";
}
gLogMgr->WriteDebugLog(log);
msg += ")#\r\n";
return msg;
}
@ -631,7 +664,7 @@ bool CTrackWorkFlow::SendMsgToPlc(ETrackPlcCmd PlcCmd, bool bStopReadMsg)
if (bStopReadMsg)
{
m_bStopReadMsg = true;//暂停读取
Sleep(300);
Sleep(100);
}
CString Msg = GetSendPlcMsgStr(PlcCmd);
if (m_TrackCOM.IsOpen())
@ -640,6 +673,7 @@ bool CTrackWorkFlow::SendMsgToPlc(ETrackPlcCmd PlcCmd, bool bStopReadMsg)
int len = Msg.GetLength();
m_TrackCOM.ClearCache();
m_TrackCOM.WriteBuf(buf, len);//发送
//gLogMgr->WriteDebugLog("SendMsgToPlc==>" + Msg);
}
else
@ -688,17 +722,22 @@ bool CTrackWorkFlow::PushJigOut()
}*/
ETrackPlcCmd PlcCmd;
PlcCmd = _ETrack_PlcCmd_Push_Jig_Out;
SendMsgToPlc(PlcCmd, false);
m_bPushJigOut = false;
SendMsgToPlc(PlcCmd, false);
int CheckTimes = 450;
/*//强制等待10秒再检测是否推出完成
Sleep(10000);
*/
int MaxCheckTimes = 150;
int cnt = 0;
while (!m_bPushJigOut&&(cnt<CheckTimes))
while ((!m_bPushJigOut) && (cnt < MaxCheckTimes));
{
Sleep(200);
cnt++;
}
if (cnt == CheckTimes)
}
if (cnt == MaxCheckTimes)
{
gTrackWorkFlow1.RadAlamOnOff(true);
AfxMessageBox("推出治具超时!");
@ -707,12 +746,17 @@ bool CTrackWorkFlow::PushJigOut()
}
return true;
}
bool CTrackWorkFlow::IsJigOK()
{
if (gLogMgr->IsDebuging())
{
return true;
}
if (!gCommonFlowMgr->m_bCheckJig)
{
return true;
}
//return true;
ETrackPlcCmd PlcCmd;
PlcCmd = _ETrack_PlcCmd_Check_Jig_In;
@ -812,6 +856,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()
{
@ -928,15 +983,16 @@ void CTrackWorkFlow::CatchMark()
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);
@ -1085,6 +1141,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()
{
@ -1103,6 +1341,8 @@ void CTrackWorkFlow::MarkProcess()
}
gCurLockTrackType = m_TrackType;//锁定
CString Log = m_TrackName + " MarkProcess";
gLogMgr->WriteDebugLog(Log);
@ -1131,8 +1371,6 @@ void CTrackWorkFlow::MarkProcess()
//XY 组切换
MarkProcessExt();
#endif
//设置当前的工作步骤
SetCurTrackWorkStep(_ETrack_Step_Marking);
//数据移动回默认的位置
gProgramCutMgr->MoveObjData(Dbxy(0, 0));
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0, 0));
@ -1277,15 +1515,17 @@ void CTrackWorkFlow::UnLoad()
//如果另外一个轴在unload ,要等待其unload 完成
if (gProgram_SZ_XL->IsbAutoWorkMode())
{
int cnt = 0;
while (!gExitApp)
{
Sleep(200);
Sleep(500);
//获取另外一个轴的状态
ETrackWorkStep OtherTrackWorkStep = gProgram_SZ_XL->GetOtherTrackWorkStep(m_TrackType);
if (OtherTrackWorkStep != _ETrack_Step_Unload)
if ((OtherTrackWorkStep != _ETrack_Step_Unload)||cnt>10)
{
break;
}
cnt++;
}
}

@ -90,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();
@ -101,6 +103,7 @@ private:
void ThrowEdge();
void UnLoad();
void CatchMark();
void CatchMarkNewly();
void ChangePlatXYGroupIdx();
CString GetSendPlcMsgStr(ETrackPlcCmd PlcCmd);
void WriteRecordTimesToFile();
@ -123,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;//下料指令发出后,是否拉走了载具
@ -133,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;//绘制属性管理
@ -78,4 +78,55 @@ void CPropertieMgr::SaveAllPropertie()
pPropertie->WriteRead(false);
}
}
}
}
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.
Loading…
Cancel
Save