|  | @@ -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))
 | 
	
		
			
				|  |  |              //{
 |