|
|
@@ -643,6 +643,48 @@ namespace MeasureThread
|
|
|
//SendCutHoleMsg(((int)ThreadState.InProcess).ToString(), m_cutHoles[i].HoleName);
|
|
|
SendCutHoleMsg(((int)m_cutHoles[i].STATE).ToString(), m_cutHoles[i].HoleName);
|
|
|
|
|
|
+ //1、移动样品台到第一个观测点,先移动R轴,再移动XY轴
|
|
|
+ if (!iSEM.SetStageGotoR(m_cutHoles[0].Position.R))
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("样品台R轴移动失败。", true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(5000);
|
|
|
+ if (iSEM.GetStageIs() == 0)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //移动XY轴
|
|
|
+ if (!iSEM.MoveStageXY(m_cutHoles[0].Position.X, m_cutHoles[0].Position.Y))
|
|
|
+ {
|
|
|
+ LogManager.AddHardwareLog("样品台XY轴移动失败。", true);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(5000);
|
|
|
+
|
|
|
+ if (iSEM.GetStageIs() == 0)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
//成功
|
|
|
if (FirstHole())
|
|
|
{
|
|
|
@@ -968,7 +1010,7 @@ namespace MeasureThread
|
|
|
}
|
|
|
|
|
|
//3.控制SEM拍照,找到切割位置
|
|
|
- String fileName1 = data_path + "\\" + m_cutHoles[m_nWorkHoleNo].HoleName + "_" + m_MsParam.Location_Magnification.ToString("0") + ImageName1;
|
|
|
+ String fileName1 = data_path + "\\" + m_cutHoles[m_nWorkHoleNo].HoleName + "_" + m_MsParam.Location_Magnification.ToString("0") + "_" + ImageName1;
|
|
|
arg.Picture_Information.Picture_FullPath = fileName1;
|
|
|
arg.Picture_Information.Work_Voltage = m_MsParam.Location_Voltage;
|
|
|
arg.Picture_Information.Magnification = m_MsParam.Location_Magnification;
|
|
|
@@ -1665,17 +1707,19 @@ namespace MeasureThread
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- //6、获取偏移坐标,7、移动到位
|
|
|
- //if (DialogResult.Yes == MessageBox.Show("是否手动移动样品台到指定位置?\n如果点击取消则会调用Web接口。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
- //{
|
|
|
- // arg.Message = "样品台移动到指定位置";
|
|
|
- // arg.State = true;
|
|
|
- // SendMsg("1-26");
|
|
|
- // x1 = iSEM.GetStageAtX();
|
|
|
- // y1 = iSEM.GetStageAtY();
|
|
|
- //}
|
|
|
- //else
|
|
|
- //{
|
|
|
+ if (m_MsParam.Is_Photograph == false)
|
|
|
+ {
|
|
|
+ //6、获取偏移坐标,7、移动到位
|
|
|
+ //if (DialogResult.Yes == MessageBox.Show("是否手动移动样品台到指定位置?\n如果点击取消则会调用Web接口。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
+ //{
|
|
|
+ // arg.Message = "样品台移动到指定位置";
|
|
|
+ // arg.State = true;
|
|
|
+ // SendMsg("1-26");
|
|
|
+ // x1 = iSEM.GetStageAtX();
|
|
|
+ // y1 = iSEM.GetStageAtY();
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
//8,计算切割面区域偏移角度及方向
|
|
|
float degree = 0;
|
|
|
int direction = 0;
|
|
|
@@ -1700,77 +1744,83 @@ namespace MeasureThread
|
|
|
{
|
|
|
//if (DialogResult.Yes != MessageBox.Show("网络参数State返回为0。\n是否继续操作?。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
//{
|
|
|
- arg.Message = "图像接口参数State返回值为零";
|
|
|
- arg.State = false;
|
|
|
- SendMsg("1-30");
|
|
|
- return false;
|
|
|
+ arg.Message = "图像接口参数State返回值为零";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-30");
|
|
|
+ return false;
|
|
|
//}
|
|
|
}
|
|
|
//x1 = iSEM.GetStageAtX();
|
|
|
//y1 = iSEM.GetStageAtY();
|
|
|
- //}
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ //}
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- ////11、自动对焦。与之前操作相同
|
|
|
- //if (ImageFocus("1-28"))
|
|
|
- //{
|
|
|
- // arg.Message = "自动对焦完成";
|
|
|
- // arg.State = true;
|
|
|
- // SendMsg("1-28");
|
|
|
- //}
|
|
|
- //else
|
|
|
- //{
|
|
|
- // arg.Message = "自动对焦失败";
|
|
|
- // arg.State = false;
|
|
|
- // SendMsg("1-28");
|
|
|
- //}
|
|
|
- ////判断是否停止进程
|
|
|
- //if (key_stop)
|
|
|
- //{
|
|
|
- // return false;
|
|
|
- //}
|
|
|
+ ////11、自动对焦。与之前操作相同
|
|
|
+ //if (ImageFocus("1-28"))
|
|
|
+ //{
|
|
|
+ // arg.Message = "自动对焦完成";
|
|
|
+ // arg.State = true;
|
|
|
+ // SendMsg("1-28");
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // arg.Message = "自动对焦失败";
|
|
|
+ // arg.State = false;
|
|
|
+ // SendMsg("1-28");
|
|
|
+ //}
|
|
|
+ ////判断是否停止进程
|
|
|
+ //if (key_stop)
|
|
|
+ //{
|
|
|
+ // return false;
|
|
|
+ //}
|
|
|
|
|
|
- //12拍照
|
|
|
- String fileName6 = data_path + "\\" + m_cutHoles[m_nWorkHoleNo].HoleName + "_" + m_MsParam.Photograph_Magnification.ToString("0") + "_" + ImageName6;
|
|
|
- arg.Picture_Information.Picture_FullPath = fileName6;
|
|
|
- arg.Picture_Information.Work_Status = "SEM";
|
|
|
- arg.Picture_Information.Work_Voltage = iSEM.GetSEMVoltage();
|
|
|
- Thread.Sleep(1000);
|
|
|
- arg.Picture_Information.Magnification = iSEM.GetMagnification();
|
|
|
- Thread.Sleep(1000);
|
|
|
- arg.Picture_Information.Work_Distance = iSEM.GetWorkingDistance();
|
|
|
- Thread.Sleep(1000);
|
|
|
- //拍照前改变速度,延时
|
|
|
- iSEM.CmdSaveRate();
|
|
|
- cycle_time = iSEM.GetCycleTime();
|
|
|
- Thread.Sleep(Convert.ToInt32(cycle_time) + 1000);
|
|
|
- if (!GetImage(ImageMode.SEM, fileName6))
|
|
|
- {
|
|
|
- arg.Message = "SEM拍照失败";
|
|
|
- arg.State = false;
|
|
|
+ //12拍照
|
|
|
+ String fileName6 = data_path + "\\" + m_cutHoles[m_nWorkHoleNo].HoleName + "_" + m_MsParam.Photograph_Magnification.ToString("0") + "_" + ImageName6;
|
|
|
+ arg.Picture_Information.Picture_FullPath = fileName6;
|
|
|
+ arg.Picture_Information.Work_Status = "SEM";
|
|
|
+ arg.Picture_Information.Work_Voltage = iSEM.GetSEMVoltage();
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ arg.Picture_Information.Magnification = iSEM.GetMagnification();
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ arg.Picture_Information.Work_Distance = iSEM.GetWorkingDistance();
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ //拍照前改变速度,延时
|
|
|
+ iSEM.CmdSaveRate();
|
|
|
+ cycle_time = iSEM.GetCycleTime();
|
|
|
+ Thread.Sleep(Convert.ToInt32(cycle_time) + 1000);
|
|
|
+ if (!GetImage(ImageMode.SEM, fileName6))
|
|
|
+ {
|
|
|
+ arg.Message = "SEM拍照失败";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-31");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ arg.State = true;
|
|
|
+ image18 = fileName6;
|
|
|
+ arg.Message = "SEM拍照成功";
|
|
|
SendMsg("1-31");
|
|
|
- return false;
|
|
|
- }
|
|
|
- arg.State = true;
|
|
|
- image18 = fileName6;
|
|
|
- arg.Message = "SEM拍照成功";
|
|
|
- SendMsg("1-31");
|
|
|
- iSEM.CmdFocusRate();
|
|
|
- cycle_time = iSEM.GetCycleTime();
|
|
|
- Thread.Sleep(Convert.ToInt32(cycle_time) + 1000);
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ iSEM.CmdFocusRate();
|
|
|
+ cycle_time = iSEM.GetCycleTime();
|
|
|
+ Thread.Sleep(Convert.ToInt32(cycle_time) + 1000);
|
|
|
+ //判断是否停止进程
|
|
|
+ if (key_stop)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //华为程序还没有做出来
|
|
|
|
|
|
- //华为程序还没有做出来
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
//14光束复位和Rotation关闭开关
|
|
|
+ arg.Message = "光束复位成功";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-34");
|
|
|
iSEM.SetTiltAngleOff();
|
|
|
Thread.Sleep(1000);
|
|
|
iSEM.SetScanRotationOff();
|
|
|
@@ -1779,9 +1829,6 @@ namespace MeasureThread
|
|
|
Thread.Sleep(1000);
|
|
|
iSEM.SetBeamShiftY(0);
|
|
|
Thread.Sleep(3000);
|
|
|
- arg.Message = "光束复位成功";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-34");
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
|
@@ -1828,56 +1875,6 @@ namespace MeasureThread
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //1、移动样品台到第一个观测点,先移动R轴,再移动XY轴
|
|
|
- if (!iSEM.SetStageGotoR(firstHole.Position.R))
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("样品台R轴移动失败。", true);
|
|
|
- arg.Message = "样品台R轴移动失败!";
|
|
|
- arg.State = false;
|
|
|
- SendMsg("1-2");
|
|
|
- return false;
|
|
|
- }
|
|
|
- while (true)
|
|
|
- {
|
|
|
- Thread.Sleep(5000);
|
|
|
- if (iSEM.GetStageIs() == 0)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //移动XY轴
|
|
|
- if(!iSEM.MoveStageXY(firstHole.Position.X, firstHole.Position.Y))
|
|
|
- {
|
|
|
- LogManager.AddHardwareLog("样品台XY轴移动失败。", true);
|
|
|
- arg.Message = "样品台XY轴移动失败!";
|
|
|
- arg.State = false;
|
|
|
- SendMsg("1-2");
|
|
|
- return false;
|
|
|
- }
|
|
|
- while (true)
|
|
|
- {
|
|
|
- Thread.Sleep(5000);
|
|
|
-
|
|
|
- if (iSEM.GetStageIs() == 0)
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- arg.Message = "样品台移动成功!";
|
|
|
- arg.State = true;
|
|
|
- SendMsg("1-2");
|
|
|
- //判断是否停止进程
|
|
|
- if (key_stop)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
//2、拉直操作
|
|
|
if (!Straighten_Handle())
|
|
|
{
|
|
|
@@ -2150,17 +2147,29 @@ namespace MeasureThread
|
|
|
if (!iSEM.SetMagnification(m_measureFile.MParam.Stretch_Magnification))
|
|
|
{
|
|
|
LogManager.AddHardwareLog("拉直放大倍数设置失败,程序退出。", true);
|
|
|
-
|
|
|
+ arg.Message = "拉直放大倍数设置失败!";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-0");
|
|
|
return false;
|
|
|
}
|
|
|
+ arg.Message = "拉直放大倍数设置成功!";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-0");
|
|
|
+ Thread.Sleep(1000);
|
|
|
|
|
|
//自动化流程-每个点都需要补偿54度
|
|
|
if (m_MsParam.Is_Photograph == false)
|
|
|
{
|
|
|
if (!TiltCorrection(54.0f))
|
|
|
{
|
|
|
+ arg.Message = "角度补偿54度失败!";
|
|
|
+ arg.State = false;
|
|
|
+ SendMsg("1-1");
|
|
|
return false;
|
|
|
}
|
|
|
+ arg.Message = "角度补偿54度成功!";
|
|
|
+ arg.State = true;
|
|
|
+ SendMsg("1-1");
|
|
|
Thread.Sleep(2000);
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
@@ -2635,10 +2644,10 @@ namespace MeasureThread
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
- if (step_code != "0-9")
|
|
|
- {
|
|
|
- SendMsg(step_code);
|
|
|
- }
|
|
|
+ arg.State = true;
|
|
|
+ arg.Message = "自动对焦";
|
|
|
+ SendMsg(step_code);
|
|
|
+
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|
|
|
@@ -2686,10 +2695,10 @@ namespace MeasureThread
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
- if (step_code != "0-9")
|
|
|
- {
|
|
|
- SendMsg(step_code);
|
|
|
- }
|
|
|
+ arg.State = true;
|
|
|
+ arg.Message = "自动对焦";
|
|
|
+ SendMsg(step_code);
|
|
|
+
|
|
|
//判断是否停止进程
|
|
|
if (key_stop)
|
|
|
{
|