|
@@ -2608,189 +2608,189 @@ namespace MeasureThread
|
|
|
public bool FirstHole()
|
|
|
{
|
|
|
// add by zjx 2020-12-18 为了测试只做能谱部分
|
|
|
- if (m_measureFile.MParam.IsonlyEDSForDebug == true)
|
|
|
+ if (m_measureFile.MParam.IsonlyEDSForDebug == false)
|
|
|
{
|
|
|
//add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA
|
|
|
LogManager.AddHardwareLog("测量线程:第一孔=====设置拍照电压 123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA 目前是第 " + m_measureFile.MParam.SampleName + " 类!", true);
|
|
|
- if (!SetVoltageAndIPROBE())
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一孔=====设置电压电流失败!目前是第 " + m_measureFile.MParam.SampleName + " 类!", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
- //add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA end
|
|
|
+ if (!SetVoltageAndIPROBE())
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一孔=====设置电压电流失败!目前是第 " + m_measureFile.MParam.SampleName + " 类!", true);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //add by sun 2020-12-17 不同样品电压、电流不一致,应设置灵活。123456类电压2000V电流200pA,7类5000V 500pA,能谱 7000V 500pA end
|
|
|
|
|
|
- //设置拉直的放大倍数
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数,放大倍数为" + m_measureFile.MParam.Stretch_Magnification.ToString(), true);
|
|
|
+ //设置拉直的放大倍数
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数,放大倍数为" + m_measureFile.MParam.Stretch_Magnification.ToString(), true);
|
|
|
|
|
|
- if (!iSEM.SetMagnification(m_measureFile.MParam.Stretch_Magnification))
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程报错:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数失败,放大倍数为" + m_measureFile.MParam.Stretch_Magnification.ToString(), false);
|
|
|
- arg.Message = "测量线程报错:拉直放大倍数设置失败!";
|
|
|
- arg.State = false;
|
|
|
+ if (!iSEM.SetMagnification(m_measureFile.MParam.Stretch_Magnification))
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程报错:第一个孔的测试过程-设置SEM放大倍数为拉直放大倍数失败,放大倍数为" + m_measureFile.MParam.Stretch_Magnification.ToString(), false);
|
|
|
+ arg.Message = "测量线程报错:拉直放大倍数设置失败!";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-1");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ float current = iSEM.GetMagnification();
|
|
|
+ while (Math.Abs(current - m_measureFile.MParam.Stretch_Magnification) > 1)
|
|
|
+ {
|
|
|
+ iSEM.SetMagnification(m_measureFile.MParam.Stretch_Magnification);
|
|
|
+ Thread.Sleep(200);
|
|
|
+ current = iSEM.GetMagnification();
|
|
|
+ }
|
|
|
+ arg.Message = "拉直放大倍数设置成功!";
|
|
|
+ arg.State = true;
|
|
|
SendMsg("1-1");
|
|
|
- return false;
|
|
|
- }
|
|
|
- float current = iSEM.GetMagnification();
|
|
|
- while (Math.Abs(current - m_measureFile.MParam.Stretch_Magnification) > 1)
|
|
|
- {
|
|
|
- iSEM.SetMagnification(m_measureFile.MParam.Stretch_Magnification);
|
|
|
- Thread.Sleep(200);
|
|
|
- current = iSEM.GetMagnification();
|
|
|
- }
|
|
|
- arg.Message = "拉直放大倍数设置成功!";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-1");
|
|
|
- Thread.Sleep(2000);
|
|
|
+ Thread.Sleep(2000);
|
|
|
|
|
|
- //自动化流程-每个点都需要补偿54度
|
|
|
- if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-倾斜补偿角度为54度", true);
|
|
|
- if (!TiltCorrection(54.0f))
|
|
|
+ //自动化流程-每个点都需要补偿54度
|
|
|
+ if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
{
|
|
|
- LogManager.AddHardwareLog("测量线程报错:倾斜补偿角度为54度失败", false);
|
|
|
- arg.Message = "角度补偿54度失败!";
|
|
|
- arg.State = false;
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-倾斜补偿角度为54度", true);
|
|
|
+ if (!TiltCorrection(54.0f))
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程报错:倾斜补偿角度为54度失败", false);
|
|
|
+ arg.Message = "角度补偿54度失败!";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-2");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ arg.Message = "角度补偿54度成功!";
|
|
|
+ arg.State = true;
|
|
|
SendMsg("1-2");
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("停止键按下", true);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2是5/6类样品,不需要拉直
|
|
|
+ if (m_measureFile.MParam.SampleName != "2")
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-拉直操作开始!", true);
|
|
|
+ if (!Straighten_Handle())
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程报错:第一个孔的测试过程-拉直操作失败。", true);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-拉直操作结束!", true);
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("停止键按下。", true);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ arg.Message = "拉直操作自动对焦成功!";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-3");
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ arg.Message = "拉直拍照成功!";
|
|
|
+ arg.Picture_Information.Picture_FullPath = "";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-4");
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ arg.Message = "拉直操作完成";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-5");
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ //13. 自动 定位功能
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-自动定位开始!", true);
|
|
|
+ if (!GetPoistion())
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程报错:自动定位失败,程序退出。", false);
|
|
|
return false;
|
|
|
}
|
|
|
- arg.Message = "角度补偿54度成功!";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-2");
|
|
|
- Thread.Sleep(1000);
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-自动定位结束!", true);
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
|
- LogManager.AddHardwareLog("停止键按下", true);
|
|
|
+ LogManager.AddHardwareLog("停止键按下。", true);
|
|
|
return false;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // 2是5/6类样品,不需要拉直
|
|
|
- if (m_measureFile.MParam.SampleName != "2")
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-拉直操作开始!", true);
|
|
|
- if (!Straighten_Handle())
|
|
|
+ //14.自动控制FIB切割 del by sun 2020-12-15 temp
|
|
|
+ if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
{
|
|
|
- LogManager.AddHardwareLog("测量线程报错:第一个孔的测试过程-拉直操作失败。", true);
|
|
|
- return false;
|
|
|
+ if (m_measureFile.MParam.IsCutingForDebug)
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-14.自动控制FIB切割开始!==" + m_measureFile.MParam.IsCutingForDebug, true);
|
|
|
+ if (!FIBCross())
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程报错:自动控制FIB切割失败。", false);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-14.自动控制FIB切割结束!", true);
|
|
|
+ }
|
|
|
}
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-拉直操作结束!", true);
|
|
|
+ //del by sun 2020-12-15 temp end
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
|
- LogManager.AddHardwareLog("停止键按下。", true);
|
|
|
return false;
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- arg.Message = "拉直操作自动对焦成功!";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-3");
|
|
|
- Thread.Sleep(1000);
|
|
|
- arg.Message = "拉直拍照成功!";
|
|
|
- arg.Picture_Information.Picture_FullPath = "";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-4");
|
|
|
- Thread.Sleep(1000);
|
|
|
- arg.Message = "拉直操作完成";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-5");
|
|
|
- Thread.Sleep(1000);
|
|
|
- }
|
|
|
|
|
|
- //13. 自动 定位功能
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-自动定位开始!", true);
|
|
|
- if (!GetPoistion())
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程报错:自动定位失败,程序退出。", false);
|
|
|
- return false;
|
|
|
- }
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-自动定位结束!", true);
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("停止键按下。", true);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //14.自动控制FIB切割 del by sun 2020-12-15 temp
|
|
|
- if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
- {
|
|
|
- if (m_measureFile.MParam.IsCutingForDebug)
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-14.自动控制FIB切割开始!=="+ m_measureFile.MParam.IsCutingForDebug, true);
|
|
|
- if (!FIBCross())
|
|
|
+ //16.找到切割位置
|
|
|
+ if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-16.找到切割位置开始!", true);
|
|
|
+ if (!FindCross())
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-16.找到切割位置结束!", true);
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
{
|
|
|
- LogManager.AddHardwareLog("测量线程报错:自动控制FIB切割失败。", false);
|
|
|
return false;
|
|
|
}
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-14.自动控制FIB切割结束!", true);
|
|
|
}
|
|
|
- }
|
|
|
- //del by sun 2020-12-15 temp end
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //16.找到切割位置
|
|
|
- if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-16.找到切割位置开始!", true);
|
|
|
- if (!FindCross())
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-17.自动控制SEM拍截面照开始", true);
|
|
|
+ //将过程17最后的拍照图片提出给18步进行调用
|
|
|
+ List<String> limg_path = new List<string>();
|
|
|
+ List<float> lsize = new List<float>();
|
|
|
+ //17.自动控制SEM拍截面照
|
|
|
+ if (!ShotSection(ref limg_path, ref lsize))
|
|
|
{
|
|
|
- return false;
|
|
|
+ //return false;
|
|
|
}
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-16.找到切割位置结束!", true);
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-17.自动控制SEM拍截面照结束!", true);
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
- }
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-17.自动控制SEM拍截面照开始", true);
|
|
|
- //将过程17最后的拍照图片提出给18步进行调用
|
|
|
- List<String> limg_path = new List<string>();
|
|
|
- List<float> lsize = new List<float>();
|
|
|
- //17.自动控制SEM拍截面照
|
|
|
- if (!ShotSection(ref limg_path, ref lsize))
|
|
|
- {
|
|
|
- //return false;
|
|
|
- }
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-17.自动控制SEM拍截面照结束!", true);
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
|
|
|
- //这段是临时的
|
|
|
- //arg.State = true;
|
|
|
- //arg.Message = "测量尺寸成功";
|
|
|
- //SendMsg("1-40");
|
|
|
-
|
|
|
- //18.自动层高分析
|
|
|
- if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-18.自动层高分析开始", true);
|
|
|
- float size = iSEM.GetPixelSize();
|
|
|
- int state = 1;
|
|
|
- wr.Img_Measure_Height(limg_path, lsize, data_path + "\\", Convert.ToInt32(m_measureFile.MParam.SampleName), m_measureFile.MParam.Firm, out state);
|
|
|
- if (state == 0)
|
|
|
+ //这段是临时的
|
|
|
+ //arg.State = true;
|
|
|
+ //arg.Message = "测量尺寸成功";
|
|
|
+ //SendMsg("1-40");
|
|
|
+
|
|
|
+ //18.自动层高分析
|
|
|
+ if (m_measureFile.MParam.Is_Photograph == false)
|
|
|
{
|
|
|
- arg.Message = "测量尺寸失败";
|
|
|
- arg.State = false;
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-18.自动层高分析开始", true);
|
|
|
+ float size = iSEM.GetPixelSize();
|
|
|
+ int state = 1;
|
|
|
+ wr.Img_Measure_Height(limg_path, lsize, data_path + "\\", Convert.ToInt32(m_measureFile.MParam.SampleName), m_measureFile.MParam.Firm, out state);
|
|
|
+ if (state == 0)
|
|
|
+ {
|
|
|
+ arg.Message = "测量尺寸失败";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-40");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ arg.State = true;
|
|
|
+ arg.Message = "测量尺寸成功";
|
|
|
SendMsg("1-40");
|
|
|
- return false;
|
|
|
+ LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-18.自动层高分析结束!", true);
|
|
|
}
|
|
|
- arg.State = true;
|
|
|
- arg.Message = "测量尺寸成功";
|
|
|
- SendMsg("1-40");
|
|
|
- LogManager.AddHardwareLog("测量线程:第一个孔的测试过程-18.自动层高分析结束!", true);
|
|
|
- }
|
|
|
}
|
|
|
//add by zjx 2020-12-18 为了测试只做能谱部分 end
|
|
|
//19.能谱分析
|