Przeglądaj źródła

仅拍照就差拉直操作了

@wang_qi0307 5 lat temu
rodzic
commit
664f518787
2 zmienionych plików z 93 dodań i 96 usunięć
  1. 8 8
      HOZProject/MeasureXML/MeasureStructXml.xml
  2. 85 88
      MeasureThread/Measure.cs

+ 8 - 8
HOZProject/MeasureXML/MeasureStructXml.xml

@@ -11,7 +11,7 @@
     <Step Index="7"  Code="1-7" IsData="False" Type="FIB" IsShow="True" Title="移动样品台" Details="移动样品台"></Step>
     <Step Index="8"  Code="1-8" IsData="False" Type="FIB" IsShow="True" Title="样品台位置验证" Details="验证移动准确性:获取当前FIB中心位置坐标,与客户返回坐标对比,验证是否移动正确"></Step>
     <Step Index="9"  Code="1-9" IsData="False" Type="Pt" IsShow="True" Title="PT沉积" Details="根据配置文件进行PT沉积"></Step>
-    <Step Index="10" Code="1-10" IsData="False" Type="FIB" IsShow="True" Title="保存六轴坐标" Details="将六轴坐标保存到数据库中"></Step>
+    <Step Index="10" Code="1-10" IsData="False" Type="Photo" IsShow="True" Title="保存六轴坐标" Details="将六轴坐标保存到数据库中"></Step>
 
     <Step Index="11" Code="1-11" IsData="True" Type="FIB" IsShow="True" Title="切割前拍照" Details="FIB进行拍照"></Step>
     <Step Index="12" Code="1-12" IsData="False" Type="FIB" IsShow="True" Title="FIB切割" Details="控制FIB进行切割"></Step>
@@ -19,12 +19,12 @@
     <Step Index="14" Code="1-14" IsData="False" Type="FIB" IsShow="True" Title="验证移动准确性" Details="验证移动准确性:获取当前FIB中心位置坐标,与客户返回坐标对比"></Step>
     <Step Index="15" Code="1-15" IsData="False" Type="Pt" IsShow="True" Title="拔出PT针" Details="根据样品类型决定是否撤出PT针"></Step>
 
-    <Step Index="16" Code="1-16" IsData="False" Type="Photo" IsShow="True" Title="切换到SEM模式" Details="从FIB模式切换到SEM模式"></Step>
-    <Step Index="17" Code="1-17" IsData="False" Type="Photo" IsShow="True" Title="放大指定倍数/2" Details="控制SEM放大倍数"></Step>
-    <Step Index="18" Code="1-18" IsData="False" Type="Photo" IsShow="True" Title="自动对焦" Details="控制SEM自动对焦、亮度、对比度"></Step>
-    <Step Index="19" Code="1-19" IsData="True" Type="Photo" IsShow="True" Title="SEM拍照" Details="控制SEM对分析位置拍照"></Step>
-    <Step Index="20" Code="1-20" IsData="False" Type="Photo" IsShow="True" Title="获取位置并移动样品台" Details="根据坐标控制SEM移动到切孔位置,居中"></Step>
-    <Step Index="21" Code="1-21" IsData="False" Type="Photo" IsShow="True" Title="校验位置" Details="验证移动准确性:获取当前SEM中心位置坐标,与客户返回坐标对比,验证是否移动正确"></Step>
+    <Step Index="16" Code="1-16" IsData="False" Type="FIB" IsShow="True" Title="切换到SEM模式" Details="从FIB模式切换到SEM模式"></Step>
+    <Step Index="17" Code="1-17" IsData="False" Type="FIB" IsShow="True" Title="放大指定倍数/2" Details="控制SEM放大倍数"></Step>
+    <Step Index="18" Code="1-18" IsData="False" Type="FIB" IsShow="True" Title="自动对焦" Details="控制SEM自动对焦、亮度、对比度"></Step>
+    <Step Index="19" Code="1-19" IsData="True" Type="FIB" IsShow="True" Title="SEM拍照" Details="控制SEM对分析位置拍照"></Step>
+    <Step Index="20" Code="1-20" IsData="False" Type="FIB" IsShow="True" Title="获取位置并移动样品台" Details="根据坐标控制SEM移动到切孔位置,居中"></Step>
+    <Step Index="21" Code="1-21" IsData="False" Type="FIB" IsShow="True" Title="校验位置" Details="验证移动准确性:获取当前SEM中心位置坐标,与客户返回坐标对比,验证是否移动正确"></Step>
     
     <Step Index="22" Code="1-22" IsData="False" Type="Photo" IsShow="True" Title="放大指定倍数" Details="控制SEM放大到指定参数大小范围"></Step>
     <Step Index="23" Code="1-23" IsData="False" Type="Photo" IsShow="True" Title="自动对焦" Details="控制SEM自动对焦、消像散、亮度、对比度"></Step>
@@ -36,6 +36,6 @@
     <Step Index="28" Code="1-28" IsData="False" Type="Photo" IsShow="True" Title="自动对焦" Details="控制SEM自动对焦、消像散、亮度、对比度"></Step>
     <Step Index="29" Code="1-29" IsData="True" Type="Photo" IsShow="True" Title="SEM拍照" Details="控制SEM对分析位置拍照"></Step>
     <Step Index="30" Code="1-30" IsData="False" Type="Photo" IsShow="True" Title="SEM光束复位" Details="控制SEM取消电子束校正,回到初始值"></Step>
-    <Step Index="31" Code="1-31" IsData="False" Type="Photo" IsShow="True" Title="自动层高分析" Details="自动进行层高分析"></Step>
+    <Step Index="31" Code="1-31" IsData="False" Type="FIB" IsShow="True" Title="自动层高分析" Details="自动进行层高分析"></Step>
   </MeasureFlow>
 </MeasureList>

+ 85 - 88
MeasureThread/Measure.cs

@@ -486,8 +486,6 @@ namespace MeasureThread
             set { this.m_MsParam = value; }
         }
 
-        //
-
         //构造函数
         public Measure(String webServerIP, String webServerPort, String webServerUrl)
         {
@@ -524,34 +522,6 @@ namespace MeasureThread
         {
             arg.Step_Code = step_code;
             arg.Time = DateTime.Now;
-            //switch(step_code)
-            //{
-            //    //拍照
-            //    case "1-4":
-            //    case "1-6":
-            //    case "1-11":
-            //    case "1-13":
-            //    case "1-19":
-            //    case "1-25":
-            //    case "1-29":
-            //        //电压、放大倍数、工作距离、位置信息、图片路径
-                    
-            //        break;
-            //    case "1-10":
-            //    case "1-18":
-            //        //获取偏移信息
-            //        break;
-            //    case "1-12":
-            //    case "1-20":
-            //        //验证移动准备性
-            //        break;
-            //    case "1-26":
-            //        //取消电子束校正并初始化
-            //        break;
-            //    default:
-            //        arg.State = "1";
-            //        break;
-            //}
             SendThreadStatus(this, arg);
         }
 
@@ -649,7 +619,7 @@ namespace MeasureThread
                 else
                 {
                     //非第一个孔的测试
-                    SendMsg("第" + i.ToString() + "个切孔开始测量");
+                    //SendMsg("第" + i.ToString() + "个切孔开始测量");
                     //切孔操作-开始
                     SendCutHoleMsg(((int)ThreadState.InProcess).ToString(), m_cutHoles[i].HoleName);
                     //其他孔的测试
@@ -675,6 +645,8 @@ namespace MeasureThread
                 {
                     m_cutHoles[i].STATE = State.Unmeasured;
                     m_measureFile.Save();
+                    arg.Message = "用户停止测量";
+                    SendMsg("0-0");
                     break;
                 }
             }
@@ -816,6 +788,7 @@ namespace MeasureThread
                 {
                     Directory.Delete(focus_path, true);
                 }
+                Thread.Sleep(5000);
                 Directory.CreateDirectory(focus_path);
                 //1、对焦参数类,2、输出工作距离
                 int wd = 0;
@@ -824,7 +797,8 @@ namespace MeasureThread
                 //LogManager.AddHardwareLog("算法输出"+ wd.ToString(), true);
                 //设置工作距离
                 iSEM.SetWorkingDistance((float)(wd * 0.00000001));
-
+                //设置完工作距离后必须延迟5秒
+                Thread.Sleep(5000);
                 //处理图片位置
                 //File.Copy(focus_path + "\\fine\\" + wd.ToString() + ".tif", data_path + "\\" + ImageName);
             }
@@ -836,7 +810,26 @@ namespace MeasureThread
             }
             else        //蔡司自动对焦
             {
+                iSEM.CmdAutoFocusCoarse();
+                while(true)
+                {
+                    Thread.Sleep(10000);
 
+                    if(0 == iSEM.GetAutoFunction())
+                    {
+                        break;
+                    }
+                }
+                iSEM.CmdAutoFocusFine();
+                while (true)
+                {
+                    Thread.Sleep(10000);
+
+                    if (0 == iSEM.GetAutoFunction())
+                    {
+                        break;
+                    }
+                }
             }
             return true;
         }
@@ -897,16 +890,24 @@ namespace MeasureThread
                     SendMsg("1-3");
                     return false;
                 }
+                Thread.Sleep(5000);
                 arg.State = true;
                 arg.Message = "设置SEM进行角度补偿54度成功";
                 SendMsg("1-3");
-                Thread.Sleep(5000);
+                
                 //判断是否停止进程
                 if (key_stop)
                 {
                     return false;
                 }
             }
+            else
+            {
+                Thread.Sleep(2000);
+                arg.State = true;
+                arg.Message = "设置SEM进行角度补偿54度成功";
+                SendMsg("1-3");
+            }
 
             //4.控制SEM拍照,5保存照片=====需要更改路径
             String fileName1 = data_path + "\\" + m_nWorkHoleNo.ToString() + "Hole" + ImageName1;
@@ -1674,30 +1675,25 @@ namespace MeasureThread
             }
 
             // 16.找到切割位置
-            if (!FindCross())
-            {
-                return false;
-            }
-            //判断是否停止进程
-            if (key_stop)
+            if (m_MsParam.Is_Photograph == false)
             {
-                return false;
+                if (!FindCross())
+                {
+                    return false;
+                }
+                //判断是否停止进程
+                if (key_stop)
+                {
+                    return false;
+                }
             }
 
             //将过程17最后的拍照图片提出给18步进行调用
             String img18 = "";
             //17.自动控制SEM拍截面照
-            if (m_MsParam.Is_Photograph == false)
+            if (!ShotSection(ref img18))
             {
-                
-                if (!ShotSection(ref img18))
-                {
-                    arg.Message = "自动控制SEM拍截面照失败";
-                    SendMsg("1-33");
-                    return false;
-                }
-                arg.Message = "自动控制SEM拍截面照成功";
-                SendMsg("1-33");
+                return false;
             }
             //判断是否停止进程
             if (key_stop)
@@ -1706,19 +1702,21 @@ namespace MeasureThread
             }
 
             //18.自动层高分析
-            float size = iSEM.GetPixelSize();
-            float mag = iSEM.GetMagnification();
-            int state = 0;
-            wr.Img_Measure_Size(img18, mag, size, out state);
-            if(state==0)
+            if (m_MsParam.Is_Photograph == false)
             {
-                arg.Message = "测量尺寸失败";
+                float size = iSEM.GetPixelSize();
+                float mag = iSEM.GetMagnification();
+                int state = 0;
+                wr.Img_Measure_Size(img18, mag, size, out state);
+                if (state == 0)
+                {
+                    arg.Message = "测量尺寸失败";
+                    SendMsg("1-31");
+                    return false;
+                }
+                arg.Message = "测量尺寸成功";
                 SendMsg("1-31");
-                return false;
             }
-            arg.Message = "测量尺寸成功";
-            SendMsg("1-31");
-
             #region 测试程序
             //最后保存测量数据-测量文件、测量状态,m_cutHoles[i].STATE!=MeasureData.CutHole.State.Success.
             //中间停止更新状态为Unmeasured,过程中return false时,更新状态为failed,保存测量文件
@@ -1968,31 +1966,27 @@ namespace MeasureThread
             }
 
             // 16.找到切割位置
-            if (!FindCross())
-            {
-                return false;
-            }
-            //判断是否停止进程
-            if (key_stop)
+            if (m_MsParam.Is_Photograph == false)
             {
-                return false;
+                if (!FindCross())
+                {
+                    return false;
+                }
+                //判断是否停止进程
+                if (key_stop)
+                {
+                    return false;
+                }
             }
 
             //将过程17最后的拍照图片提出给18步进行调用
             String img18 = "";
             //17.自动控制SEM拍截面照
-            if (m_MsParam.Is_Photograph == false)
+            if (!ShotSection(ref img18))
             {
-
-                if (!ShotSection(ref img18))
-                {
-                    arg.Message = "自动控制SEM拍截面照失败";
-                    SendMsg("1-33");
-                    return false;
-                }
-                arg.Message = "自动控制SEM拍截面照成功";
-                SendMsg("1-33");
+                return false;
             }
+            
             //判断是否停止进程
             if (key_stop)
             {
@@ -2000,18 +1994,21 @@ namespace MeasureThread
             }
 
             //18.自动层高分析
-            float size = iSEM.GetPixelSize();
-            float mag = iSEM.GetMagnification();
-            int state = 0;
-            wr.Img_Measure_Size(img18, mag, size, out state);
-            if (state == 0)
+            if (m_MsParam.Is_Photograph == false)
             {
-                arg.Message = "测量尺寸失败";
+                float size = iSEM.GetPixelSize();
+                float mag = iSEM.GetMagnification();
+                int state = 0;
+                wr.Img_Measure_Size(img18, mag, size, out state);
+                if (state == 0)
+                {
+                    arg.Message = "测量尺寸失败";
+                    SendMsg("1-31");
+                    return false;
+                }
+                arg.Message = "测量尺寸成功";
                 SendMsg("1-31");
-                return false;
             }
-            arg.Message = "测量尺寸成功";
-            SendMsg("1-31");
 
             #region 测试程序
             //string fn;
@@ -2202,7 +2199,7 @@ namespace MeasureThread
             //}
 
             //开启校正
-            SendMsg("开启校正");
+            //SendMsg("开启校正");
             if (!iSEM.SetTiltAngleOn())
             {
                 return false;
@@ -2215,7 +2212,7 @@ namespace MeasureThread
             //}
 
             //恢复原始状态
-            SendMsg("校正角度"+ a_fAngle.ToString());
+            //SendMsg("校正角度"+ a_fAngle.ToString());
             if (!iSEM.SetTiltAngle(a_fAngle))
             {
                 return false;