#include "StdAfx.h" #include "ProgramCutMgr.h" #include "Layer.h" #include "DxfReadMgr.h" #include "GlobalFunction.h" #include "ObjComponentMgr.h" #include "ProductMgr.h" #include "CommonFlowMgr.h" #include "CameraHawkvis.h" #include "MsgBox.h" #include "PropertieMgr.h" #include "WorkTime.h" #include "WorkRecord.h" #include "WorkFileMgr.h" #include "CommandMgr.h" #include "EasyOperationMgr.h" #include "FileMgr.h" #include "LaserDeviceMgr.h" #include "MarkParMgr.h" #include "CStringFuc.h" #include "LogMgr.h" #include "ProductMgr.h" #include "ObjSortMgr.h" #define PRODUCT_CNT 1 //工件的数量 CProgramCutMgr *gProgramCutMgr = new CProgramCutMgr; CProgramCutMgr::CProgramCutMgr(void) { } CProgramCutMgr::~CProgramCutMgr(void) { } void CProgramCutMgr::Ini() { GetFrame()->m_DlgCutDeviceCtrl.SetPar(); } #if 1 //打开加工文件(bOpenDxf 为false 的时候可以不重新打开dxf) void CProgramCutMgr::OpenWorkFile(bool bDxf,bool bOpenDxf) { //重置定位 gProductMgr->ResetRealMarkPt(); //删除所有obj 元件 gObjComponentMgr->SetShapeLockState(false);//绑定的obj 解锁 gObjComponentMgr->DelAll(); //删除图形对象 CLayer &Layer = GetLayerInstance(); if(bOpenDxf) { Layer.DelAllObj(); } CObjContainer &ObjContainer = Layer.GetObjContainer(); try { if (bDxf) { //读取dxf 文件,创建layer obj 对象 if (bOpenDxf) { gDxfReadMgr->OpenDxfFileDlg(0); } } else//打开mak 文件 { OpenMarkFile(); } } catch (CString) { return; }; Layer.NotSelAllObj(); gProductMgr->SetDefualtRect(ObjContainer.GetObjRect(false)); //对obj 进行排序 CObjSortMgr ObjSortMgr; ObjSortMgr.SortObjByDir(_DIR_R); //通过layer 对象创建obj 对象 gObjComponentMgr->CreatObjByLayerObj(); //从obj 中分析出两个定位mark 的位置 gObjComponentMgr->AnalyseMarkPt(); gCommandMgr.DelAllCmd();//删除所有指令 } //移动加工数据 void CProgramCutMgr::MoveObjData(Dbxy BasePt) { gLogMgr->WriteDebugLog("CProgramCutMgr::MoveObjData"); //重置定位 gProductMgr->ResetRealMarkPt(); //先解除所有obj 的锁定状态 gObjComponentMgr->SetShapeLockState(false); //将layer obj移动到当前product 的基准点上 gProductMgr->MoveObjToBasePt(BasePt); CLayer &Layer = GetLayerInstance(); CObjContainer ObjContainer = Layer.GetObjContainer(); ObjContainer.NotSelAllObj(); gEasyOperationMgr->Refresh(); //删除所有指令 gCommandMgr.DelAllCmd(); //重新锁定 gObjComponentMgr->SetShapeLockState(true); //GetCurViewPtr()->RefreshView(); } void CProgramCutMgr::OpenMarkFile() { CWorkFileMgr WorkFileMgr; WorkFileMgr.OnOpenFile(); gDrawPropertieMgr.SaveAllPropertie(); gDevicePropertieMgr.SaveAllPropertie(); } void CProgramCutMgr::SaveMarkFile() { CWorkFileMgr WorkFileMgr; WorkFileMgr.OnSaveFileAs(); } //通过图形直接保存为mak (主要是为了在软件中直接调整dxf 文件) void CProgramCutMgr::SaveMarkFile2() { OpenWorkFile(true,false); CWorkFileMgr WorkFileMgr; WorkFileMgr.OnSaveFileAs(); } #endif #if 1 //初始化设备 bool CProgramCutMgr::InitDevice() { if(gCommonFlowMgr->InitDevice()) { return true; } return false; } //移动平台之前的操作(主要是要停掉占cpu 的工作) void CProgramCutMgr::OnPlatformMoveStart() { } void CProgramCutMgr::OnPlatformMoveEnd() { } void CProgramCutMgr::CameraCatchTwoMark() { //先抓一帧,把CCD 停掉 //gCommonFlowMgr->CameraCatch(); gCommonFlowMgr->CameraCatchTwoMark(); } //启动加工 bool CProgramCutMgr::StartWork(CProduct &Product,bool bSel) { /* CMsgBox MsgBox; if(Product.IsMarkReady()) {*/ //gWorkRecordMgr->SetStartWorkTime(gWorkTime.GetCurTime(":")); if(gCommonFlowMgr->MultipleAreaMark(Product,bSel)) { //gWorkRecordMgr->SetEndWorkTime(gWorkTime.GetCurTime(":")); //CString WorkTime = gWorkTime.GetTimeSpanStr();//加工时间 //gWorkRecordMgr->SetWorkTime(WorkTime); //gWorkRecordMgr->WriteRecordToFile();//记录加工文件 //Product.ResetRealMarkPt(); //记录上次运行时间 //gWorkTime.SaveLastWorkTime(); return true; } /*} else { MsgBox.Show("请先进行定位操作"); }*/ return false; } #endif #if 1 //保存当前打开的dxf 文件对应的参数 void CProgramCutMgr::SaveWorkParFile() { CString OpenFileName = GetCurOpenFileName(); if(OpenFileName != "") { CString FileName = "\\WorkPar\\"+OpenFileName+".txt"; CFileMgr FileMgr; char filepath[1024]; FileMgr.GetFullFilePath(filepath,FileName); ofstream file; file.open(filepath); //工位的基准点 vector &ProductVec = gProductMgr->GetProductVec(); int ProductCnt = ProductVec.size(); file<GetPower()<<"\n";//激光电流 file<GetLaserFre()<<"\n";//激光频率 CMarkPar& MarkPar = gMarkParMgr->GetCurPen(); file<GetOneObjMarkCnt()<<"\n";//切割次数 file<GetAreaCycleCnt()<<"\n";//循环次数 } } //读取当前打开的dxf 文件对应的参数 void CProgramCutMgr::ReadWorkParFile() { CString OpenFileName = GetCurOpenFileName(); if(OpenFileName != "") { CString FileName = "\\WorkPar\\"+OpenFileName+".txt"; CFileMgr FileMgr; CString filepath; FileMgr.GetFullFilePath(filepath,FileName); if(FileMgr.IsFileExist(filepath)) { vector vec; FileMgr.ReadFileToStringVec(filepath,vec); int size = vec.size(); int k = 0; int ParIdx = 1; while(k &ProductVec = gProductMgr->GetProductVec(); int ProductCnt2 = ProductVec.size(); if(ProductCnt != ProductCnt2) { gLogMgr->WriteDebugLog("ReadWorkParFile 参数product 数量不一致!"); return; } for(int i=0;iSetPower(CStringToDouble(vec[k++])); else if(ParIdx == 2) gCLaserDeviceMgr->SetFre(CStringToInt(vec[k++])); else if(ParIdx == 3) { CMarkPar& MarkPar = gMarkParMgr->GetCurPen(); MarkPar.ms = CStringToDouble(vec[k++]);//切割速度 gMarkParMgr->SaveCurPen(MarkPar); } else if(ParIdx == 4) gCommonFlowMgr->SetOneObjMarkCnt(CStringToInt(vec[k++])); else if(ParIdx == 5) gCommonFlowMgr->SetAreaCycleCnt(CStringToInt(vec[k++])); ParIdx++; } } } } } #endif #if 1 //搜集数据源 void CProgramCutMgr::CollectSrcWorkData() { //先清除之前的数据 gMarkAreaMgr->ClearSrcWorkData(); int ProductCnt = PRODUCT_CNT; for(int k=ProductCnt-1;k>=0;k--) { //将数据对象移动到product k 的基准点上 CProduct &Product = gProductMgr->GetProduct(k); MoveObjData(Product.GetProductBasePt()); //搜集数据源 //重置原件的搜集状态 gObjComponentMgr->ResetObjCollectState(false); gMarkAreaMgr->CollectSrcWorkData(); } } #endif