Compare commits

...

31 Commits

Author SHA1 Message Date
bestlqiang 3f86356efc 增加参数: 相机2像素尺寸 3 years ago
bestlqiang 497132a941 各位置可设 4 years ago
bestlqiang ac50ca8f91 添加OpenCV静态库 4 years ago
bestlqiang 13825dc847 estimateAffinePartial2D:第3个参数用noArray 4 years ago
bestlqiang c28047df12 将gCommonFlowMgr->m_JigPrtOffset,直接绑定到界面控件 4 years ago
bestlqiang 4d6a23ebbb 添加算法:刚性变换 4 years ago
bestlqiang afbd05efeb 屏蔽发送到副机的指令(OPEN_FILE);
副机自己打开图纸.
4 years ago
bestlqiang b497d1b852 代码修改属性表内参数时,立即刷新到界面(如果当前在显示) 4 years ago
bestlqiang 01ce2b3263 忘记屏蔽副机,且副机没开时.不会再阻塞卡死 4 years ago
bestlqiang af775a1c1c 光删尺检测不管反向问题 4 years ago
bestlqiang cdb2e76a2b 下料改为信利;数据越界检查;打开文件自动换模板 5 years ago
bestlqiang 39bc7354e4 下料线程,不重复进 5 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

@ -12,6 +12,7 @@
CCamera::CCamera(void)
{
m_OnePixDis = 1;//一个像素对应的实际尺寸(mm/pix)
m_OnePixDis2 = 1;//一个像素对应的实际尺寸(mm/pix)
m_bIni = false;//是否初始化成功
m_bRotatoPtByAngle = false;//是否根据相机的安装角度修正抓取结果
m_Angle = 0;
@ -204,7 +205,25 @@ CMFCPropertyGridProperty *CCamera::CreatGridProperty()
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//添加属性变量映射
Name = _T("m_OnePixDis2");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_OnePixDis2);
pPropertie->SetType(_PROP_TYPE_DOUBLE);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("像素尺寸2");
Description = _T("相机2一个像素对应的实际尺寸单位是(mm/像素)");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_OnePixDis2, Description);
pGroup->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//添加属性变量映射
@ -258,8 +277,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 +296,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 +307,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 +318,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 +326,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 +337,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);
@ -334,6 +353,7 @@ void CCamera::ExportPar(ofstream *pFile)
(*pFile)<<"[CCD 坐标x][m_Coord.x] = "<<m_Coord.x<<endl;
(*pFile)<<"[CCD 坐标y][m_Coord.y] = "<<m_Coord.y<<endl;
(*pFile)<<"[像素尺寸(mm/pix) ][m_OnePixDis] = "<<m_OnePixDis<<endl;
(*pFile) << "[像素尺寸2(mm/pix) ][m_OnePixDis2] = " << m_OnePixDis2 << endl;
}
void CCamera::Draw(CDC* pDC)
@ -348,8 +368,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 +400,7 @@ Dbxy CCamera::GetCoord()
{
if (m_CamIndex != 0)
{
return m_Coord2;
return m_Coord+m_Coord2;
}
else
{
@ -410,13 +433,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 +440,17 @@ 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;
double OnePixDis = m_CamIndex==0?m_OnePixDis: m_OnePixDis2;
CCDpt.x *= OnePixDis;
CCDpt.y *= OnePixDis;
}
LogStr.Format(_T("[MM_Coordx] = [%0.3f] ,[MM_Coordy] = [%0.3f]"),CCDpt.x,CCDpt.y);
gLogMgr->WriteDebugLog(LogStr);
@ -444,25 +470,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 +510,8 @@ bool CCamera::CatchPtToPlatformcoord(Dbxy &pt)
if(!m_bCatch)//不实际抓取
{
ret = true;
CatchPt.x = 1296;
CatchPt.y = 972;
CatchPt.x = 1296;
CatchPt.y = 972;
}
else
{

@ -30,12 +30,14 @@ protected:
bool m_bUse;//是否使用
bool m_bIni;//是否初始化成功
double m_OnePixDis;//一个像素对应的实际尺寸(mm/pix) ,通常需要定标得到这个值,不是所有的CCD 都会使用这个值,像基恩士的就是在其内部处理的
double m_OnePixDis2;//一个像素对应的实际尺寸[相机2]
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;
}
}
@ -89,9 +88,9 @@ void CClientMgr::SendCmd_TransFile(CString filePath)
CopyFile(filePath, NewFilePath, false);
CopyFile(parFile, NewParFilePath, false);
CopyFile(areFile, NewAreFilePath, false);
CopyFile(PIFile, NewPIFilePath, false);
//CopyFile(parFile, NewParFilePath, false);
//CopyFile(areFile, NewAreFilePath, false);
//CopyFile(PIFile, NewPIFilePath, false);
}
@ -99,12 +98,12 @@ void CClientMgr::SendCmd_OpenFile(CString filePath)
{
SendCmd_TransFile(filePath);
Sleep(100);
/*Sleep(100);
if (Connect2Server())
{
CString str = "OPEN_FILE;" + filePath;
Send(str, str.GetLength());
}
}*/
}
@ -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;

@ -25,9 +25,9 @@ public:
void SendCmd_OpenFile(CString filePath); //发指令给副机,打开文件
void SendCmd_CollectData(); //发Product内容给客户端
void SendCmd_CollectData(); //发命令给副机,收集原始数据
void SendCmd_ProductInfo(CProduct product); //发Product内容给客户端
void SendCmd_ProductInfo(CProduct product); //发Product变换内容给客户端(仿射参数)
void SendCmd_SetSpecialObj(); //发指令给副机,设置特殊对象
@ -61,6 +61,19 @@ private:
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnConnect(int nErrorCode);
//start--------------设定发送超时---------------------
private:
//virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0) override; //重写 加入超时
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);
}
}
//-------------------------------------------------------------------------------//
{
@ -361,6 +381,41 @@ CMFCPropertyGridProperty * CCommonFlowMgr::CreatGridProperty()
pGroup1->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//添加属性变量映射
Name = _T("m_bUseEstimateAffine");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_bUseEstimateAffine);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("使用刚性变换");
Description = _T("true:刚性变换 false:仿射变换");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bUseEstimateAffine, Description);
pGroup1->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//添加属性变量映射
Name = _T("m_EstimateAffinepar");//变量名字
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_EstimateAffinepar);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//读取保存的属性
//添加属性显示
PropertyName = _T("刚性变换参数");
Description = _T("刚性变换参数:0,1,2");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_EstimateAffinepar, Description);
pGroup1->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//添加属性变量映射
Name = _T("m_AdjustOffset_X");//变量名字
@ -672,8 +727,6 @@ 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));
}
void CCommonFlowMgr::ReadWorkFile(CLabVecRang &LabVecRang)
{
@ -706,20 +759,6 @@ void CCommonFlowMgr::ReadWorkFile(CLabVecRang &LabVecRang)
m_CutSpeed = Lab.m_Int;
}
}
{
CLab Lab = WorkFileMgr.FindLab(LabVecRang, LAB_ADJUST_OFFSET_X);
if (Lab.m_ValType != _TYPE_NULL)
{
m_ProductOffset.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;
}
}
}
#endif
@ -1044,6 +1083,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 +1111,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 +1136,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 +1157,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 +1248,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 +1431,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 +1449,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 +1466,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 +1526,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 +1545,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 +1690,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 +1705,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 +1762,18 @@ 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 = gCommonFlowMgr->m_Jig1PrtOffset;
if (gCurLockTrackType == _ETrackType_Track_2)
{
Jigoft = gCommonFlowMgr->m_Jig3PrtOffset;
}
m_AdjustOffsetAll = Offset + Jigoft;
}
void CCommonFlowMgr::ResetProductOffset()
{
m_ProductOffset.x = m_ProductOffset.y = 0;
}

@ -56,6 +56,10 @@ public:
void ResetProductOffset();
void SetbCollectSpecialObj(bool b){m_bCollectSpecialObj = b;};
bool IsbCollectSpecialObj(){return m_bCollectSpecialObj;};
bool IsUseEstimateAffine() { return m_bUseEstimateAffine; }; //是否使用刚性变换
int m_EstimateAffinepar=0;
bool IsbStretchDataToRealSize(){return m_bStretchDataToRealSize;};
bool CameraCatchMark3(CProduct &Product);
@ -63,7 +67,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 +77,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 +102,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;//加工完成后是否返回取料点
@ -112,10 +120,12 @@ private:
double m_RotatoAdjust;//旋转调整mm
bool m_bStretchDataToRealSize;//根据抓取结果拉伸数据
bool m_bUseEstimateAffine = true;//是否使用刚性变换,否则使用仿射变换
//平台cut 参数--------------------------------------------------------------
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();
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();
}
}
Fresh();
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
{
@ -503,50 +412,45 @@ 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_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,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, gCommonFlowMgr->m_Jig1PrtOffset.x);
DDX_Text(pDX, IDC_CUT_OFFSET_Y, gCommonFlowMgr->m_Jig1PrtOffset.y);
DDX_Control(pDX, IDC_BOOL_SEL_MARK2, m_SetMarkPosBtn);
DDX_Text(pDX, IDC_CUT_OFFSET_X2, gCommonFlowMgr->m_Jig3PrtOffset.x);
DDX_Text(pDX, IDC_CUT_OFFSET_Y2, gCommonFlowMgr->m_Jig3PrtOffset.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,17 @@ void CDlgSW_XL_Flow::UpdateCutPar()
m_OneObjMarkCnt = gCommonFlowMgr->m_OneObjMarkCnt;//切割次数
m_SpecialOneObjMarkCnt = gCommonFlowMgr->m_SpecialOneObjMarkCnt;//切割次数
m_MarkAreaCutCount = gCommonFlowMgr->GetAreaCycleCnt();//循环次数
m_ProductOffset = gCommonFlowMgr->m_ProductOffset;//针对产品的切割偏移
{
CString path;
gProgram_SZ_XL->GetDxfParFilePath("pjo", path);
CSmartArchive ar(path, false);
ar + gCommonFlowMgr->m_Jig1PrtOffset.x;
ar + gCommonFlowMgr->m_Jig1PrtOffset.y;
ar + gCommonFlowMgr->m_Jig3PrtOffset.x;
ar + gCommonFlowMgr->m_Jig3PrtOffset.y;
}
UpdateData(FALSE);
}
@ -506,12 +545,23 @@ 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;//针对产品的切割偏移
{
CString path;
gProgram_SZ_XL->GetDxfParFilePath("pjo", path);
CSmartArchive ar(path, true);
ar + gCommonFlowMgr->m_Jig1PrtOffset.x;
ar + gCommonFlowMgr->m_Jig1PrtOffset.y;
ar + gCommonFlowMgr->m_Jig3PrtOffset.x;
ar + gCommonFlowMgr->m_Jig3PrtOffset.y;
}
//保存dxf 对应的切割参数
gProgram_SZ_XL->SaveCutPar();
//应用参数时服务端重新打开当前文件
gClientMgr->SendCmd_OpenFile(gProgramCutMgr->GetCurOpenFileFullName());
@ -538,6 +588,8 @@ void CDlgSW_XL_Flow::OpenWorkFile(bool bDxf)
//area移动到中心
gMarkAreaMgr->MoveAllAreaToTargetPt(Dbxy(0,0));
GetCurViewPtr()->DoZoomFull();
}
void CDlgSW_XL_Flow::OnBnClickedOpenDxf()
@ -716,7 +768,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;//撈야1끓틔튤盧x
//double m_Jig1PrtOft_y=0;//撈야1끓틔튤盧y
// 撈야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.

@ -47,8 +47,8 @@
<LinkIncremental>true</LinkIncremental>
<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>
<LibraryPath>$(SolutionDir)laipulaser\lib\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-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);
@ -348,20 +348,60 @@ void CProduct::CalAffinePars()
//得放射变换参数矩阵
warp_mat = getAffineTransform(ThroryCoords, RealCoords);
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
//得放射变换参数矩阵
warp_mat = getAffineTransform(ThroryCoords, RealCoords);
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
//取出6个变换参数
m_p00 = warp_mat.at<float>(0, 0);
m_p01 = warp_mat.at<float>(0, 1);
m_p02 = warp_mat.at<float>(0, 2);//m_CatchMark1Oft.x;//
m_p10 = warp_mat.at<float>(1, 0);
m_p11 = warp_mat.at<float>(1, 1);
m_p12 = warp_mat.at<float>(1, 2);//m_CatchMark1Oft.y;//
logstr.Format("仿射=====>偏移:[%.4f]~[%.4f]", m_p02, m_p12);
gLogMgr->WriteDebugLog(logstr);
logstr.Format("仿射=====>X参数:[ %.4f ]~[%.4f]", m_p00, m_p01);
gLogMgr->WriteDebugLog(logstr);
logstr.Format("仿射=====>Y参数:[ %.4f ]~[%.4f]", m_p10, m_p11);
gLogMgr->WriteDebugLog(logstr);
//刚性变换
if (gCommonFlowMgr->IsUseEstimateAffine())
{
vector<Point2d> src(ThroryCoords, ThroryCoords + 2);
vector<Point2d> dest(RealCoords, RealCoords + 2);
int Method = abs(gCommonFlowMgr->m_EstimateAffinepar) % 3;
Method = 4 * pow(2, Method);
warp_mat = estimateAffinePartial2D(src, dest, noArray(), Method/*LMEDS*/);
warp_mat.convertTo(warp_mat, CV_32FC1);//不转化时,默认CV_64FC1 后续计算会错误
//取出6个变换参数
m_p00 = warp_mat.at<float>(0, 0);
m_p01 = warp_mat.at<float>(0, 1);
m_p02 = warp_mat.at<float>(0, 2);//m_CatchMark1Oft.x;//
//取出6个变换参数
m_p00 = warp_mat.at<float>(0, 0);
m_p01 = warp_mat.at<float>(0, 1);
m_p02 = warp_mat.at<float>(0, 2);
m_p10 = warp_mat.at<float>(1, 0);
m_p11 = warp_mat.at<float>(1, 1);
m_p12 = warp_mat.at<float>(1, 2);//m_CatchMark1Oft.y;//
m_p10 = warp_mat.at<float>(1, 0);
m_p11 = warp_mat.at<float>(1, 1);
m_p12 = warp_mat.at<float>(1, 2);
logstr.Format("刚性=====>偏移:[%.4f]~[%.4f]", m_p02, m_p12);
gLogMgr->WriteDebugLog(logstr);
logstr.Format("刚性=====>X参数:[ %.4f ]~[%.4f]", m_p00, m_p01);
gLogMgr->WriteDebugLog(logstr);
logstr.Format("刚性=====>Y参数:[ %.4f ]~[%.4f]", m_p10, m_p11);
gLogMgr->WriteDebugLog(logstr);
}
}
//计算真实数据的偏移和旋转值
void CProduct::CalTheoryToRealPar()
@ -507,45 +547,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;
}
(*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("标刻数据错数!超出标刻范围!");
}
}
}

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

File diff suppressed because it is too large Load Diff

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

@ -2,7 +2,7 @@
#include "Propertie.h"
#include "LogMgr.h"
#include "FileMgr.h"
#include "PropertieMgr.h"
CPropertie::CPropertie()
{
m_pVal = NULL;
@ -41,6 +41,18 @@ void CPropertie::PropertyChangeVal(const COleVariant &OleVar)
{
m_pModule->OnPropertyChanged();
}
auto & PropertieValMap = gDevicePropertieMgr.m_PropertieValMap;
if (PropertieValMap.size())
{
for (auto & item : PropertieValMap)
{
if ((item.second)->m_pVal == this->m_pVal)
{
(item.first)->SetValue(OleVar);
break;
}
}
}
}
void CPropertie::WriteRead(bool bRead)
{

@ -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;};
@ -20,7 +21,7 @@ public:
private:
void WriteToFile(CString &FileName);
void ReadFromFile(CString &FileName);
private:
public:
void * m_pVal;//变量内存地址
PROPERTIE_TYPE m_Type;//属性的类型
CModule * m_pModule;//变量所属模块变量的地址

@ -1,7 +1,7 @@
#include "StdAfx.h"
#include "PropertieMgr.h"
#include "Propertie.h"
#include "GlobalFunction.h"
CPropertieMgr gDevicePropertieMgr;//设备属性管理
CPropertieMgr gDrawPropertieMgr;//绘制属性管理
@ -78,4 +78,54 @@ 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);
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,9 +14,15 @@ 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:
public:
map<CMFCPropertyGridProperty*,CPropertie*> m_PropertieValMap;//保存变量和属性映射的容器
bool m_bSaveAllPropertie;//保存所有需要存储的属性
vector<CPropertie*> m_AllPropertieVec;//保存所有需要存储的属性(用来强制保存属性)

@ -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.

@ -0,0 +1,15 @@
set(OpenCV_VERSION 4.1.0)
set(PACKAGE_VERSION ${OpenCV_VERSION})
set(PACKAGE_VERSION_EXACT False)
set(PACKAGE_VERSION_COMPATIBLE False)
if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT True)
set(PACKAGE_VERSION_COMPATIBLE True)
endif()
if(PACKAGE_FIND_VERSION_MAJOR EQUAL 4
AND PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION)
set(PACKAGE_VERSION_COMPATIBLE True)
endif()

@ -0,0 +1,315 @@
# ===================================================================================
# The OpenCV CMake configuration file
#
# ** File generated automatically, do not modify **
#
# Usage from an external project:
# In your CMakeLists.txt, add these lines:
#
# find_package(OpenCV REQUIRED)
# include_directories(${OpenCV_INCLUDE_DIRS}) # Not needed for CMake >= 2.8.11
# target_link_libraries(MY_TARGET_NAME ${OpenCV_LIBS})
#
# Or you can search for specific OpenCV modules:
#
# find_package(OpenCV REQUIRED core videoio)
#
# You can also mark OpenCV components as optional:
# find_package(OpenCV REQUIRED core OPTIONAL_COMPONENTS viz)
#
# If the module is found then OPENCV_<MODULE>_FOUND is set to TRUE.
#
# This file will define the following variables:
# - OpenCV_LIBS : The list of all imported targets for OpenCV modules.
# - OpenCV_INCLUDE_DIRS : The OpenCV include directories.
# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability.
# - OpenCV_ANDROID_NATIVE_API_LEVEL : Minimum required level of Android API.
# - OpenCV_VERSION : The version of this OpenCV build: "4.1.0"
# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION: "4"
# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION: "1"
# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION: "0"
# - OpenCV_VERSION_STATUS : Development status of this build: ""
#
# Advanced variables:
# - OpenCV_SHARED : Use OpenCV as shared library
# - OpenCV_INSTALL_PATH : OpenCV location
# - OpenCV_LIB_COMPONENTS : Present OpenCV modules list
# - OpenCV_USE_MANGLED_PATHS : Mangled OpenCV path flag
#
# Deprecated variables:
# - OpenCV_VERSION_TWEAK : Always "0"
#
# ===================================================================================
# ======================================================
# Version variables:
# ======================================================
SET(OpenCV_VERSION 4.1.0)
SET(OpenCV_VERSION_MAJOR 4)
SET(OpenCV_VERSION_MINOR 1)
SET(OpenCV_VERSION_PATCH 0)
SET(OpenCV_VERSION_TWEAK 0)
SET(OpenCV_VERSION_STATUS "")
include(FindPackageHandleStandardArgs)
if(NOT CMAKE_VERSION VERSION_LESS 2.8.8
AND OpenCV_FIND_COMPONENTS # prevent excessive output
)
# HANDLE_COMPONENTS was introduced in CMake 2.8.8
list(APPEND _OpenCV_FPHSA_ARGS HANDLE_COMPONENTS)
# The missing components will be handled by the FindPackageHandleStandardArgs
# module.
set(_OpenCV_HANDLE_COMPONENTS_MANUALLY FALSE)
else()
# The missing components will be handled by this config.
set(_OpenCV_HANDLE_COMPONENTS_MANUALLY TRUE)
endif()
# Extract directory name from full path of the file currently being processed.
# Note that CMake 2.8.3 introduced CMAKE_CURRENT_LIST_DIR. We reimplement it
# for older versions of CMake to support these as well.
if(CMAKE_VERSION VERSION_LESS "2.8.3")
get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
endif()
# Extract the directory where *this* file has been installed (determined at cmake run-time)
# Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings
set(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_DIR}")
get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../../../" REALPATH)
# Search packages for host system instead of packages for target system.
# in case of cross compilation this macro should be defined by toolchain file
if(NOT COMMAND find_host_package)
macro(find_host_package)
find_package(${ARGN})
endmacro()
endif()
if(NOT COMMAND find_host_program)
macro(find_host_program)
find_program(${ARGN})
endmacro()
endif()
# Some additional settings are required if OpenCV is built as static libs
set(OpenCV_SHARED OFF)
# Enables mangled install paths, that help with side by side installs
set(OpenCV_USE_MANGLED_PATHS FALSE)
set(OpenCV_LIB_COMPONENTS opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio;opencv_world)
set(OpenCV_INCLUDE_DIRS "${OpenCV_INSTALL_PATH}/include")
if(NOT TARGET opencv_core)
include(${CMAKE_CURRENT_LIST_DIR}/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake)
endif()
if(NOT CMAKE_VERSION VERSION_LESS "2.8.11")
# Target property INTERFACE_INCLUDE_DIRECTORIES available since 2.8.11:
# * http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:INTERFACE_INCLUDE_DIRECTORIES
foreach(__component ${OpenCV_LIB_COMPONENTS})
if(TARGET ${__component})
set_target_properties(
${__component}
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OpenCV_INCLUDE_DIRS}"
)
endif()
endforeach()
endif()
if(NOT DEFINED OPENCV_MAP_IMPORTED_CONFIG)
if(CMAKE_GENERATOR MATCHES "Visual Studio" OR MSVC)
# OpenCV supports Debug and Release builds only.
# But MSVS has 'RelWithDebInfo' 'MinSizeRel' configurations for applications.
# By default CMake maps these configuration on the first available (Debug) which is wrong.
# Non-Debug build of Application can't be used with OpenCV Debug build (ABI mismatch problem)
# Add mapping of RelWithDebInfo and MinSizeRel to Release here
set(OPENCV_MAP_IMPORTED_CONFIG "RELWITHDEBINFO=!Release;MINSIZEREL=!Release")
endif()
endif()
set(__remap_warnings "")
macro(ocv_map_imported_config target)
if(DEFINED OPENCV_MAP_IMPORTED_CONFIG) # list, "RELWITHDEBINFO=Release;MINSIZEREL=Release"
get_target_property(__available_configurations ${target} IMPORTED_CONFIGURATIONS)
foreach(remap ${OPENCV_MAP_IMPORTED_CONFIG})
if(remap MATCHES "^(.+)=(!?)([^!]+)$")
set(__remap_config "${CMAKE_MATCH_1}")
set(__final_config "${CMAKE_MATCH_3}")
set(__force_flag "${CMAKE_MATCH_2}")
string(TOUPPER "${__final_config}" __final_config_upper)
string(TOUPPER "${__remap_config}" __remap_config_upper)
if(";${__available_configurations};" MATCHES ";${__remap_config_upper};" AND NOT "${__force_flag}" STREQUAL "!")
# configuration already exists, skip remap
set(__remap_warnings "${__remap_warnings}... Configuration already exists ${__remap_config} (skip mapping ${__remap_config} => ${__final_config}) (available configurations: ${__available_configurations})\n")
continue()
endif()
if(__available_configurations AND NOT ";${__available_configurations};" MATCHES ";${__final_config_upper};")
# skip, configuration is not available
if(NOT "${__force_flag}" STREQUAL "!")
set(__remap_warnings "${__remap_warnings}... Configuration is not available '${__final_config}' for ${target}, build may fail (available configurations: ${__available_configurations})\n")
endif()
endif()
set_target_properties(${target} PROPERTIES
MAP_IMPORTED_CONFIG_${__remap_config} "${__final_config}"
)
else()
message(WARNING "Invalid entry of OPENCV_MAP_IMPORTED_CONFIG: '${remap}' (${OPENCV_MAP_IMPORTED_CONFIG})")
endif()
endforeach()
endif()
endmacro()
# ==============================================================
# Form list of modules (components) to find
# ==============================================================
if(NOT OpenCV_FIND_COMPONENTS)
set(OpenCV_FIND_COMPONENTS ${OpenCV_LIB_COMPONENTS})
list(REMOVE_ITEM OpenCV_FIND_COMPONENTS opencv_java)
if(GTest_FOUND OR GTEST_FOUND)
list(REMOVE_ITEM OpenCV_FIND_COMPONENTS opencv_ts)
endif()
endif()
set(OpenCV_WORLD_COMPONENTS opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio)
# expand short module names and see if requested components exist
foreach(__cvcomponent ${OpenCV_FIND_COMPONENTS})
# Store the name of the original component so we can set the
# OpenCV_<component>_FOUND variable which can be checked by the user.
set (__original_cvcomponent ${__cvcomponent})
if(NOT __cvcomponent MATCHES "^opencv_")
set(__cvcomponent opencv_${__cvcomponent})
endif()
list(FIND OpenCV_LIB_COMPONENTS ${__cvcomponent} __cvcomponentIdx)
if(__cvcomponentIdx LESS 0)
if(_OpenCV_HANDLE_COMPONENTS_MANUALLY)
# Either the component is required or the user did not set any components at
# all. In the latter case, the OpenCV_FIND_REQUIRED_<component> variable
# will not be defined since it is not set by this config. So let's assume
# the implicitly set components are always required.
if(NOT DEFINED OpenCV_FIND_REQUIRED_${__original_cvcomponent} OR
OpenCV_FIND_REQUIRED_${__original_cvcomponent})
message(FATAL_ERROR "${__cvcomponent} is required but was not found")
elseif(NOT OpenCV_FIND_QUIETLY)
# The component was marked as optional using OPTIONAL_COMPONENTS
message(WARNING "Optional component ${__cvcomponent} was not found")
endif()
endif(_OpenCV_HANDLE_COMPONENTS_MANUALLY)
#indicate that module is NOT found
string(TOUPPER "${__cvcomponent}" __cvcomponentUP)
set(${__cvcomponentUP}_FOUND "${__cvcomponentUP}_FOUND-NOTFOUND")
set(OpenCV_${__original_cvcomponent}_FOUND FALSE)
else()
# Not using list(APPEND) here, because OpenCV_LIBS may not exist yet.
# Also not clearing OpenCV_LIBS anywhere, so that multiple calls
# to find_package(OpenCV) with different component lists add up.
set(OpenCV_LIBS ${OpenCV_LIBS} "${__cvcomponent}")
#indicate that module is found
string(TOUPPER "${__cvcomponent}" __cvcomponentUP)
set(${__cvcomponentUP}_FOUND 1)
set(OpenCV_${__original_cvcomponent}_FOUND TRUE)
endif()
if(OpenCV_SHARED AND ";${OpenCV_WORLD_COMPONENTS};" MATCHES ";${__cvcomponent};" AND NOT TARGET ${__cvcomponent})
get_target_property(__implib_dbg opencv_world IMPORTED_IMPLIB_DEBUG)
get_target_property(__implib_release opencv_world IMPORTED_IMPLIB_RELEASE)
get_target_property(__location_dbg opencv_world IMPORTED_LOCATION_DEBUG)
get_target_property(__location_release opencv_world IMPORTED_LOCATION_RELEASE)
get_target_property(__include_dir opencv_world INTERFACE_INCLUDE_DIRECTORIES)
add_library(${__cvcomponent} SHARED IMPORTED)
set_target_properties(${__cvcomponent} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${__include_dir}")
if(__location_dbg)
set_property(TARGET ${__cvcomponent} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(${__cvcomponent} PROPERTIES
IMPORTED_IMPLIB_DEBUG "${__implib_dbg}"
IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG ""
IMPORTED_LOCATION_DEBUG "${__location_dbg}"
)
endif()
if(__location_release)
set_property(TARGET ${__cvcomponent} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(${__cvcomponent} PROPERTIES
IMPORTED_IMPLIB_RELEASE "${__implib_release}"
IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE ""
IMPORTED_LOCATION_RELEASE "${__location_release}"
)
endif()
endif()
if(TARGET ${__cvcomponent})
ocv_map_imported_config(${__cvcomponent})
endif()
endforeach()
if(__remap_warnings AND NOT OpenCV_FIND_QUIETLY)
message("OpenCV: configurations remap warnings:\n${__remap_warnings}OpenCV: Check variable OPENCV_MAP_IMPORTED_CONFIG=${OPENCV_MAP_IMPORTED_CONFIG}")
endif()
# ==============================================================
# Compatibility stuff
# ==============================================================
set(OpenCV_LIBRARIES ${OpenCV_LIBS})
#
# Some macros for samples
#
macro(ocv_check_dependencies)
set(OCV_DEPENDENCIES_FOUND TRUE)
foreach(d ${ARGN})
if(NOT TARGET ${d})
message(WARNING "OpenCV: Can't resolve dependency: ${d}")
set(OCV_DEPENDENCIES_FOUND FALSE)
break()
endif()
endforeach()
endmacro()
# adds include directories in such way that directories from the OpenCV source tree go first
function(ocv_include_directories)
set(__add_before "")
file(TO_CMAKE_PATH "${OpenCV_INSTALL_PATH}" __baseDir)
foreach(dir ${ARGN})
get_filename_component(__abs_dir "${dir}" ABSOLUTE)
if("${__abs_dir}" MATCHES "^${__baseDir}")
list(APPEND __add_before "${dir}")
else()
include_directories(AFTER SYSTEM "${dir}")
endif()
endforeach()
include_directories(BEFORE ${__add_before})
endfunction()
macro(ocv_include_modules)
include_directories(BEFORE "${OpenCV_INCLUDE_DIRS}")
endmacro()
macro(ocv_include_modules_recurse)
include_directories(BEFORE "${OpenCV_INCLUDE_DIRS}")
endmacro()
macro(ocv_target_link_libraries)
target_link_libraries(${ARGN})
endmacro()
# remove all matching elements from the list
macro(ocv_list_filterout lst regex)
foreach(item ${${lst}})
if(item MATCHES "${regex}")
list(REMOVE_ITEM ${lst} "${item}")
endif()
endforeach()
endmacro()
# We do not actually need REQUIRED_VARS to be checked for. Just use the
# installation directory for the status.
find_package_handle_standard_args(OpenCV REQUIRED_VARS OpenCV_INSTALL_PATH
VERSION_VAR OpenCV_VERSION ${_OpenCV_FPHSA_ARGS})

@ -0,0 +1,129 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Debug".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "zlib" for configuration "Debug"
set_property(TARGET zlib APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(zlib PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/zlibd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS zlib )
list(APPEND _IMPORT_CHECK_FILES_FOR_zlib "${_IMPORT_PREFIX}/x86/vc14/staticlib/zlibd.lib" )
# Import target "libjpeg-turbo" for configuration "Debug"
set_property(TARGET libjpeg-turbo APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libjpeg-turbo PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libjpeg-turbod.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libjpeg-turbo )
list(APPEND _IMPORT_CHECK_FILES_FOR_libjpeg-turbo "${_IMPORT_PREFIX}/x86/vc14/staticlib/libjpeg-turbod.lib" )
# Import target "libtiff" for configuration "Debug"
set_property(TARGET libtiff APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libtiff PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C;CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libtiffd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libtiff )
list(APPEND _IMPORT_CHECK_FILES_FOR_libtiff "${_IMPORT_PREFIX}/x86/vc14/staticlib/libtiffd.lib" )
# Import target "libwebp" for configuration "Debug"
set_property(TARGET libwebp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libwebp PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libwebpd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libwebp )
list(APPEND _IMPORT_CHECK_FILES_FOR_libwebp "${_IMPORT_PREFIX}/x86/vc14/staticlib/libwebpd.lib" )
# Import target "libjasper" for configuration "Debug"
set_property(TARGET libjasper APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libjasper PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libjasperd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libjasper )
list(APPEND _IMPORT_CHECK_FILES_FOR_libjasper "${_IMPORT_PREFIX}/x86/vc14/staticlib/libjasperd.lib" )
# Import target "libpng" for configuration "Debug"
set_property(TARGET libpng APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libpng PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libpngd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libpng )
list(APPEND _IMPORT_CHECK_FILES_FOR_libpng "${_IMPORT_PREFIX}/x86/vc14/staticlib/libpngd.lib" )
# Import target "IlmImf" for configuration "Debug"
set_property(TARGET IlmImf APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(IlmImf PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/IlmImfd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS IlmImf )
list(APPEND _IMPORT_CHECK_FILES_FOR_IlmImf "${_IMPORT_PREFIX}/x86/vc14/staticlib/IlmImfd.lib" )
# Import target "libprotobuf" for configuration "Debug"
set_property(TARGET libprotobuf APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(libprotobuf PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/libprotobufd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS libprotobuf )
list(APPEND _IMPORT_CHECK_FILES_FOR_libprotobuf "${_IMPORT_PREFIX}/x86/vc14/staticlib/libprotobufd.lib" )
# Import target "quirc" for configuration "Debug"
set_property(TARGET quirc APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(quirc PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/quircd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS quirc )
list(APPEND _IMPORT_CHECK_FILES_FOR_quirc "${_IMPORT_PREFIX}/x86/vc14/staticlib/quircd.lib" )
# Import target "ittnotify" for configuration "Debug"
set_property(TARGET ittnotify APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(ittnotify PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/ittnotifyd.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS ittnotify )
list(APPEND _IMPORT_CHECK_FILES_FOR_ittnotify "${_IMPORT_PREFIX}/x86/vc14/staticlib/ittnotifyd.lib" )
# Import target "ade" for configuration "Debug"
set_property(TARGET ade APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(ade PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/ade.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS ade )
list(APPEND _IMPORT_CHECK_FILES_FOR_ade "${_IMPORT_PREFIX}/x86/vc14/staticlib/ade.lib" )
# Import target "opencv_world" for configuration "Debug"
set_property(TARGET opencv_world APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(opencv_world PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/x86/vc14/staticlib/opencv_world410d.lib"
)
list(APPEND _IMPORT_CHECK_TARGETS opencv_world )
list(APPEND _IMPORT_CHECK_FILES_FOR_opencv_world "${_IMPORT_PREFIX}/x86/vc14/staticlib/opencv_world410d.lib" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)

@ -0,0 +1,161 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5)
message(FATAL_ERROR "CMake >= 2.6.0 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.6)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_targetsDefined)
set(_targetsNotDefined)
set(_expectedTargets)
foreach(_expectedTarget zlib libjpeg-turbo libtiff libwebp libjasper libpng IlmImf libprotobuf quirc ittnotify ade ocv.3rdparty.dshow ocv.3rdparty.msmf opencv_world)
list(APPEND _expectedTargets ${_expectedTarget})
if(NOT TARGET ${_expectedTarget})
list(APPEND _targetsNotDefined ${_expectedTarget})
endif()
if(TARGET ${_expectedTarget})
list(APPEND _targetsDefined ${_expectedTarget})
endif()
endforeach()
if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
unset(_targetsDefined)
unset(_targetsNotDefined)
unset(_expectedTargets)
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT "${_targetsDefined}" STREQUAL "")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
endif()
unset(_targetsDefined)
unset(_targetsNotDefined)
unset(_expectedTargets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target zlib
add_library(zlib STATIC IMPORTED)
# Create imported target libjpeg-turbo
add_library(libjpeg-turbo STATIC IMPORTED)
# Create imported target libtiff
add_library(libtiff STATIC IMPORTED)
set_target_properties(libtiff PROPERTIES
INTERFACE_LINK_LIBRARIES "zlib"
)
# Create imported target libwebp
add_library(libwebp STATIC IMPORTED)
# Create imported target libjasper
add_library(libjasper STATIC IMPORTED)
# Create imported target libpng
add_library(libpng STATIC IMPORTED)
set_target_properties(libpng PROPERTIES
INTERFACE_LINK_LIBRARIES "zlib"
)
# Create imported target IlmImf
add_library(IlmImf STATIC IMPORTED)
set_target_properties(IlmImf PROPERTIES
INTERFACE_LINK_LIBRARIES "zlib"
)
# Create imported target libprotobuf
add_library(libprotobuf STATIC IMPORTED)
# Create imported target quirc
add_library(quirc STATIC IMPORTED)
# Create imported target ittnotify
add_library(ittnotify STATIC IMPORTED)
# Create imported target ade
add_library(ade STATIC IMPORTED)
# Create imported target ocv.3rdparty.dshow
add_library(ocv.3rdparty.dshow INTERFACE IMPORTED)
set_target_properties(ocv.3rdparty.dshow PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "HAVE_DSHOW"
INTERFACE_INCLUDE_DIRECTORIES ""
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ""
)
# Create imported target ocv.3rdparty.msmf
add_library(ocv.3rdparty.msmf INTERFACE IMPORTED)
set_target_properties(ocv.3rdparty.msmf PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "HAVE_MSMF;HAVE_MSMF_DXVA"
INTERFACE_INCLUDE_DIRECTORIES ""
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ""
)
# Create imported target opencv_world
add_library(opencv_world STATIC IMPORTED)
set_target_properties(opencv_world PROPERTIES
INTERFACE_LINK_LIBRARIES "\$<LINK_ONLY:libprotobuf>;\$<LINK_ONLY:ade>;\$<LINK_ONLY:zlib>;\$<LINK_ONLY:libjpeg-turbo>;\$<LINK_ONLY:libwebp>;\$<LINK_ONLY:libpng>;\$<LINK_ONLY:libtiff>;\$<LINK_ONLY:libjasper>;\$<LINK_ONLY:IlmImf>;\$<LINK_ONLY:comctl32>;\$<LINK_ONLY:gdi32>;\$<LINK_ONLY:ole32>;\$<LINK_ONLY:setupapi>;\$<LINK_ONLY:ws2_32>;\$<LINK_ONLY:zlib>;\$<LINK_ONLY:ittnotify>;\$<LINK_ONLY:ocv.3rdparty.dshow>;\$<LINK_ONLY:ocv.3rdparty.msmf>;\$<LINK_ONLY:quirc>"
)
if(CMAKE_VERSION VERSION_LESS 3.0.0)
message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.")
endif()
# Load information for each installed configuration.
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
file(GLOB CONFIG_FILES "${_DIR}/OpenCVModules-*.cmake")
foreach(f ${CONFIG_FILES})
include(${f})
endforeach()
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(target ${_IMPORT_CHECK_TARGETS} )
foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
if(NOT EXISTS "${file}" )
message(FATAL_ERROR "The imported target \"${target}\" references the file
\"${file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
unset(_IMPORT_CHECK_FILES_FOR_${target})
endforeach()
unset(_IMPORT_CHECK_TARGETS)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)

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