|
@@ -435,6 +435,8 @@ namespace MeasureThread
|
|
|
|
|
|
const float fMin = (float)0.0000002; //单位是米
|
|
|
|
|
|
+ Boolean comm_state = false;
|
|
|
+
|
|
|
int m_nWorkHoleNo = -1;
|
|
|
|
|
|
//测量文件
|
|
@@ -596,7 +598,14 @@ namespace MeasureThread
|
|
|
for (int i = 0; i < m_cutHoles.Count; i++)
|
|
|
{
|
|
|
m_nWorkHoleNo = i;
|
|
|
- arg.HoleName = cutHoles[m_nWorkHoleNo].HoleName;
|
|
|
+ arg.HoleName = m_cutHoles[i].HoleName;
|
|
|
+ //创建文件夹,孔名文件夹结构
|
|
|
+
|
|
|
+ //判断孔状态
|
|
|
+ if(m_cutHoles[i].STATE != State.Unmeasured)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (i == 0)
|
|
|
{
|
|
|
SendMsg("第一个切孔开始测量");
|
|
@@ -779,29 +788,36 @@ namespace MeasureThread
|
|
|
else if (m_measureFile.MParam.FocusMode == 2)//自有自动
|
|
|
{
|
|
|
//郝工增加自动对焦算法
|
|
|
+ //1、对焦参数类,2、输出工作距离
|
|
|
+ //AutoFocus()
|
|
|
+ //获取焦距,设置工作距离
|
|
|
}
|
|
|
- else //客户自动
|
|
|
+ else if(m_MsParam.FocusMode==3) //客户自动
|
|
|
{
|
|
|
//后期和客户对接接口
|
|
|
List<string> filenames = new List<string>();
|
|
|
String retfilename = wr.Img_Auto_Focus(filenames);
|
|
|
}
|
|
|
+ else //蔡司自动对焦
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
//3.第一次不需要进行角度补偿,其他需要设置SEM进行角度补偿54度
|
|
|
if (!isFirst)
|
|
|
{
|
|
|
- if (!TiltCorrection(m_measureFile.MParam.Correction_Angle))
|
|
|
+ if (!TiltCorrection(54))
|
|
|
{
|
|
|
- arg.Message = "设置SEM进行角度补偿" + m_measureFile.MParam.Correction_Angle.ToString("0") + "度失败";
|
|
|
+ arg.Message = "设置SEM进行角度补偿54度失败";
|
|
|
SendMsg("1-4");
|
|
|
return false;
|
|
|
}
|
|
|
- arg.Message = "设置SEM进行角度补偿" + m_measureFile.MParam.Correction_Angle.ToString("0") + "度成功";
|
|
|
+ arg.Message = "设置SEM进行角度补偿54度成功";
|
|
|
SendMsg("1-4");
|
|
|
Thread.Sleep(5000);
|
|
|
}
|
|
|
|
|
|
- //4.控制SEM拍照,5保存照片
|
|
|
+ //4.控制SEM拍照,5保存照片=====需要更改路径
|
|
|
String fileName1 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName1;
|
|
|
arg.Picture_Information.Picture_FullPath = fileName1;
|
|
|
arg.Picture_Information.Work_Status = "SEM";
|
|
@@ -831,7 +847,7 @@ namespace MeasureThread
|
|
|
Thread.Sleep(10000);
|
|
|
|
|
|
//8.控制FIB拍照
|
|
|
- //9.保存照片
|
|
|
+ //9.保存照片======更改路径
|
|
|
String fileName2 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName2;
|
|
|
arg.Picture_Information.Picture_FullPath = fileName1;
|
|
|
arg.Picture_Information.Work_Status = "FIB";
|
|
@@ -845,8 +861,6 @@ namespace MeasureThread
|
|
|
SendMsg("1-7");
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
|
- //这里需要确认是否对FIB的参数进行设置:电压和放大倍数等
|
|
|
-
|
|
|
//10.将照片传给客户,返回梯形位置坐标,及样品类型参数(是否需要PT沉积,PT坐标位置,PT宽度、PT高度、梯形上、下边及深度、扫描时间、束流、样品放大倍数1、样品放大倍数2等切割参数)
|
|
|
if (DialogResult.Yes == MessageBox.Show("是否手动移动样品台到指定位置?\n如果点击取消则会调用Web接口。", "确认消息", MessageBoxButtons.YesNo))
|
|
|
{
|
|
@@ -919,6 +933,12 @@ namespace MeasureThread
|
|
|
|
|
|
//14.保存样品1第1号孔中心位置6轴坐标1 XYZMRT到数据库,保存客户返回值信息到数据库
|
|
|
float[] firstPosition = iSEM.GetStagePosition();
|
|
|
+ m_cutHoles[0].Position.X = firstPosition[0];
|
|
|
+ m_cutHoles[0].Position.Y = firstPosition[1];
|
|
|
+ m_cutHoles[0].Position.Z = firstPosition[2];
|
|
|
+ m_cutHoles[0].Position.T = firstPosition[3];
|
|
|
+ m_cutHoles[0].Position.R = firstPosition[4];
|
|
|
+ m_cutHoles[0].Position.M = firstPosition[5];
|
|
|
//这里要调用文件保存功能
|
|
|
arg.Message = "坐标1(" + firstPosition[0].ToString() + ","
|
|
|
+ firstPosition[1].ToString() + ","
|
|
@@ -938,6 +958,8 @@ namespace MeasureThread
|
|
|
/// <returns></returns>
|
|
|
public bool FIBCross()
|
|
|
{
|
|
|
+ //切之前拍照保存,,
|
|
|
+
|
|
|
//14.自动控制FIB切割
|
|
|
//1.根据参数设置FIB草率时间(使图清晰),设置梯形上下边及深度、设置束流
|
|
|
//2.控制FIB进行切割
|
|
@@ -954,7 +976,7 @@ namespace MeasureThread
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
|
//3.控制FIB拍照600X
|
|
|
- //这里如何控制
|
|
|
+ //底层没有控制方法。
|
|
|
//4.保存图片
|
|
|
String fileName3 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName3;
|
|
|
arg.Picture_Information.Picture_FullPath = fileName3;
|
|
@@ -970,8 +992,9 @@ namespace MeasureThread
|
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
//5.验证切割准确性:与切割前对比,如果对比误差大,则停止自动执行,进行报警
|
|
|
-
|
|
|
+ //和华为对接接口
|
|
|
//6.设置FIB解冻:先读取状态,如果冻结状态则进行解冻
|
|
|
+ //拍完照自动解冻,这里不做处理。
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -985,17 +1008,28 @@ namespace MeasureThread
|
|
|
float angle = 0;
|
|
|
int direction = 0;
|
|
|
int state = 0;
|
|
|
+ //切换到SEM模式
|
|
|
+ if (!iSEM.CmdFIBModeSEM())
|
|
|
+ {
|
|
|
+ //SendMsg("SEM模式切换失败");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ arg.State = "SEM";
|
|
|
+ Thread.Sleep(10000);
|
|
|
+
|
|
|
//1.控制SEM放大到300倍
|
|
|
arg.State = "SEM";
|
|
|
- if (!iSEM.SetMagnification(m_measureFile.MParam.Photograph_Magnification))
|
|
|
+ if (!iSEM.SetMagnification(m_measureFile.MParam.Location_Magnification/2))
|
|
|
{
|
|
|
- arg.Message = "放大" + m_measureFile.MParam.Photograph_Magnification.ToString("0.0") + "倍失败";
|
|
|
+ arg.Message = "放大" + (m_measureFile.MParam.Location_Magnification / 2).ToString("0.0") + "倍失败";
|
|
|
SendMsg("1-18");
|
|
|
return false;
|
|
|
}
|
|
|
- arg.Message = "放大" + m_measureFile.MParam.Photograph_Magnification.ToString("0.0") + "倍成功";
|
|
|
+ arg.Message = "放大" + (m_measureFile.MParam.Location_Magnification/2).ToString("0.0") + "倍成功";
|
|
|
SendMsg("1-18");
|
|
|
- //2.控制SEM自动对焦、亮度、对比度-接口
|
|
|
+
|
|
|
+ //2.控制SEM自动对焦、亮度、对比度-接口,,将自动对焦提出单独函数调用
|
|
|
+ //对焦前,先清理文件夹focus
|
|
|
if (m_measureFile.MParam.FocusMode == 1)//手动
|
|
|
{
|
|
|
if (DialogResult.Yes == MessageBox.Show("图像自动对焦已完成?", "确认消息", MessageBoxButtons.YesNo))
|
|
@@ -1024,8 +1058,6 @@ namespace MeasureThread
|
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
|
- //原来这里有3是角度补偿
|
|
|
-
|
|
|
//3.控制SEM拍照
|
|
|
String fileName4 = WorkingFolder + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName4;
|
|
|
arg.Picture_Information.Picture_FullPath = fileName4;
|
|
@@ -1071,6 +1103,7 @@ namespace MeasureThread
|
|
|
}
|
|
|
arg.Message = "移动到新(" + x1.ToString() + "," + y1.ToString() + ")位置失败";
|
|
|
SendMsg("1-21");
|
|
|
+ //拉直操作
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1109,16 +1142,9 @@ namespace MeasureThread
|
|
|
{
|
|
|
float x0 = 0, y0 = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;
|
|
|
int state = 0;
|
|
|
- //切换到SEM模式
|
|
|
- if (!iSEM.CmdFIBModeSEM())
|
|
|
- {
|
|
|
- //SendMsg("SEM模式切换失败");
|
|
|
- return false;
|
|
|
- }
|
|
|
- arg.State = "SEM";
|
|
|
- Thread.Sleep(10000);
|
|
|
+
|
|
|
|
|
|
- //1、放大6000倍
|
|
|
+ //1、放大6000倍,放大倍数参数photograph_
|
|
|
if (!iSEM.SetMagnification(6000))
|
|
|
{
|
|
|
arg.Message = "放大倍数调整失败";
|
|
@@ -1188,7 +1214,10 @@ namespace MeasureThread
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- // wr.Img_Cut_Position(fileName5, m_MsParam.SampleName, m_MsParam.Firm, out x1, out y1, out x2, out y2, out state);
|
|
|
+ //8,图像T形
|
|
|
+ // wr.Img_Cut_Position(fileName5, m_MsParam.SampleName, m_MsParam.Firm, out x1, out y1, out x2, out y2, out state);
|
|
|
+ //接口返回像素,*pixelsize,得到坐标点。判断移动方式
|
|
|
+
|
|
|
if (state == 1)
|
|
|
{
|
|
|
//1. 根据客户PT沉积坐标控制FIB调整到中心位置???????
|
|
@@ -1219,10 +1248,12 @@ namespace MeasureThread
|
|
|
}
|
|
|
|
|
|
//8、验证移动准确性
|
|
|
+ //与之前验证相同
|
|
|
+ //9、-10不操作
|
|
|
+ //11、自动对焦。与之前操作相同
|
|
|
+ //12拍照
|
|
|
|
|
|
- //9、
|
|
|
-
|
|
|
-
|
|
|
+ //14光束复位
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -1454,7 +1485,11 @@ namespace MeasureThread
|
|
|
SendMsg("1-33");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ //18.自动层高分析
|
|
|
+ //将17图片传给华为
|
|
|
+
|
|
|
+ //最后保存测量数据-测量文件、测量状态,m_cutHoles[i].STATE!=MeasureData.CutHole.State.Success.
|
|
|
+ //中间停止更新状态为Unmeasured,过程中return false时,更新状态为failed,保存测量文件
|
|
|
|
|
|
//if (DialogResult.Yes == MessageBox.Show("图像拍摄已完成?", "确认消息", MessageBoxButtons.YesNo))
|
|
|
//{
|