|
@@ -441,12 +441,7 @@ namespace MeasureThread
|
|
|
public Boolean key_stop = false;
|
|
|
FibWork m_FibWork;
|
|
|
PTWork m_PTWork;
|
|
|
- //String focus_path = "";
|
|
|
- //String FIBfocus_path = "";
|
|
|
- //String StigX_path = "";
|
|
|
- //String StigY_path = "";
|
|
|
- //String EDS_path = "";
|
|
|
- //String data_path = "";
|
|
|
+
|
|
|
|
|
|
//int m_nWorkHoleNo = -1;
|
|
|
public ThreadStatusEventArgs GetArgs()
|
|
@@ -514,6 +509,17 @@ namespace MeasureThread
|
|
|
{
|
|
|
log.Info("进入初始化函数");
|
|
|
m_measureFile = a_measureFile;
|
|
|
+
|
|
|
+ var p = m_measureFile.MParam;
|
|
|
+ p.FindCrossMagnification = p.Location_Magnification / 3;
|
|
|
+ if (p.SampleName == "3") p.FindCrossMagnification = 400;
|
|
|
+ if (p.SampleName == "4") p.FindCrossMagnification = 300;
|
|
|
+ if (p.SampleName == "5") p.FindCrossMagnification = 300;
|
|
|
+ if (p.FindCrossMagnification < 200)
|
|
|
+ {
|
|
|
+ p.FindCrossMagnification = 200;
|
|
|
+ }
|
|
|
+
|
|
|
List<CutHole> listHoles = m_measureFile.ListCutHole;
|
|
|
|
|
|
foreach (CutHole h in listHoles)
|
|
@@ -617,42 +623,14 @@ namespace MeasureThread
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- log.Warn("测量线程:测试第" + currHoleNo.ToString() + "个分析点。", true);
|
|
|
-
|
|
|
- log.Warn("测量线程:分析点" + currHole.HoleName + "开始测量。", true);
|
|
|
+ log.Warn("测量线程:第"+ currHoleNo.ToString() + "分析点,名称:" + currHole.HoleName + " 开始测量。", true);
|
|
|
|
|
|
- currHole.START = DateTime.Now;
|
|
|
+ currHole.START = DateTime.Now;
|
|
|
currHole.STATE = State.InProcess;
|
|
|
SendCutHoleMsg(((int)currHole.STATE).ToString(), currHole.HoleName);
|
|
|
-
|
|
|
- log.Warn("测量线程:控制样品台至样品分析点位置(R,X,Y,Z) = (" + currHole.Position.R.ToString() + ","
|
|
|
- + currHole.Position.X.ToString() + ","
|
|
|
- + currHole.Position.Y.ToString() + ","
|
|
|
- + currHole.Position.Z.ToString() + ")", true);
|
|
|
-
|
|
|
- #region 坐标恢复
|
|
|
-
|
|
|
- Locate lo = new Locate(iSEM);
|
|
|
- lo.LocateCutHolePosition(currHole,MParam.Tilt);
|
|
|
-
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
-
|
|
|
- log.Info("停止键被按下", true);
|
|
|
- return;
|
|
|
- }
|
|
|
- arg.HoleName = currHole.HoleName;
|
|
|
- arg.State = true;
|
|
|
- arg.Message = "样品台移动到观测点:" + currHole.HoleName + "的位置成功。";
|
|
|
- SendMsg("0-0");
|
|
|
-
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
- //开始测量
|
|
|
- if (!HoleMeasure(currHole))
|
|
|
- {
|
|
|
-
|
|
|
+ //开始测量
|
|
|
+ if (!HoleMeasure(currHole))
|
|
|
+ {
|
|
|
currHole.STATE = State.Failed;
|
|
|
currHole.END = DateTime.Now;
|
|
|
m_measureFile.Save();
|
|
@@ -664,9 +642,9 @@ namespace MeasureThread
|
|
|
currHole.END = DateTime.Now;
|
|
|
m_measureFile.Save();
|
|
|
SendCutHoleMsg(((int)currHole.STATE).ToString(), currHole.HoleName);
|
|
|
+
|
|
|
if (key_stop)
|
|
|
{
|
|
|
-
|
|
|
log.Error("用户停止测量");
|
|
|
break;
|
|
|
}
|
|
@@ -695,15 +673,15 @@ namespace MeasureThread
|
|
|
|
|
|
float px = 0;
|
|
|
int state = 1;
|
|
|
- log.Info("测量线程:13.自动定位、沉积-功能自动定位电压" + MParam.Location_Voltage.ToString() + "自动定位放大倍数" + MParam.Location_Magnification.ToString(), true);
|
|
|
+ log.Info("测量线程:FIB自动定位放大倍数" + MParam.Location_Magnification.ToString(), true);
|
|
|
Thread.Sleep(200);
|
|
|
- //1.控制SEM放大600X
|
|
|
- if (!iSEM.SetSEMVoltage(MParam.Location_Voltage))
|
|
|
- {
|
|
|
+ ////1.控制SEM放大600X
|
|
|
+ //if (!iSEM.SetSEMVoltage(MParam.Location_Voltage))
|
|
|
+ //{
|
|
|
|
|
|
- log.Error("测量线程报错:13.自动定位、沉积-自动定位电压" + MParam.Location_Voltage.ToString() + "控制失败", false);
|
|
|
- return false;
|
|
|
- }
|
|
|
+ // log.Error("测量线程报错:13.自动定位、沉积-自动定位电压" + MParam.Location_Voltage.ToString() + "控制失败", false);
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
Thread.Sleep(200);
|
|
|
|
|
|
if (!m_focuse.SetMagnification(MParam.Location_Magnification))
|
|
@@ -742,21 +720,7 @@ namespace MeasureThread
|
|
|
log.Info("停止键按下。", true);
|
|
|
return false;
|
|
|
}
|
|
|
- //8.控制FIB拍照
|
|
|
- //9.保存照片======更改路径
|
|
|
- //20201103,FIB使用定位的放大倍数
|
|
|
- String fileName2 = currHole.data_path + "\\" +currHole.HoleName + "_" + MParam.Location_Magnification.ToString("0") + "_" + ImageName2;
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- log.Info("停止键按下。", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
Thread.Sleep(200);
|
|
|
iSEM.SetAutoBright(100);
|
|
|
Thread.Sleep(200);
|
|
@@ -770,10 +734,9 @@ namespace MeasureThread
|
|
|
|
|
|
|
|
|
|
|
|
- //拍照前改变速度,延时
|
|
|
-
|
|
|
+ //8.控制FIB拍照
|
|
|
Thread.Sleep(200);
|
|
|
-
|
|
|
+ String fileName2 = currHole.data_path + "\\" + currHole.HoleName + "_" + MParam.Location_Magnification.ToString("0") + "_" + ImageName2;
|
|
|
m_photo.GetParam().Mag = MParam.Location_Magnification;
|
|
|
m_photo.GetParam().savePath = fileName2;
|
|
|
if (!m_photo.TakePhoto())
|
|
@@ -821,12 +784,6 @@ namespace MeasureThread
|
|
|
log.Error("测量线程报错:自动定位图像接口返回0", false);
|
|
|
return false;
|
|
|
}
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- log.Info("停止键按下", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
@@ -906,7 +863,7 @@ namespace MeasureThread
|
|
|
return false;
|
|
|
}
|
|
|
Thread.Sleep(1000);
|
|
|
-
|
|
|
+ mArgSend.SendArgumentToScreen("3-0", "SEM模式切换成功");
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -918,34 +875,34 @@ namespace MeasureThread
|
|
|
{
|
|
|
float x2 = 0, y2 = 0;
|
|
|
int state = 0;
|
|
|
- //切换到SEM模式
|
|
|
- if (!iSEM.CmdFIBModeSEM())
|
|
|
- {
|
|
|
+ ////切换到SEM模式
|
|
|
+ //if (!iSEM.CmdFIBModeSEM())
|
|
|
+ //{
|
|
|
|
|
|
- log.Error("测量线程报错:" + arg.Message, false);
|
|
|
- return false;
|
|
|
- }
|
|
|
- Thread.Sleep(1000);
|
|
|
+ // log.Error("测量线程报错:" + arg.Message, false);
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
+ //Thread.Sleep(1000);
|
|
|
|
|
|
- mArgSend.SendArgumentToScreen("3-0", "SEM模式切换成功");
|
|
|
+
|
|
|
|
|
|
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- log.Info("停止键按下", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
+ ////判断是否停止进程
|
|
|
+ //if (key_stop)
|
|
|
+ //{
|
|
|
+ // log.Info("停止键按下", true);
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
|
|
|
- //1.控制SEM放大到300倍
|
|
|
- log.Info("电压设置:" + MParam.Location_Voltage.ToString("0.0"));
|
|
|
- if (!iSEM.SetSEMVoltage(MParam.Location_Voltage))
|
|
|
- {
|
|
|
+
|
|
|
+ //log.Info("电压设置:" + MParam.Location_Voltage.ToString("0.0"));
|
|
|
+ //if (!iSEM.SetSEMVoltage(MParam.Location_Voltage))
|
|
|
+ //{
|
|
|
|
|
|
- log.Error("测量线程报错:" + arg.Message, false);
|
|
|
- return false;
|
|
|
- }
|
|
|
- Thread.Sleep(200);
|
|
|
+ // log.Error("测量线程报错:" + arg.Message, false);
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
+ //Thread.Sleep(200);
|
|
|
|
|
|
|
|
|
if (key_stop)
|
|
@@ -955,7 +912,7 @@ namespace MeasureThread
|
|
|
}
|
|
|
String fileName4 = currHole.data_path + "\\" + MParam.Firm + "-" + MParam.FindCrossMagnification.ToString("0") + "-" +currHole.HoleName + "-" + ImageName4;
|
|
|
//add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
- log.Info("fileName4====================" + fileName4, true);
|
|
|
+ log.Info("fileName4=" + fileName4, true);
|
|
|
float mag = MParam.FindCrossMagnification;
|
|
|
|
|
|
m_photo.GetParam().Mag = mag;
|
|
@@ -996,41 +953,37 @@ namespace MeasureThread
|
|
|
log.Info("fileName10====================" + fileName10, true);
|
|
|
m_photo.GetParam().savePath = fileName10;
|
|
|
|
|
|
- if (!m_photo.TakePhoto())
|
|
|
- {
|
|
|
+ //if (!m_photo.TakePhoto())
|
|
|
+ //{
|
|
|
|
|
|
- log.Error("测量线程报错:找到已切割的位置拍照失败", false);
|
|
|
- }
|
|
|
+ // log.Error("测量线程报错:找到已切割的位置拍照失败", false);
|
|
|
+ //}
|
|
|
|
|
|
|
|
|
- if (hand_intervene == 1)
|
|
|
- {
|
|
|
- MessageBox.Show("Web返回数据移动是否正确?\n如果错误请手动移动到指定位置后按确认", "确认消息", MessageBoxButtons.OK);
|
|
|
- }
|
|
|
+ //if (hand_intervene == 1)
|
|
|
+ //{
|
|
|
+ // MessageBox.Show("Web返回数据移动是否正确?\n如果错误请手动移动到指定位置后按确认", "确认消息", MessageBoxButtons.OK);
|
|
|
+ //}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
- if (hand_intervene == 1)
|
|
|
- {
|
|
|
- if (DialogResult.Yes != MessageBox.Show("网络参数State返回为0。\n是否继续操作?。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ //if (hand_intervene == 1)
|
|
|
+ //{
|
|
|
+ // if (DialogResult.Yes != MessageBox.Show("网络参数State返回为0。\n是否继续操作?。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
+ // {
|
|
|
+ // return false;
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
log.Error("测量线程报错:" + arg.Message, false);
|
|
|
return false;
|
|
|
}
|
|
|
//判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- log.Info("停止键按下", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -1063,11 +1016,11 @@ namespace MeasureThread
|
|
|
workingDis = 5.0f,
|
|
|
|
|
|
};
|
|
|
- if (MParam.Is_Photograph == false)
|
|
|
- {
|
|
|
+ //if (MParam.Is_Photograph == false)
|
|
|
+ //{
|
|
|
|
|
|
- fprm.tiltCorrAngle = MParam.Correction_Angle;
|
|
|
- }
|
|
|
+ // fprm.tiltCorrAngle = MParam.Correction_Angle;
|
|
|
+ //}
|
|
|
//add by sun 2020-12-17 解决3大类样品FIB下亮度过白导致无法识别问题
|
|
|
float m_TempBrightness;
|
|
|
float m_TempContrast;
|
|
@@ -1087,7 +1040,7 @@ namespace MeasureThread
|
|
|
fprm.brightness = m_TempBrightness;
|
|
|
fprm.contrast = m_TempContrast;
|
|
|
m_focuse.setFocusParam(fprm);
|
|
|
- m_focuse.DoFocus();
|
|
|
+ m_focuse.DoFocusBySetMainParameter();
|
|
|
|
|
|
|
|
|
|
|
@@ -1105,7 +1058,7 @@ namespace MeasureThread
|
|
|
//add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
String fileName5 = currHole.data_path + "\\" + MParam.Firm + "-" + MParam.Photograph_Magnification.ToString("0") + "-" + currHole.HoleName + "-" + ImageName5;
|
|
|
//add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
- log.Info("fileName5====================" + fileName5, true);
|
|
|
+ log.Info("fileName5=" + fileName5, true);
|
|
|
|
|
|
|
|
|
|
|
@@ -1115,8 +1068,7 @@ namespace MeasureThread
|
|
|
{
|
|
|
Mag = MParam.Photograph_Magnification,
|
|
|
savePath=fileName5,
|
|
|
- //scanSpeed=MParam.ScanSpeedHigh,
|
|
|
- //scanSpeedAfter=MParam.ScanSpeedNormal,
|
|
|
+
|
|
|
};
|
|
|
|
|
|
m_photo.SetPhotoParam(phop);
|
|
@@ -1145,7 +1097,7 @@ namespace MeasureThread
|
|
|
int direction = 0;
|
|
|
|
|
|
ImagePro.Img_Center_Position_OffsetAngle_Direction(fileName5, Convert.ToInt32(MParam.SampleName), MParam.Firm, out degree, out direction, out state);
|
|
|
- log.Info("测量线程:2000倍===拍照角度移动,输入图像" + fileName5 + "输出角度为" + degree.ToString() + "输出方向为" + direction.ToString() + "返回值为" + state.ToString(), true);
|
|
|
+ log.Info("测量线程:2000倍 拍照角度移动,输入图像" + fileName5 + "输出角度为" + degree.ToString() + "输出方向为" + direction.ToString() + "返回值为" + state.ToString(), true);
|
|
|
log.Info("样品" + currHole.HoleNo.ToString() + "计算切割面区域的角度=" + degree.ToString(), true);
|
|
|
//接口返回像素,*pixelsize,得到坐标点。判断移动方式
|
|
|
if (state == 1)
|
|
@@ -1179,22 +1131,30 @@ namespace MeasureThread
|
|
|
|
|
|
Thread.Sleep(200);
|
|
|
|
|
|
- //12拍照
|
|
|
- //String fileName6 = data_path + "\\" + currHole.HoleName + "_" + MParam.Photograph_Magnification.ToString("0") + "_" + ImageName6;
|
|
|
- //add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
- String fileName6 =currHole.data_path + "\\" + MParam.Firm + "-" + MParam.Photograph_Magnification.ToString("0") + "-" + currHole.HoleName + "-" + ImageName6;
|
|
|
- //add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
- log.Info("fileName6====================" + fileName6, true);
|
|
|
+ String fileName6;
|
|
|
+ if (degree == 0)
|
|
|
+ {
|
|
|
+ fileName6 = fileName5;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //12拍照
|
|
|
+
|
|
|
+ //add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
+ fileName6 =currHole.data_path + "\\" + MParam.Firm + "-" + MParam.Photograph_Magnification.ToString("0") + "-" + currHole.HoleName + "-" + ImageName6;
|
|
|
+ //add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
+ log.Info("fileName6=" + fileName6, true);
|
|
|
|
|
|
|
|
|
- m_photo.GetParam().savePath = fileName6;
|
|
|
- if (!m_photo.TakePhoto())
|
|
|
- {
|
|
|
- log.Error("测量线程报错:" + arg.Message, false);
|
|
|
- return false;
|
|
|
+ m_photo.GetParam().savePath = fileName6;
|
|
|
+ if (!m_photo.TakePhoto())
|
|
|
+ {
|
|
|
+ log.Error("测量线程报错:" + arg.Message, false);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
mArgSend.SendArgumentToScreen("3-9", "SEM拍照成功", fileName6);
|
|
|
if (key_stop)
|
|
|
{
|
|
@@ -1253,12 +1213,8 @@ namespace MeasureThread
|
|
|
+ "," + ct0.Y.ToString() + ")", true);
|
|
|
|
|
|
Thread.Sleep(200);
|
|
|
- //add by sun 2020-12-15 拍截面图调用蔡司接口时,要保证扫描速度5以上,自动亮度对比度功能关闭
|
|
|
- iSEM.CmdFocusScanSpeed(MParam.ScanSpeedFocus);//CmdFocusRate(5);
|
|
|
- //add by sun 2020-12-15 拍截面图调用蔡司接口时,要保证扫描速度5以上,自动亮度对比度功能关闭 end
|
|
|
- Thread.Sleep(200);
|
|
|
- cycle_time = iSEM.GetCycleTime();
|
|
|
- Thread.Sleep(100 + Convert.ToInt32(cycle_time));
|
|
|
+
|
|
|
+
|
|
|
|
|
|
//循环升级对焦,每次放大3000倍
|
|
|
|
|
@@ -1283,7 +1239,7 @@ namespace MeasureThread
|
|
|
|
|
|
fprm.mag = curmag;
|
|
|
m_focuse.setFocusParam(fprm);
|
|
|
- m_focuse.DoFocus();
|
|
|
+ m_focuse.DoFocusBySetMainParameter();
|
|
|
|
|
|
|
|
|
}
|
|
@@ -1311,7 +1267,7 @@ namespace MeasureThread
|
|
|
//移动到第一个点失败
|
|
|
log.Error("测量线程报错:移动到点(" + ct[n].X.ToString() + "," + ct[n].Y.ToString() + ")失败", false);
|
|
|
}
|
|
|
- Thread.Sleep(1000);
|
|
|
+
|
|
|
log.Info("测量线程:移动到第1个点( " + ct[n].X.ToString()
|
|
|
+ "," + ct[n].Y.ToString() + ")", true);
|
|
|
#endregion
|
|
@@ -1323,18 +1279,16 @@ namespace MeasureThread
|
|
|
//add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
String fileName7 =currHole. data_path + "\\" + MParam.Firm + "-" + mag[n].ToString() + "-" + currHole.HoleName + "-" + n.ToString() + "-" + ImageNameTwo_1;
|
|
|
//add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
- log.Info("fileName7====================" + fileName7, true);
|
|
|
+ log.Info("fileName7=" + fileName7, true);
|
|
|
|
|
|
|
|
|
|
|
|
- log.Info("========测量线程:移动到第一个点位置完成!", true);
|
|
|
+ log.Info("测量线程:移动到第一个点位置完成!", true);
|
|
|
|
|
|
m_photo.GetParam().savePath = fileName7;
|
|
|
m_photo.GetParam().Mag = mag[n];
|
|
|
|
|
|
m_photo.TakePhoto();
|
|
|
-
|
|
|
-
|
|
|
|
|
|
iSEM.CmdPixelScan();
|
|
|
Thread.Sleep(200);
|
|
@@ -1400,34 +1354,43 @@ namespace MeasureThread
|
|
|
// add by zjx 2020-12-18 为了测试只做能谱部分
|
|
|
if (MParam.IsonlyEDSForDebug == true)
|
|
|
{
|
|
|
- //add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA
|
|
|
- log.Warn("测量线程:第一孔=====设置拍照电压 123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA 目前是第 " + MParam.SampleName + " 类!", true);
|
|
|
- if (!SetVoltageAndIPROBE())
|
|
|
+ //第一步:位置恢复
|
|
|
+ #region 第一步:坐标恢复
|
|
|
+ log.Info("测量线程:恢复样品分析点位置(R,X,Y,Z) = (" + currHole.Position.R.ToString() + ","
|
|
|
+ + currHole.Position.X.ToString() + ","
|
|
|
+ + currHole.Position.Y.ToString() + ","
|
|
|
+ + currHole.Position.Z.ToString() + ")", true);
|
|
|
+ Locate lo = new Locate(iSEM);
|
|
|
+ lo.LocateCutHolePosition(currHole, MParam.Tilt);
|
|
|
+
|
|
|
+ if (key_stop)
|
|
|
{
|
|
|
- log.Error("测量线程:第一孔=====设置电压电流失败!目前是第 " + MParam.SampleName + " 类!", false);
|
|
|
+
|
|
|
+ log.Info("停止键被按下", true);
|
|
|
return false;
|
|
|
}
|
|
|
- //add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA end
|
|
|
+ arg.HoleName = currHole.HoleName;
|
|
|
+ arg.State = true;
|
|
|
+ arg.Message = "样品台移动到观测点:" + currHole.HoleName + "的位置成功。";
|
|
|
+ SendMsg("0-0");
|
|
|
|
|
|
- //设置拉直的放大倍数
|
|
|
- log.Info("测量线程:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数,放大倍数为" + MParam.Stretch_Magnification.ToString(), true);
|
|
|
-
|
|
|
- if (!m_focuse.SetMagnification(MParam.Stretch_Magnification))
|
|
|
+
|
|
|
+ #endregion
|
|
|
+ //第二步:设置电流电压
|
|
|
+ //add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA
|
|
|
+ log.Warn("测量线程:设置拍照电压 123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA 目前是第 " + MParam.SampleName + " 类!", true);
|
|
|
+ if (!SetVoltageAndIPROBE())
|
|
|
{
|
|
|
- log.Error("测量线程报错:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数失败,放大倍数为" + MParam.Stretch_Magnification.ToString(), false);
|
|
|
-
|
|
|
+ log.Error("测量线程:设置电压电流失败!目前是第 " + MParam.SampleName + " 类!", false);
|
|
|
return false;
|
|
|
- }
|
|
|
-
|
|
|
- arg.Message = "拉直放大倍数设置成功!";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("0-1");
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
- //自动化流程-每个点都需要补偿54度
|
|
|
+ //第三步:自动化流程-每个点都需要补偿54度
|
|
|
if (MParam.Is_Photograph == false)
|
|
|
{
|
|
|
- log.Info("测量线程:第一个孔的测试过程-倾斜补偿角度为54度", true);
|
|
|
+ log.Info("测量线程:倾斜补偿角度为54度", true);
|
|
|
if (!m_focuse. TiltCorrection(54.0f))
|
|
|
{
|
|
|
log.Error("测量线程报错:倾斜补偿角度为54度失败", false);
|
|
@@ -1436,7 +1399,7 @@ namespace MeasureThread
|
|
|
}
|
|
|
arg.Message = "角度补偿54度成功!";
|
|
|
arg.State = true;
|
|
|
- SendMsg("0-2");
|
|
|
+ SendMsg("0-1");
|
|
|
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
@@ -1446,16 +1409,28 @@ namespace MeasureThread
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 2是5/6类样品,不需要拉直
|
|
|
+ //第四步:拉直 ( 2是5/6类样品,不需要拉直)
|
|
|
if (MParam.SampleName != "2")
|
|
|
{
|
|
|
- log.Warn("测量线程:第一个孔的测试过程-拉直操作开始!", true);
|
|
|
+ //设置拉直的放大倍数
|
|
|
+ log.Info("测量线程:设置SEM放大倍数为拉直放大倍数,放大倍数为" + MParam.Stretch_Magnification.ToString(), true);
|
|
|
+
|
|
|
+ if (!m_focuse.SetMagnification(MParam.Stretch_Magnification))
|
|
|
+ {
|
|
|
+ log.Error("测量线程报错:设置SEM放大倍数为拉直放大倍数失败,放大倍数为" + MParam.Stretch_Magnification.ToString(), false);
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ arg.Message = "拉直放大倍数设置成功!";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("0-2");
|
|
|
+ log.Warn("测量线程:拉直操作开始!", true);
|
|
|
if (!Straighten_Handle(currHole))
|
|
|
{
|
|
|
- log.Info("测量线程报错:第一个孔的测试过程-拉直操作失败。", true);
|
|
|
+ log.Info("测量线程报错:拉直操作失败。", true);
|
|
|
return false;
|
|
|
}
|
|
|
- log.Info("测量线程:第一个孔的测试过程-拉直操作结束!", true);
|
|
|
+ log.Info("测量线程:拉直操作结束!", true);
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
@@ -1480,9 +1455,8 @@ namespace MeasureThread
|
|
|
Thread.Sleep(200);
|
|
|
}
|
|
|
|
|
|
- //13. 自动 定位功能 PT沉积
|
|
|
-
|
|
|
- if (!MParam.Is_Photograph)
|
|
|
+ //第五步: 定位功能 PT沉积
|
|
|
+ if (MParam.Is_Photograph==false)
|
|
|
{
|
|
|
log.Warn("测量线程:PIB切割自动定位开始!", true);
|
|
|
if (!GetFIBPoistion(currHole))
|
|
@@ -1506,7 +1480,7 @@ namespace MeasureThread
|
|
|
|
|
|
|
|
|
|
|
|
- log.Info("测量线程:第一个孔的测试过程-自动定位结束!", true);
|
|
|
+ log.Info("测量线程:自动定位结束!", true);
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
@@ -1572,7 +1546,7 @@ namespace MeasureThread
|
|
|
//18.自动层高分析
|
|
|
if (MParam.Is_Photograph == false)
|
|
|
{
|
|
|
- log.Warn("测量线程:第一个孔的测试过程-18.自动层高分析开始", true);
|
|
|
+ log.Warn("测量线程:18.自动层高分析开始", true);
|
|
|
float size = iSEM.GetPixelSize();
|
|
|
int state = 1;
|
|
|
ImagePro.Img_Measure_Height(limg_path, lsize, currHole.data_path + "\\", Convert.ToInt32(MParam.SampleName), MParam.Firm, out state);
|
|
@@ -1585,7 +1559,7 @@ namespace MeasureThread
|
|
|
arg.State = true;
|
|
|
arg.Message = "测量尺寸成功";
|
|
|
SendMsg("3-12");
|
|
|
- log.Info("测量线程:第一个孔的测试过程-18.自动层高分析结束!", true);
|
|
|
+ log.Info("测量线程:18.自动层高分析结束!", true);
|
|
|
}
|
|
|
}
|
|
|
//add by zjx 2020-12-18 为了测试只做能谱部分 end
|
|
@@ -1596,9 +1570,9 @@ namespace MeasureThread
|
|
|
|
|
|
if (currHole.HoleNo + 1 == m_cutHoles.Count)//最后样品分析点才跑能谱
|
|
|
{
|
|
|
- log.Warn("测量线程:第一个孔的测试过程-19.能谱分析开始===" + MParam.EDS, true);
|
|
|
+ log.Warn("测量线程:19.能谱分析开始===" + MParam.EDS, true);
|
|
|
EDS_Analysis(currHole);
|
|
|
- log.Info("测量线程:第一个孔的测试过程-19.能谱分析结束===" + MParam.EDS, true);
|
|
|
+ log.Info("测量线程:19.能谱分析结束===" + MParam.EDS, true);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1614,23 +1588,12 @@ namespace MeasureThread
|
|
|
//初始化拉直操作
|
|
|
public bool Straighten_Handle(CutHole currHole)
|
|
|
{
|
|
|
- if (MParam.Tilt)
|
|
|
- {
|
|
|
- //倾斜样品台,SEM视野是黑色的
|
|
|
- log.Info("测量线程:恢复到工作位置后重新调亮图像。", true);
|
|
|
- if (!iSEM.SetWorkingDistance(currHole.Position.WD))//5.1mm
|
|
|
- {
|
|
|
- log.Error("测量线程报错:重新设置到标准工作距离失败。", false);
|
|
|
- return false;
|
|
|
- }
|
|
|
- Thread.Sleep(7000); //自动亮度对比度使用
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
//1、自动对焦
|
|
|
log.Info("测量线程:拉直操作前自动对焦开始", true);
|
|
|
-
|
|
|
|
|
|
+
|
|
|
var p = new Focusparam();
|
|
|
|
|
|
p.IfAutoBrightnessAndContrast = true;
|
|
@@ -1638,9 +1601,9 @@ namespace MeasureThread
|
|
|
p.reduceWindowPos = new System.Drawing.Point(402, 128);
|
|
|
p.reduceWinWidth = 400;
|
|
|
p.reduceWinHeight = 400;
|
|
|
- p.workingDis = currHole.Position.WD;
|
|
|
+
|
|
|
m_focuse.setFocusParam(p);
|
|
|
- if (!m_focuse.DoFocusByNewMagnification(p.mag))
|
|
|
+ if (!m_focuse.DoFocusByNewMagnification(MParam.Stretch_Magnification))
|
|
|
{
|
|
|
log.Error("测量线程报错:拉直操作自动对焦失败,程序退出。", false);
|
|
|
|
|
@@ -1713,10 +1676,7 @@ namespace MeasureThread
|
|
|
log.Info("停止键按下", true);
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
- //4、设置WD
|
|
|
- iSEM.SetWorkingDistance(currHole.Position.WD);
|
|
|
- Thread.Sleep(1000);
|
|
|
+
|
|
|
}
|
|
|
arg.Message = "拉直操作完成";
|
|
|
arg.State = true;
|
|
@@ -2096,10 +2056,6 @@ namespace MeasureThread
|
|
|
ifStig = false,
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
log.Info("自动对焦开始!", true);
|
|
|
|
|
@@ -2145,19 +2101,22 @@ namespace MeasureThread
|
|
|
log.Info("测量线程:2000倍===拍照角度移动,输入图像" + fileName5 + "输出角度为" + degree.ToString() + "输出方向为" + direction.ToString() + "返回值为" + state.ToString(), true);
|
|
|
log.Info("样品" + currHole.HoleNo.ToString() + "计算切割面区域的角度=" + degree.ToString(), true);
|
|
|
//接口返回像素,*pixelsize,得到坐标点。判断移动方式
|
|
|
- if (state == 1)
|
|
|
+ if (state == 1 )
|
|
|
{
|
|
|
- //梯形角度
|
|
|
- iSEM.SetScanRotationOn();
|
|
|
- Thread.Sleep(200);
|
|
|
- //20201128陈工要求,谭博返回角度*0.7
|
|
|
+ if (Math.Abs(degree) > 0)
|
|
|
+ {
|
|
|
+ //梯形角度
|
|
|
+ iSEM.SetScanRotationOn();
|
|
|
+ Thread.Sleep(200);
|
|
|
+ //20201128陈工要求,谭博返回角度*0.7
|
|
|
|
|
|
- iSEM.SetScanRotation(Convert.ToSingle(degree * 0.7));
|
|
|
- Thread.Sleep(200);
|
|
|
+ iSEM.SetScanRotation(Convert.ToSingle(degree * 0.7));
|
|
|
+ Thread.Sleep(200);
|
|
|
|
|
|
- arg.State = true;
|
|
|
- arg.Message = "图像接口返回角度为:" + degree.ToString();
|
|
|
- log.Info(arg.Message);
|
|
|
+ arg.State = true;
|
|
|
+ arg.Message = "图像接口返回角度为:" + degree.ToString();
|
|
|
+ log.Info(arg.Message);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|
|
@@ -2175,21 +2134,28 @@ namespace MeasureThread
|
|
|
}
|
|
|
|
|
|
Thread.Sleep(200);
|
|
|
+ String fileName6;
|
|
|
+ if (Math.Abs(degree) > 0)
|
|
|
+ {
|
|
|
+ //add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
+ fileName6 = currHole.data_path + "\\EDS\\" + MParam.Firm + "-" + MParam.Photograph_Magnification.ToString("0") + "-" + currHole.HoleName + "-" + ImageName6;
|
|
|
+ //add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
+ log.Info("fileName6=" + fileName6, true);
|
|
|
+ log.Info("纠正后拍照!");
|
|
|
+ PhotoParam phoprm = new PhotoParam()
|
|
|
+ {
|
|
|
+ Mag = MParam.Photograph_Magnification,
|
|
|
+ savePath = fileName6,
|
|
|
+ };
|
|
|
|
|
|
-
|
|
|
- //add by zjx 2020-12-21 根据客户的需求修改图片的名称
|
|
|
- String fileName6 = currHole. data_path + "\\EDS\\" + MParam.Firm + "-" + MParam.Photograph_Magnification.ToString("0") + "-" + currHole.HoleName + "-" + ImageName6;
|
|
|
- //add by zjx 2020-12-21 根据客户的需求修改图片的名称 end
|
|
|
- log.Info("fileName6=" + fileName6, true);
|
|
|
- log.Info("纠正后拍照!");
|
|
|
- PhotoParam phoprm = new PhotoParam()
|
|
|
+ m_photo.SetPhotoParam(phoprm);
|
|
|
+ m_photo.TakePhoto();
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- Mag = MParam.Photograph_Magnification,
|
|
|
- savePath=fileName6,
|
|
|
- };
|
|
|
+ fileName6 = fileName5;
|
|
|
+ }
|
|
|
|
|
|
- m_photo.SetPhotoParam(phoprm);
|
|
|
- m_photo.TakePhoto();
|
|
|
|
|
|
if (key_stop)
|
|
|
{
|
|
@@ -2263,7 +2229,7 @@ namespace MeasureThread
|
|
|
log.Info("自动对焦1开始!", true);
|
|
|
|
|
|
m_focuse.setFocusParam(fprm1);
|
|
|
- m_focuse.DoFocus();
|
|
|
+ m_focuse.DoFocusBySetMainParameter();
|
|
|
|
|
|
|
|
|
log.Info("自动对焦2开始!", true);
|
|
@@ -2299,7 +2265,7 @@ namespace MeasureThread
|
|
|
|
|
|
m_focuse.SetMagnification(mag[0]);
|
|
|
|
|
|
- m_photo.EnforceContrast();
|
|
|
+ // m_photo.EnforceContrast();
|
|
|
|
|
|
log.Warn("EDS获取指定观测点图片,并打Xray");
|
|
|
DoEDS(currHole, 1);
|
|
@@ -2380,7 +2346,7 @@ namespace MeasureThread
|
|
|
};
|
|
|
|
|
|
m_focuse.setFocusParam(focusPrm);
|
|
|
- m_focuse.DoFocus();
|
|
|
+ m_focuse.DoFocusBySetMainParameter();
|
|
|
|
|
|
SendMsg("4-1");
|
|
|
log.Warn("开始梯形移到视野中心!");
|