Procházet zdrojové kódy

add get the cut position

HaoShuang před 5 roky
rodič
revize
66bab4e1ce
2 změnil soubory, kde provedl 115 přidání a 5 odebrání
  1. 14 0
      MeasureData/CutHole.cs
  2. 101 5
      MeasureThread/Measure.cs

+ 14 - 0
MeasureData/CutHole.cs

@@ -37,6 +37,20 @@ namespace MeasureData
     //切割孔
     public class CutHole: ISlo
     {
+
+        #region 切割孔名
+        /// <summary>
+        /// 切割孔名
+        /// </summary>
+        private string m_HoleName;
+
+        public string HoleName
+        {
+            get { return this.m_HoleName; }
+            set { this.m_HoleName = value; }
+        }
+        #endregion
+
         #region 样品名
         /// <summary>
         /// 样品名

+ 101 - 5
MeasureThread/Measure.cs

@@ -20,12 +20,23 @@ namespace MeasureThread
         Auto
     }
 
+    public enum ImageMode
+    {
+        FIB,
+        SEM
+    }
+
     public class Measure
     {
         //全局只有一个fatorySEM
         static FactoryHardware factorySEM = FactoryHardware.Instance;
         ISEMControl iSEM = factorySEM.ISEM;
 
+        const String ImageName1 = @"ImageSEM600X.tif";
+        const String ImageName2 = @"ImageFIB600X.tif";
+
+        const float fMin = (float)0.0000002; //单位是米
+
         //测量文件
         private MeasureFile m_measureFile;
         public MeasureFile MeasureFile
@@ -209,30 +220,58 @@ namespace MeasureThread
                 }
 
                 //4.控制SEM拍照
-                Boolean GrabImage(String filename, short xoff, short yoff, short width, short height, short type);
                 //5.保存照片
                 {
                     //1. 创建目录,已经完成
                     //2. 设置图片名称
                     //3. 保存图片1
+                    String fileName1 = WorkingFolder + ImageName1;
+                    if (!GetImage(ImageMode.SEM, fileName1))
+                    {
+                        return;
+                    }
                 }
+
                 //6.设置FIB拍照参数——扫描时间、束流等
                 //7.控制FIB自动亮度、对比度
+
                 //8.控制FIB拍照
                 //9.保存照片
                 {
                     //1. 设置图片名称
                     //2. 保存图片2
+                    String fileName1 = WorkingFolder + ImageName2;
+                    if (!GetImage(ImageMode.FIB, fileName1))
+                    {
+                        return;
+                    }
                 }
+
                 //10.将照片传给客户,返回梯形位置坐标,及样品类型参数(是否需要PT沉积,PT坐标位置,PT宽度、PT高度、梯形上、下边及深度、扫描时间、束流、样品放大倍数1、样品放大倍数2等切割参数)
+                
                 //11.自动工具样品类型参数确定是否需要PT沉积
                 {
                     //1. 根据客户PT沉积坐标控制FIB调整到中心位置
                     //2. 验证移动准确性:获取当前FIB中心位置坐标,与客户返回坐标对比,验证是否一定正确
                     //3. 根据坐标进行PT沉积
                 }
+
+                //模拟为客户返回的坐标值
+                float x0 = 0, y0 = 0;
                 //12.根据梯形坐标控制FIB调整到中心位置
+                if (!iSEM.MoveStageXY(x0, y0))
+                {
+                    return;
+                }
+
                 //13.验证移动准确性:获取当前FIB中心位置坐标,与客户返回坐标对比,验证是否移动正确
+                float x1 = iSEM.GetStageAtX();
+                float y1 = iSEM.GetStageAtY();
+                if (Math.Abs(x0 - x1) > fMin && Math.Abs(y0 - y1) > fMin)
+                {
+                    return;
+                }
+
                 //14.保存样品1第1号孔中心位置6轴坐标1 XYZMRT到数据库,保存客户返回值信息到数据库
             }
             //14.自动控制FIB切割
@@ -352,14 +391,71 @@ namespace MeasureThread
             return true;
         }
 
-        //SEM拍图
-        public bool GetSEMImage()
+        //拍图
+        public bool GetImage(ImageMode a_mode, String a_fileName)
         {
             //1. 图像解冻
-            //2. 确认是SEM图像
+            float foldFrozen = iSEM.GetImageFrozen();
+            if (foldFrozen == float.NaN)
+            {
+                return false;
+            }
+
+            if (!iSEM.ImageLive())
+            {
+                return false;
+            }
+
+            //2. 确认图像模式
+            if (ImageMode.SEM == a_mode)
+            {
+                if (!iSEM.CmdFIBModeSEM())
+                {
+                    return false;
+                }
+            }
+            else if (ImageMode.FIB == a_mode)
+            {
+                if (!iSEM.CmdFIBModeFIB())
+                {
+                    return false;
+                }
+            }
+            else
+            {
+                return false;
+            }
+
             //3. 获取分辨率
+            int[] ImageSize = iSEM.GetImageStore();
+            if (ImageSize[0] == 0 || ImageSize[1] == 0)
+            {
+                return false;
+            }
+            short width = (short)ImageSize[0];
+            short height = (short)ImageSize[1];
+
             //4. 抓图
-            Boolean GrabImage(String filename, short xoff, short yoff, short width, short height, short type);
+            if (!iSEM.GrabImage(a_fileName, 0, 0, width, height, 0))
+            {
+                return false;
+            }
+
+            //5. 恢复初始状态
+            if (foldFrozen == 0)
+            {
+                if (!iSEM.ImageLive())
+                {
+                    return false;
+                }
+            }
+            else if (foldFrozen == 1)
+            {
+                if (!iSEM.ImageFrozen())
+                {
+                    return false;
+                }
+            }
 
             return true;
         }