|
|
|
@ -210,6 +210,9 @@ void CLaserPowCheckMgr::UpdatePowCheckDataList()
|
|
|
|
|
PowCheckValSum.m_LaserPathPow += PowCheckVal.m_LaserPathPow;
|
|
|
|
|
PowCheckValSum.m_SurfacePow += PowCheckVal.m_SurfacePow;
|
|
|
|
|
PowCheckValSum.m_PulseWidth += PowCheckVal.m_PulseWidth;
|
|
|
|
|
PowCheckValSum.m_Pk2pk += PowCheckVal.m_Pk2pk;
|
|
|
|
|
PowCheckValSum.m_Mean += PowCheckVal.m_Mean;
|
|
|
|
|
PowCheckValSum.m_Amplitude += PowCheckVal.m_Amplitude;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(ValidValCnt>0)
|
|
|
|
@ -221,6 +224,9 @@ void CLaserPowCheckMgr::UpdatePowCheckDataList()
|
|
|
|
|
PowCheckValAvg.m_LaserPathPow = PowCheckValSum.m_LaserPathPow/ValidValCnt;
|
|
|
|
|
PowCheckValAvg.m_SurfacePow = PowCheckValSum.m_SurfacePow/ValidValCnt;
|
|
|
|
|
PowCheckValAvg.m_PulseWidth = PowCheckValSum.m_PulseWidth/ValidValCnt;
|
|
|
|
|
PowCheckValAvg.m_Pk2pk = PowCheckValSum.m_Pk2pk / ValidValCnt;
|
|
|
|
|
PowCheckValAvg.m_Mean = PowCheckValSum.m_Mean / ValidValCnt;
|
|
|
|
|
PowCheckValAvg.m_Amplitude = PowCheckValSum.m_Amplitude / ValidValCnt;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -264,8 +270,8 @@ void CLaserPowCheckMgr::UpdatePowCheckDataListExtExt(CListCtrl &List,bool bInser
|
|
|
|
|
//数据显示平均值
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_SurfacePow,2));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_LaserPathPow,2));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_LaserSourcePow2,2));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_LaserSourcePow1,2));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_LaserSourcePow2,2));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(PowCheckValAvg.m_PulseWidth,2));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -512,6 +518,8 @@ bool CLaserPowCheckMgr::SaveCurPowCheckData(bool bRotatoDimmerMode)
|
|
|
|
|
FileMgr.CreatDir(FilePath);//创建年文件夹
|
|
|
|
|
|
|
|
|
|
CPowCheckData &CurPowCheckData = m_CurPowCheckData;
|
|
|
|
|
CurPowCheckData.m_bCheckDataValid = true;
|
|
|
|
|
|
|
|
|
|
CurPowCheckData.m_DateTime = WorkTime.GetCurMonth();//记录时间
|
|
|
|
|
CurPowCheckData.m_DateTime += "_";
|
|
|
|
|
CurPowCheckData.m_DateTime += WorkTime.GetCurDay();
|
|
|
|
@ -538,11 +546,11 @@ bool CLaserPowCheckMgr::SaveCurPowCheckData(bool bRotatoDimmerMode)
|
|
|
|
|
CheckPt.m_LaserFre = CurPowCheckData.m_LaserFre;
|
|
|
|
|
CheckPt.m_LaserType = CurPowCheckData.m_CheckType;
|
|
|
|
|
}
|
|
|
|
|
//保存到LaipuLaserData\\LaserPowerCheckData
|
|
|
|
|
SavePowCheckDataFlie(FilePath, CurPowCheckData, true);
|
|
|
|
|
//衰减器点检模式不要记录普通的点检数据
|
|
|
|
|
if(!bRotatoDimmerMode)
|
|
|
|
|
{
|
|
|
|
|
//保存到LaipuLaserData\\LaserPowerCheckData
|
|
|
|
|
SavePowCheckDataFlie(FilePath,CurPowCheckData,true);
|
|
|
|
|
//保存激光功率对应表(衰减器用)
|
|
|
|
|
SaveLaserFixedCurrentPowFile();
|
|
|
|
|
//记录最近一次的信息
|
|
|
|
@ -553,8 +561,8 @@ bool CLaserPowCheckMgr::SaveCurPowCheckData(bool bRotatoDimmerMode)
|
|
|
|
|
if(CurPowCheckData.m_CheckType == _LaserDeviceType_MainLaser2)
|
|
|
|
|
m_LastPow2CheckData = CurPowCheckData;
|
|
|
|
|
}
|
|
|
|
|
//记录Fre 对应的K和P0
|
|
|
|
|
gLaser->SetEnergyDensityPar(CurPowCheckData.m_CheckType,CurPowCheckData.m_LaserFre,CurPowCheckData.m_EnergyDensityK,CurPowCheckData.m_EnergyDensityPo);
|
|
|
|
|
//将当前的点检结果用作recipe 计算依据
|
|
|
|
|
gLaserPowCheckMgr->SaveCurPowCheckDataForRecipe();
|
|
|
|
|
}
|
|
|
|
|
//详细数据保存到LaipuLaserData\\MonitoringData\\CheckData
|
|
|
|
|
SaveMonitoringCheckData(CurPowCheckData,bRotatoDimmerMode);
|
|
|
|
@ -571,19 +579,55 @@ void CLaserPowCheckMgr::SaveMonitoringCheckData(CPowCheckData &PowCheckData,bool
|
|
|
|
|
CString DataPath = gAnnealMonitoringMgr->CreatCurCheckDataPath();
|
|
|
|
|
CFileMgr FileMgr;
|
|
|
|
|
//输出一个总的结果
|
|
|
|
|
if(!bRotatoDimmerMode)
|
|
|
|
|
{
|
|
|
|
|
CCsvData CsvData;
|
|
|
|
|
CsvData.AddData("点检类型",false);
|
|
|
|
|
CsvData.AddData(CheckType,true);
|
|
|
|
|
CsvData.AddData("时间",false);
|
|
|
|
|
CsvData.AddData(PowCheckData.m_DateTime,true);
|
|
|
|
|
CsvData.AddData("脉冲频率Hz",false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckData.m_LaserFre),true);
|
|
|
|
|
if(!bRotatoDimmerMode)
|
|
|
|
|
{
|
|
|
|
|
CsvData.AddData("斜率K",false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckData.m_EnergyDensityK),true);
|
|
|
|
|
CsvData.AddData("截距Po",false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckData.m_EnergyDensityPo),true);
|
|
|
|
|
CsvData.AddData("脉冲频率Hz",false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckData.m_LaserFre),true);
|
|
|
|
|
}
|
|
|
|
|
//输出所有平均数据
|
|
|
|
|
{
|
|
|
|
|
CsvData.AddData("电流A",false);
|
|
|
|
|
CsvData.AddData("衰减角度",false);
|
|
|
|
|
CsvData.AddData("出光口功率计1W",false);
|
|
|
|
|
CsvData.AddData("出光口功率计2W",false);
|
|
|
|
|
CsvData.AddData("光路功率计W",false);
|
|
|
|
|
CsvData.AddData("平台功率值W",false);
|
|
|
|
|
CsvData.AddData("脉冲宽度ns",false);
|
|
|
|
|
CsvData.AddData("脉冲峰峰值",false);
|
|
|
|
|
CsvData.AddData("脉冲平均值",false);
|
|
|
|
|
CsvData.AddData("脉冲幅度值",true);
|
|
|
|
|
|
|
|
|
|
vector<CPowCheckPt> &PowCheckPtVec = PowCheckData.m_PowCheckPtVec;
|
|
|
|
|
int PtCnt = PowCheckPtVec.size();
|
|
|
|
|
for(int k=0;k<PtCnt;k++)
|
|
|
|
|
{
|
|
|
|
|
CPowCheckPt &CheckPt = PowCheckPtVec[k];
|
|
|
|
|
CPowCheckVal &PowCheckValAvg = CheckPt.m_PowCheckValAvg;
|
|
|
|
|
CString SetCurrStr = Db2CString(CheckPt.m_SetCurr);
|
|
|
|
|
CString SetAngStr = Db2CString(CheckPt.m_RotatoDimmerAng);
|
|
|
|
|
CCsvData CsvData;
|
|
|
|
|
CsvData.AddData(SetCurrStr,false);
|
|
|
|
|
CsvData.AddData(SetAngStr,false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_LaserSourcePow1),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_LaserSourcePow2),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_LaserPathPow),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_SurfacePow),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_PulseWidth),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_Pk2pk),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_Mean),false);
|
|
|
|
|
CsvData.AddData(Db2CString(PowCheckValAvg.m_Amplitude),true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CString s = FileName+"Result";
|
|
|
|
|
FileMgr.WriteDataToExcel(DataPath,s,CsvData);
|
|
|
|
|
}
|
|
|
|
@ -666,6 +710,7 @@ void CLaserPowCheckMgr::SaveCurPowCheckDataForRecipe()
|
|
|
|
|
MsgBox.Show("需要先进行点检");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#if 0
|
|
|
|
|
//先读取原来的
|
|
|
|
|
vector<CPowCheckPt> PowCheckPtPowCheckPVec;
|
|
|
|
|
ReadLaserFixedCurrentPowFile(PowCheckPtPowCheckPVec);
|
|
|
|
@ -683,6 +728,12 @@ void CLaserPowCheckMgr::SaveCurPowCheckDataForRecipe()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
if (MsgBox.ConfirmOkCancel("是否应用当前的点检记录K和Po作为recipe计算依据?"))
|
|
|
|
|
{
|
|
|
|
|
//记录Fre 对应的K和P0 (Edi-->Current用)
|
|
|
|
|
gLaser->SetEnergyDensityPar(m_CurPowCheckData.m_CheckType, m_CurPowCheckData.m_LaserFre, m_CurPowCheckData.m_EnergyDensityK, m_CurPowCheckData.m_EnergyDensityPo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//读取固定电流功率对应表
|
|
|
|
|
void CLaserPowCheckMgr::ReadLaserFixedCurrentPowFile(vector<CPowCheckPt> &PowCheckPtPowCheckPVec)
|
|
|
|
@ -867,16 +918,21 @@ void CLaserPowCheckMgr::ReadPowCheckDataFlie(CString Path,CPowCheckData &PowChec
|
|
|
|
|
for(int k=1;k<LineCnt;k++)
|
|
|
|
|
{
|
|
|
|
|
vector<CString> StrLine = StrVec[k];
|
|
|
|
|
if(StrLine.size()==6)
|
|
|
|
|
int Idx = 0;
|
|
|
|
|
if(StrLine.size()>=6)
|
|
|
|
|
{
|
|
|
|
|
CPowCheckPt CheckPt;
|
|
|
|
|
CPowCheckVal &PowCheckValAvg = CheckPt.m_PowCheckValAvg;
|
|
|
|
|
CheckPt.m_SetCurr = CStringToDouble(StrLine[0]);
|
|
|
|
|
PowCheckValAvg.m_LaserSourcePow1 = CStringToDouble(StrLine[1]);
|
|
|
|
|
PowCheckValAvg.m_LaserSourcePow2 = CStringToDouble(StrLine[2]);
|
|
|
|
|
PowCheckValAvg.m_LaserPathPow = CStringToDouble(StrLine[3]);
|
|
|
|
|
PowCheckValAvg.m_SurfacePow = CStringToDouble(StrLine[4]);
|
|
|
|
|
PowCheckValAvg.m_PulseWidth = CStringToDouble(StrLine[5]);
|
|
|
|
|
CheckPt.m_SetCurr = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
|
|
|
|
|
if(StrLine.size()>= 7)
|
|
|
|
|
CheckPt.m_RotatoDimmerAng = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
|
|
|
|
|
PowCheckValAvg.m_LaserSourcePow1 = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
PowCheckValAvg.m_LaserSourcePow2 = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
PowCheckValAvg.m_LaserPathPow = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
PowCheckValAvg.m_SurfacePow = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
PowCheckValAvg.m_PulseWidth = CStringToDouble(StrLine[Idx++]);
|
|
|
|
|
PowCheckData.m_PowCheckPtVec.push_back(CheckPt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -898,6 +954,7 @@ void CLaserPowCheckMgr::SavePowCheckDataFlie(CString Path,CPowCheckData &PowChec
|
|
|
|
|
CPowCheckPt &CheckPt = PowCheckPtVec[k];
|
|
|
|
|
CPowCheckVal &PowCheckValAvg = CheckPt.m_PowCheckValAvg;
|
|
|
|
|
FileStream << CheckPt.m_SetCurr<<",";
|
|
|
|
|
FileStream << CheckPt.m_RotatoDimmerAng << ",";
|
|
|
|
|
FileStream<<PowCheckValAvg.m_LaserSourcePow1<<",";
|
|
|
|
|
FileStream<<PowCheckValAvg.m_LaserSourcePow2<<",";
|
|
|
|
|
FileStream<<PowCheckValAvg.m_LaserPathPow<<",";
|
|
|
|
@ -1012,6 +1069,8 @@ void CLaserPowCheckMgr::SaveSelCheckRecordToFile()
|
|
|
|
|
ar<<"斜率K : "<<K<<" 截距Po : "<<Po<<'\n'<<'\n';
|
|
|
|
|
ar<<"电流(A)";
|
|
|
|
|
ar<<TAB_STR;
|
|
|
|
|
ar << "衰减器角度";
|
|
|
|
|
ar << TAB_STR;
|
|
|
|
|
ar<<"出光口功率(W)";
|
|
|
|
|
ar<<TAB_STR;
|
|
|
|
|
ar<<"光路功率(W)";
|
|
|
|
@ -1032,6 +1091,8 @@ void CLaserPowCheckMgr::SaveSelCheckRecordToFile()
|
|
|
|
|
double CalPower = gLaser->CalPowerByDensityPar(Po,K,CheckPt.m_SetCurr);
|
|
|
|
|
ar<<Db2CString(CheckPt.m_SetCurr);
|
|
|
|
|
ar<<TAB_STR;
|
|
|
|
|
ar << Db2CString(CheckPt.m_RotatoDimmerAng);
|
|
|
|
|
ar << TAB_STR;
|
|
|
|
|
ar<<Db2CString(PowCheckValAvg.m_LaserSourcePow1,2);
|
|
|
|
|
ar<<TAB_STR;
|
|
|
|
|
ar<<Db2CString(PowCheckValAvg.m_LaserSourcePow2,2);
|
|
|
|
|