浏览代码

处理冲突

wb_han 5 年之前
父节点
当前提交
fca5d32fed
共有 5 个文件被更改,包括 646 次插入259 次删除
  1. 64 180
      HOZProject/FormUnitControl.cs
  2. 0 15
      MeasureData/Class1.cs
  3. 1 1
      MeasureData/MeasureData.csproj
  4. 127 3
      SmartSEMControl/HardwareInterface.cs
  5. 454 60
      SmartSEMControl/SmartSEM.cs

+ 64 - 180
HOZProject/FormUnitControl.cs

@@ -21,15 +21,19 @@ namespace HOZProject
 {
 {
     public partial class FormUnitControl : Form
     public partial class FormUnitControl : Form
     {
     {
+        //全局只有一个fatorySEM
+        static FactoryHardware factorySEM = FactoryHardware.Instance;
+        ISEMControl iSEM = factorySEM.ISEM;
+
         #region 系统参数
         #region 系统参数
         private String path = Directory.GetCurrentDirectory();
         private String path = Directory.GetCurrentDirectory();
-        private SmartSEM sem = new SmartSEM();
         #endregion
         #endregion
 
 
         #region 构造函数
         #region 构造函数
         public FormUnitControl()
         public FormUnitControl()
         {
         {
-            InitializeComponent();
+            InitializeComponent();     
+            
 
 
             //Calling Notification for updated status
             //Calling Notification for updated status
             //CZEMApi.Notify += new _EMApiEvents_NotifyEventHandler(CZEMApi_Notify);
             //CZEMApi.Notify += new _EMApiEvents_NotifyEventHandler(CZEMApi_Notify);
@@ -39,155 +43,11 @@ namespace HOZProject
         }
         }
         #endregion
         #endregion
 
 
-        #region 设备初始化按键
-        private void btnInit_Click(object sender, EventArgs e)
-        {
-            if (sem.Init())
-            {
-                btnInit.BackColor = Color.Lime;
-            }
-            else
-            {
-                btnInit.BackColor = Color.Red;
-            }
-        }
-        #endregion
-
-        #region 设备关闭按键
-        private void btnCloseCtrl_Click(object sender, EventArgs e)
-        {
-            if (sem.UnInit())
-            {
-                btnInit.BackColor = Control.DefaultBackColor;
-            }
-        }
-        #endregion
-
-        #region 设置参数更新通知
-        private void btnSetNotify_Click(object sender, EventArgs e)
-        {
-            //if (m_bInitialised)
-            //{
-            //    // Magnification
-            //    if (CZEMApi.SetNotify("AP_MAG", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_MAG");
-            //        return;
-            //    }
-            //    // Working distance
-            //    if (CZEMApi.SetNotify("AP_WD", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_WD");
-            //        return;
-            //    }
-            //    // BRIGHTNESS 亮度
-            //    if (CZEMApi.SetNotify("AP_BRIGHTNESS", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_BRIGHTNESS");
-            //        return;
-            //    }
-            //    // AP_CONTRAST,对比度
-            //    if (CZEMApi.SetNotify("AP_CONTRAST", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_CONTRAST");
-            //        return;
-            //    }
-            //    // Vacuum
-            //    if (CZEMApi.SetNotify("DP_VACSTATUS", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_VACSTATUS");
-            //        return;
-            //    }
-            //    // Gun / EHT state
-            //    if (CZEMApi.SetNotify("DP_RUNUPSTATE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_RUNUPSTATE");
-            //        return;
-            //    }
-            //    // actual KV / EHT
-            //    if (CZEMApi.SetNotify("AP_ACTUALKV", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_ACTUALKV");
-            //        return;
-            //    }
-            //    // actual current
-            //    if (CZEMApi.SetNotify("AP_ACTUALCURRENT", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_ACTUALCURRENT");
-            //        return;
-            //    }
-            //    // column type
-            //    if (CZEMApi.SetNotify("DP_COLUMN_TYPE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_COLUMN_TYPE");
-            //        return;
-            //    }
-            //    // mode
-            //    if (CZEMApi.SetNotify("DP_OPERATING_MODE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_OPERATING_MODE");
-            //        return;
-            //    }
-            //    // scan rate
-            //    if (CZEMApi.SetNotify("DP_SCANRATE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_SCANRATE");
-            //        return;
-            //    }
-            //    // auto function active
-            //    if (CZEMApi.SetNotify("DP_AUTO_FUNCTION", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_AUTO_FUNCTION");
-            //        return;
-            //    }
-
-
-            //    // probe current
-            //    if (CZEMApi.SetNotify("AP_IPROBE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "AP_IPROBE");
-            //        return;
-            //    }
-            //    // detector
-            //    if (CZEMApi.SetNotify("DP_DETECTOR_TYPE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_DETECTOR_TYPE");
-            //        return;
-            //    }
-            //    // stage initialised
-            //    if (CZEMApi.SetNotify("DP_STAGE_INIT", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_STAGE_INIT");
-            //        return;
-            //    }
-            //    // stage busy?
-            //    if (CZEMApi.SetNotify("DP_STAGE_IS", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_STAGE_IS");
-            //        return;
-            //    }
-            //    // fib mode
-            //    if (CZEMApi.SetNotify("DP_FIB_MODE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_FIB_MODE");
-            //        return;
-            //    }
-            //    // fib gun state
-            //    if (CZEMApi.SetNotify("DP_FIB_GUN_STATE", 1) != 0)
-            //    {
-            //        DisplayError("SetNotify", "DP_FIB_GUN_STATE");
-            //        return;
-            //    }
-
-            //listmsg.Items.Add("Notification enabled");
-            // }
-        }
-        #endregion
-
         #region 缩放Get
         #region 缩放Get
         private void btnenlargeGet_Click(object sender, EventArgs e)
         private void btnenlargeGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetMagnification();
+
+            float ret = iSEM.GetMagnification();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblenlargeGet.Text = "NaN";
                 lblenlargeGet.Text = "NaN";
@@ -209,7 +69,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtenlargeSet.Text, out set))
             if (float.TryParse(txtenlargeSet.Text, out set))
             {
             {
-                sem.SetMagnification(set);
+                iSEM.SetMagnification(set);
             }
             }
 
 
         }
         }
@@ -218,7 +78,7 @@ namespace HOZProject
         #region 焦距Get
         #region 焦距Get
         private void btnWDGet_Click(object sender, EventArgs e)
         private void btnWDGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetWorkingDistance();
+            float ret = iSEM.GetWorkingDistance();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblWDGet.Text = "NaN";
                 lblWDGet.Text = "NaN";
@@ -240,7 +100,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtWDSet.Text, out set))
             if (float.TryParse(txtWDSet.Text, out set))
             {
             {
-                sem.SetWorkingDistance(set);
+                iSEM.SetWorkingDistance(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -248,7 +108,7 @@ namespace HOZProject
         #region 亮度Get
         #region 亮度Get
         private void btnBrightnessGet_Click(object sender, EventArgs e)
         private void btnBrightnessGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetBrightness();
+            float ret = iSEM.GetBrightness();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblBrightnessGet.Text = "NaN";
                 lblBrightnessGet.Text = "NaN";
@@ -270,7 +130,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtBrightnessSet.Text, out set))
             if (float.TryParse(txtBrightnessSet.Text, out set))
             {
             {
-                sem.SetBrightness(set);
+                iSEM.SetBrightness(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -278,7 +138,7 @@ namespace HOZProject
         #region 对比度Get
         #region 对比度Get
         private void btnContrastGet_Click(object sender, EventArgs e)
         private void btnContrastGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetContrast();
+            float ret = iSEM.GetContrast();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblContrastGet.Text = "NaN";
                 lblContrastGet.Text = "NaN";
@@ -300,7 +160,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtContrastSet.Text, out set))
             if (float.TryParse(txtContrastSet.Text, out set))
             {
             {
-                sem.SetContrast(set);
+                iSEM.SetContrast(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -308,7 +168,7 @@ namespace HOZProject
         #region 消像散X Get
         #region 消像散X Get
         private void btnAstigmatismXGet_Click(object sender, EventArgs e)
         private void btnAstigmatismXGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetAstigmatismX();
+            float ret = iSEM.GetAstigmatismX();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblAstigmatismXGet.Text = "NaN";
                 lblAstigmatismXGet.Text = "NaN";
@@ -330,7 +190,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtAstigmatismXSet.Text, out set))
             if (float.TryParse(txtAstigmatismXSet.Text, out set))
             {
             {
-                sem.SetAstigmatismX(set);
+                iSEM.SetAstigmatismX(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -338,7 +198,7 @@ namespace HOZProject
         #region 消像散Y Get
         #region 消像散Y Get
         private void btnAstigmatismYGet_Click(object sender, EventArgs e)
         private void btnAstigmatismYGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetAstigmatismY();
+            float ret = iSEM.GetAstigmatismY();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblAstigmatismYGet.Text = "NaN";
                 lblAstigmatismYGet.Text = "NaN";
@@ -360,7 +220,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtAstigmatismYSet.Text, out set))
             if (float.TryParse(txtAstigmatismYSet.Text, out set))
             {
             {
-                sem.SetAstigmatismY(set);
+                iSEM.SetAstigmatismY(set);
             }
             }
         }
         }
 
 
@@ -369,7 +229,7 @@ namespace HOZProject
         #region 角度补偿Get
         #region 角度补偿Get
         private void btnTiltAngleGet_Click(object sender, EventArgs e)
         private void btnTiltAngleGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetTiltAngle();
+            float ret = iSEM.GetTiltAngle();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblTiltAngleGet.Text = "NaN";
                 lblTiltAngleGet.Text = "NaN";
@@ -391,7 +251,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtTiltAngleSet.Text, out set))
             if (float.TryParse(txtTiltAngleSet.Text, out set))
             {
             {
-                sem.SetTiltAngle(set);
+                iSEM.SetTiltAngle(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -406,7 +266,7 @@ namespace HOZProject
             if (sfd.ShowDialog() == DialogResult.OK)
             if (sfd.ShowDialog() == DialogResult.OK)
             {
             {
                 string fn = sfd.FileName;
                 string fn = sfd.FileName;
-                sem.GrabImage(fn, 0);
+                iSEM.GrabImage(fn, 0, 0, 1024, 768, 0);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -414,7 +274,7 @@ namespace HOZProject
         #region ScanRotate Get
         #region ScanRotate Get
         private void btnScanRotationGet_Click(object sender, EventArgs e)
         private void btnScanRotationGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetScanRotation();
+            float ret = iSEM.GetScanRotation();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblScanRotationGet.Text = "NaN";
                 lblScanRotationGet.Text = "NaN";
@@ -436,7 +296,8 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtScanRotationSet.Text, out set))
             if (float.TryParse(txtScanRotationSet.Text, out set))
             {
             {
-                sem.SetScanRotation(set);
+                
+                iSEM.SetScanRotation(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -444,7 +305,7 @@ namespace HOZProject
         #region PixelSize Get
         #region PixelSize Get
         private void btnPixelSizeGet_Click(object sender, EventArgs e)
         private void btnPixelSizeGet_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetPixelSize();
+            float ret = iSEM.GetPixelSize();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblPixelSizeGet.Text = "NaN";
                 lblPixelSizeGet.Text = "NaN";
@@ -459,21 +320,21 @@ namespace HOZProject
         #region 开启电压
         #region 开启电压
         private void btnOpenVoltage_Click(object sender, EventArgs e)
         private void btnOpenVoltage_Click(object sender, EventArgs e)
         {
         {
-            sem.CmdOpenVoltage();
+            iSEM.CmdOpenVoltage();
         }
         }
         #endregion
         #endregion
 
 
         #region 关闭电压
         #region 关闭电压
         private void btnCloseVoltage_Click(object sender, EventArgs e)
         private void btnCloseVoltage_Click(object sender, EventArgs e)
         {
         {
-            sem.CmdCloseVoltage();
+            iSEM.CmdCloseVoltage();
         }
         }
         #endregion
         #endregion
 
 
         #region 样品台位置获取
         #region 样品台位置获取
         private void btnStageGetX_Click(object sender, EventArgs e)
         private void btnStageGetX_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtX();
+            float ret = iSEM.GetStageAtX();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageX.Text = "NaN";
                 lblStageX.Text = "NaN";
@@ -486,7 +347,7 @@ namespace HOZProject
 
 
         private void btnStageGetY_Click(object sender, EventArgs e)
         private void btnStageGetY_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtY();
+            float ret = iSEM.GetStageAtY();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageY.Text = "NaN";
                 lblStageY.Text = "NaN";
@@ -499,7 +360,7 @@ namespace HOZProject
 
 
         private void btnStageGetZ_Click(object sender, EventArgs e)
         private void btnStageGetZ_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtZ();
+            float ret = iSEM.GetStageAtZ();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageZ.Text = "NaN";
                 lblStageZ.Text = "NaN";
@@ -512,7 +373,7 @@ namespace HOZProject
 
 
         private void btnStageGetT_Click(object sender, EventArgs e)
         private void btnStageGetT_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtT();
+            float ret = iSEM.GetStageAtT();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageT.Text = "NaN";
                 lblStageT.Text = "NaN";
@@ -525,7 +386,7 @@ namespace HOZProject
 
 
         private void btnStageGetR_Click(object sender, EventArgs e)
         private void btnStageGetR_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtR();
+            float ret = iSEM.GetStageAtR();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageR.Text = "NaN";
                 lblStageR.Text = "NaN";
@@ -538,7 +399,7 @@ namespace HOZProject
 
 
         private void btnStageGetM_Click(object sender, EventArgs e)
         private void btnStageGetM_Click(object sender, EventArgs e)
         {
         {
-            float ret = sem.GetStageAtM();
+            float ret = iSEM.GetStageAtM();
             if (float.IsNaN(ret))
             if (float.IsNaN(ret))
             {
             {
                 lblStageM.Text = "NaN";
                 lblStageM.Text = "NaN";
@@ -556,7 +417,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageX.Text, out set))
             if (float.TryParse(txtStageX.Text, out set))
             {
             {
-                sem.SetStageGotoX(set);
+                iSEM.SetStageGotoX(set);
             }
             }
         }
         }
 
 
@@ -565,7 +426,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageY.Text, out set))
             if (float.TryParse(txtStageY.Text, out set))
             {
             {
-                sem.SetStageGotoY(set);
+                iSEM.SetStageGotoY(set);
             }
             }
         }
         }
 
 
@@ -574,7 +435,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageZ.Text, out set))
             if (float.TryParse(txtStageZ.Text, out set))
             {
             {
-                sem.SetStageGotoZ(set);
+                iSEM.SetStageGotoZ(set);
             }
             }
         }
         }
 
 
@@ -583,7 +444,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageT.Text, out set))
             if (float.TryParse(txtStageT.Text, out set))
             {
             {
-                sem.SetStageGotoT(set);
+                iSEM.SetStageGotoT(set);
             }
             }
         }
         }
 
 
@@ -592,7 +453,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageR.Text, out set))
             if (float.TryParse(txtStageR.Text, out set))
             {
             {
-                sem.SetStageGotoR(set);
+                iSEM.SetStageGotoR(set);
             }
             }
         }
         }
 
 
@@ -601,7 +462,7 @@ namespace HOZProject
             float set = 0;
             float set = 0;
             if (float.TryParse(txtStageM.Text, out set))
             if (float.TryParse(txtStageM.Text, out set))
             {
             {
-                sem.SetStageGotoM(set);
+                iSEM.SetStageGotoM(set);
             }
             }
         }
         }
         #endregion
         #endregion
@@ -609,7 +470,7 @@ namespace HOZProject
         #region 获取样品台位置数组
         #region 获取样品台位置数组
         private void btnGetStagePosition_Click(object sender, EventArgs e)
         private void btnGetStagePosition_Click(object sender, EventArgs e)
         {
         {
-            float[] pt = sem.GetStagePosition();
+            float[] pt = iSEM.GetStagePosition();
             if (!float.IsNaN(pt[0]))
             if (!float.IsNaN(pt[0]))
             {
             {
                 lblStageX.Text = pt[0].ToString();
                 lblStageX.Text = pt[0].ToString();
@@ -636,5 +497,28 @@ namespace HOZProject
             }
             }
         }
         }
         #endregion
         #endregion
+
+        private void btnDoSemDriftCorrn_Click(object sender, EventArgs e)
+        {
+            iSEM.SetTiltCorrectionOff();
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            iSEM.SetTiltCorrectionOn();
+        }
+
+        private void FormUnitControl_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            if(iSEM!=null)
+            {
+                iSEM.Dispose();
+            }
+        }
+
+        private void btnCMDMCF_Click(object sender, EventArgs e)
+        {
+            iSEM.CMDMCFFilename("OPTON");
+        }
     }
     }
 }
 }

+ 0 - 15
MeasureData/Class1.cs

@@ -1,15 +0,0 @@
-//时间:20200608
-//作者:郝爽
-//功能:测量数据类
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace MeasureData
-{
-    public class Class1
-    {
-    }
-}

+ 1 - 1
MeasureData/MeasureData.csproj

@@ -42,7 +42,7 @@
     <Reference Include="System.Xml" />
     <Reference Include="System.Xml" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
-    <Compile Include="Class1.cs" />
+    <Compile Include="CutHole.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+ 127 - 3
SmartSEMControl/HardwareInterface.cs

@@ -6,10 +6,134 @@ using System.Threading.Tasks;
 
 
 namespace SmartSEMControl
 namespace SmartSEMControl
 {
 {
-    interface SEMControl
+    //sealed, 避免继承出新类造成重构
+    public sealed class FactoryHardware
     {
     {
-        //样品台的控制
-        
+        //只读的静态成员
+        private static readonly FactoryHardware instance = new FactoryHardware();
+
+        // Explicit static constructor to tell C# compiler
+        // not to mark type as beforefieldinit
+        //C#的静态构造函数只有在当其类的实例被创建或者有静态成员被引用时执行,
+        //在整个应用程序域中只会被执行一次。
+        static FactoryHardware()
+        {
+        }
+        private FactoryHardware()
+        {
+        }
+
+        //使用这个实例
+        public static FactoryHardware Instance
+        {
+            get
+            {
+                return instance;
+            }
+        }
+
+        //其他使用的成员变量
+        private ISEMControl m_iSEM = new SmartSEM(); //成员变量
+
+        public ISEMControl ISEM
+        {
+            get { return m_iSEM; }
+        } //属性,只能当前类创建 
+    
+    }
+    //SEM控制
+    public interface ISEMControl
+    {
+        //缩放
+        float GetMagnification();
+        Boolean SetMagnification(float set);
+
+        //焦距
+        float GetWorkingDistance();
+        Boolean SetWorkingDistance(float set);
+
+        //亮度
+        float GetBrightness();
+        Boolean SetBrightness(float set);
+
+        //对比度
+        float GetContrast();
+        Boolean SetContrast(float set);
+
+        //自动亮度
+        float GetAutoVideo();
+        Boolean SetAutoVideoOff();
+        Boolean SetAutoVideoBrightness();
+        Boolean SetAutoVideoContrast();
+        Boolean SetAutoVideoBrightnessAndContrast();
+
+        //消像散
+        float GetAstigmatismX();
+        float GetAstigmatismY();
+        Boolean SetAstigmatismX(float set);
+        Boolean SetAstigmatismY(float set);
+
+        //自动消像散
+        Boolean CmdAutoStig();
+
+        //角度补偿
+        float GetTiltAngle();
+        Boolean SetTiltAngle(float set);
+
+        //抓图
+        Boolean GrabImage(String filename, short xoff, short yoff, short width, short height, short type);
+        //解冻
+        Boolean ImageFrozen();
+        //冻结
+        Boolean ImageLive();
+        //获取分辨率
+        int[] GetImageStore();
+        //设置分辨率
+        Boolean SetImageStore(float set);
+
+        //样品台
+        float[] GetStagePosition();
+        float GetStageAtX();
+        float GetStageAtY();
+        float GetStageAtZ();
+        float GetStageAtT();
+        float GetStageAtR();
+        float GetStageAtM();
+        Boolean SetStageGotoX(float set);
+        Boolean SetStageGotoY(float set);
+        Boolean SetStageGotoZ(float set);
+        Boolean SetStageGotoT(float set);
+        Boolean SetStageGotoR(float set);
+        Boolean SetStageGotoM(float set);
+        Boolean MoveStageXY(float x, float y);
+
+        //Scan Rotate角度接口
+        float GetScanRotation();
+        Boolean SetScanRotation(float set);
+
+        //像素读取PixelSize
+        float GetPixelSize();
+
+        //电子束校正设置
+        float GetTiltCorrection();
+        Boolean SetTiltCorrectionOff();
+        Boolean SetTiltCorrectionOn();
+
+        //开启电压
+        Boolean CmdOpenVoltage();
+
+        //关闭电压
+        Boolean CmdCloseVoltage();
+
+        //图像类型切换
+        Boolean DetectorType(float set);
+
+        //执行宏文件
+        Boolean CMDMCFFilename(String filename);
+
+        //清除控件
+        Boolean Dispose();
+
     }
     }
 
 
     interface FIBControl
     interface FIBControl

+ 454 - 60
SmartSEMControl/SmartSEM.cs

@@ -10,9 +10,9 @@ using System.Threading;
 
 
 namespace SmartSEMControl
 namespace SmartSEMControl
 {
 {
-    public class SmartSEM
+    class SmartSEM : ISEMControl
     {
     {
-        #region 参数
+        #region 模拟参数
         //放大缩小
         //放大缩小
         private String AP_MAG = "AP_MAG";
         private String AP_MAG = "AP_MAG";
         //焦距
         //焦距
@@ -21,12 +21,20 @@ namespace SmartSEMControl
         private String AP_BRIGHTNESS = "AP_BRIGHTNESS";
         private String AP_BRIGHTNESS = "AP_BRIGHTNESS";
         //对比度
         //对比度
         private String AP_CONTRAST = "AP_CONTRAST";
         private String AP_CONTRAST = "AP_CONTRAST";
+        //亮度目标
+        private String AP_AUTO_BRIGHT = "AP_AUTO_BRIGHT";
+        //对比度目标
+        private String AP_AUTO_CONTRAST = "AP_AUTO_CONTRAST";
         //消像散X轴
         //消像散X轴
         private String AP_STIG_X = "AP_STIG_X";
         private String AP_STIG_X = "AP_STIG_X";
         //消像散Y轴
         //消像散Y轴
         private String AP_STIG_Y = "AP_STIG_Y";
         private String AP_STIG_Y = "AP_STIG_Y";
         //角度补偿
         //角度补偿
         private String AP_TILT_ANGLE = "AP_TILT_ANGLE";
         private String AP_TILT_ANGLE = "AP_TILT_ANGLE";
+        //SEM移动X
+        private String AP_BEAMSHIFT_X = "AP_BEAMSHIFT_X";
+        //SEM移动Y
+        private String AP_BEAMSHIFT_Y = "AP_BEAMSHIFT_Y";
         //X轴移动到
         //X轴移动到
         private String AP_STAGE_GOTO_X = "AP_STAGE_GOTO_X";
         private String AP_STAGE_GOTO_X = "AP_STAGE_GOTO_X";
         //Y轴移动到
         //Y轴移动到
@@ -57,11 +65,36 @@ namespace SmartSEMControl
         private String AP_STAGE_AT_M = "AP_STAGE_AT_M";
         private String AP_STAGE_AT_M = "AP_STAGE_AT_M";
         #endregion
         #endregion
 
 
+        #region 数字参数
+        //Scan Rotate开关
+        private String DP_SCAN_ROT = "DP_SCAN_ROT";
+        //取消电子束校正
+        private String DP_TILT_CORRECTION = "DP_TILT_CORRECTION";
+        //自动亮度对比度
+        private String DP_AUTO_VIDEO = "DP_AUTO_VIDEO";
+        //图像解冻
+        private String DP_FROZEN = "DP_FROZEN";
+        //图像类型切换
+        private String DP_DETECTOR_TYPE = "DP_DETECTOR_TYPE";
+        //图像大小
+        private String DP_IMAGE_STORE = "DP_IMAGE_STORE";
+        #endregion
+
         #region 命令
         #region 命令
         //开启电压
         //开启电压
         private String CMD_BEAM_ON = "CMD_BEAM_ON";
         private String CMD_BEAM_ON = "CMD_BEAM_ON";
         //关闭电压
         //关闭电压
         private String CMD_EHT_OFF = "CMD_EHT_OFF";
         private String CMD_EHT_OFF = "CMD_EHT_OFF";
+        //自动对焦1
+        private String CMD_AUTO_FOCUS_COARSE = "CMD_AUTO_FOCUS_COARSE";
+        //自动对焦2
+        private String CMD_AUTO_FOCUS_FINE = "CMD_AUTO_FOCUS_FINE";
+        //自动消像散
+        private String CMD_AUTO_STIG = "CMD_AUTO_STIG";
+        #endregion
+
+        #region 宏文件命令
+        private String MCF_FILENAME = "MCF_";
         #endregion
         #endregion
 
 
         #region APILib
         #region APILib
@@ -70,6 +103,13 @@ namespace SmartSEMControl
         private long lrt = 0;
         private long lrt = 0;
         #endregion
         #endregion
 
 
+        #region 构造函数
+        public SmartSEM()
+        {
+            Init();
+        }
+        #endregion
+
         #region 设备初始化
         #region 设备初始化
         /// <summary>
         /// <summary>
         /// 设备初始化
         /// 设备初始化
@@ -77,11 +117,11 @@ namespace SmartSEMControl
         /// <returns>return:true or false</returns>
         /// <returns>return:true or false</returns>
         public Boolean Init()
         public Boolean Init()
         {
         {
-#if ROMOTE
-            lrt = CZEMApi.InitialiseRemoting();
-#else
-            lrt = CZEMApi.Initialise("");
-#endif
+            #if ROMOTE
+                lrt = CZEMApi.InitialiseRemoting();
+            #else
+                lrt = CZEMApi.Initialise("");
+            #endif
             if (lrt != 0)
             if (lrt != 0)
             {
             {
                 m_bInitialised = false;
                 m_bInitialised = false;
@@ -93,9 +133,9 @@ namespace SmartSEMControl
                 return true;
                 return true;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 设备远程初始化
+        #region 设备远程初始化
         /// <summary>
         /// <summary>
         /// 设备远程初始化
         /// 设备远程初始化
         /// </summary>
         /// </summary>
@@ -114,14 +154,14 @@ namespace SmartSEMControl
                 return true;
                 return true;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 关闭设备
+        #region 关闭设备
         /// <summary>
         /// <summary>
         /// 关闭设备
         /// 关闭设备
         /// </summary>
         /// </summary>
         /// <returns>true or false</returns>
         /// <returns>true or false</returns>
-        public Boolean UnInit()
+        public Boolean Dispose()
         {
         {
             if (m_bInitialised)
             if (m_bInitialised)
             {
             {
@@ -141,9 +181,9 @@ namespace SmartSEMControl
                 return false;
                 return false;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 读参数函数
+        #region 读参数函数
         private Boolean ReadParams(String str_param, ref float value)
         private Boolean ReadParams(String str_param, ref float value)
         {
         {
             if (m_bInitialised)
             if (m_bInitialised)
@@ -165,9 +205,9 @@ namespace SmartSEMControl
                 return false;
                 return false;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 写参数函数
+        #region 写模拟参数函数
         private Boolean WriteParams(String str_param, float value)
         private Boolean WriteParams(String str_param, float value)
         {
         {
             if (m_bInitialised)
             if (m_bInitialised)
@@ -211,9 +251,29 @@ namespace SmartSEMControl
                 return false;
                 return false;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 执行命令
+        #region 写数字参数函数
+        private Boolean WriteDataParams(String str_param, float value)
+        {
+            if (m_bInitialised)
+            {
+                object varFloat = new VariantWrapper(value);
+                lrt = CZEMApi.Set(str_param, ref varFloat);// set value
+                if (lrt != 0)
+                {
+                    return false;
+                }
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        #endregion
+
+        #region 执行命令
         private Boolean ExecuteCmd(String cmd)
         private Boolean ExecuteCmd(String cmd)
         {
         {
             if (m_bInitialised)
             if (m_bInitialised)
@@ -233,9 +293,9 @@ namespace SmartSEMControl
                 return false;
                 return false;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region 放大缩小
+        #region 放大缩小
         /// <summary>
         /// <summary>
         /// 读取缩放倍数
         /// 读取缩放倍数
         /// </summary>
         /// </summary>
@@ -243,7 +303,7 @@ namespace SmartSEMControl
         public float GetMagnification()
         public float GetMagnification()
         {
         {
             float ret = 0;
             float ret = 0;
-            if (ReadParams(AP_MAG, ref ret))
+            if(ReadParams(AP_MAG, ref ret))
             {
             {
                 return ret;
                 return ret;
             }
             }
@@ -262,9 +322,9 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_MAG, set);
             return WriteParams(AP_MAG, set);
         }
         }
-#endregion
+        #endregion
 
 
-#region 焦距
+        #region 焦距
         /// <summary>
         /// <summary>
         /// 读取工作距离
         /// 读取工作距离
         /// </summary>
         /// </summary>
@@ -291,9 +351,9 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_WD, set);
             return WriteParams(AP_WD, set);
         }
         }
-#endregion
+        #endregion  
 
 
-#region 亮度
+        #region 亮度
         /// <summary>
         /// <summary>
         /// 读取亮度
         /// 读取亮度
         /// </summary>
         /// </summary>
@@ -320,9 +380,9 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_BRIGHTNESS, set);
             return WriteParams(AP_BRIGHTNESS, set);
         }
         }
-#endregion
+        #endregion
 
 
-#region 对比度
+        #region 对比度
         /// <summary>
         /// <summary>
         /// 读取对比度
         /// 读取对比度
         /// </summary>
         /// </summary>
@@ -349,9 +409,111 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_CONTRAST, set);
             return WriteParams(AP_CONTRAST, set);
         }
         }
-#endregion
+        #endregion
+
+        #region 自动亮度对比度
+        /// <summary>
+        /// 读取自动亮度对比度状态
+        /// </summary>
+        /// <returns>true:float or false:NaN</returns>
+        public float GetAutoVideo()
+        {
+            float ret = 0;
+            if (ReadParams(DP_AUTO_VIDEO, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 设置自动亮度对比度状态
+        /// </summary>
+        /// <param name="set">0:off;1:B(亮度);2:C(对比度);3:BC</param>
+        /// <returns>true or false</returns>
+        public Boolean SetAutoVideoOff()
+        {
+            return WriteDataParams(DP_AUTO_VIDEO, (float)0);
+        }
+
+        public Boolean SetAutoVideoBrightness()
+        {
+            return WriteDataParams(DP_AUTO_VIDEO, (float)1);
+        }
 
 
-#region 消像散
+        public Boolean SetAutoVideoContrast()
+        {
+            return WriteDataParams(DP_AUTO_VIDEO, (float)2);
+        }
+
+        public Boolean SetAutoVideoBrightnessAndContrast()
+        {
+            return WriteDataParams(DP_AUTO_VIDEO, (float)3);
+        }
+        #endregion
+
+        #region 亮度目标
+        /// <summary>
+        /// 读取亮度目标
+        /// </summary>
+        /// <returns>true:float or false:NaN</returns>
+        public float GetAutoBright()
+        {
+            float ret = 0;
+            if (ReadParams(AP_AUTO_BRIGHT, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 设置亮度目标
+        /// </summary>
+        /// <param name="set">亮度</param>
+        /// <returns>true or false</returns>
+        public Boolean SetAutoBright(float set)
+        {
+            return WriteParams(AP_AUTO_BRIGHT, set);
+        }
+        #endregion
+
+        #region 对比度目标
+        /// <summary>
+        /// 读取对比度目标
+        /// </summary>
+        /// <returns>true:float or false:NaN</returns>
+        public float GetAutoContrast()
+        {
+            float ret = 0;
+            if (ReadParams(AP_AUTO_CONTRAST, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 设置对比度目标
+        /// </summary>
+        /// <param name="set">对比度目标</param>
+        /// <returns>true or false</returns>
+        public Boolean SetAutoContrast(float set)
+        {
+            return WriteParams(AP_AUTO_CONTRAST, set);
+        }
+        #endregion
+
+        #region 消像散
         /// <summary>
         /// <summary>
         /// 读取消像散X
         /// 读取消像散X
         /// </summary>
         /// </summary>
@@ -405,9 +567,9 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_STIG_Y, set);
             return WriteParams(AP_STIG_Y, set);
         }
         }
-#endregion
+        #endregion
 
 
-#region 角度补偿
+        #region 角度补偿
         /// <summary>
         /// <summary>
         /// 读取角度补偿
         /// 读取角度补偿
         /// </summary>
         /// </summary>
@@ -432,26 +594,108 @@ namespace SmartSEMControl
         /// <returns>true or false</returns>
         /// <returns>true or false</returns>
         public Boolean SetTiltAngle(float set)
         public Boolean SetTiltAngle(float set)
         {
         {
-            return WriteParams(AP_TILT_ANGLE, set);
+            Boolean ret = false;
+            ret = WriteDataParams(DP_TILT_CORRECTION, 1);
+            ret = WriteParams(AP_TILT_ANGLE, set);
+            ret = WriteDataParams(DP_TILT_CORRECTION, 0);
+            return ret;
         }
         }
-#endregion
+        #endregion
 
 
-#region 抓取图像
+        #region 图像大小
+        public int[] GetImageStore()
+        {
+            int[] i_ret = new int[2];
+            float ret = 0;
+            if (ReadParams(DP_IMAGE_STORE, ref ret))
+            {
+                switch(ret)
+                {
+                    case 0:
+                        i_ret[0] = 1024;
+                        i_ret[1] = 768;
+                        break;
+                    case 1:
+                        i_ret[0] = 512;
+                        i_ret[1] = 384;
+                        break;
+                    case 2:
+                        i_ret[0] = 2048;
+                        i_ret[1] = 1536;
+                        break;
+                    case 3:
+                        i_ret[0] = 3072;
+                        i_ret[1] = 2304;
+                        break;
+                    case 4:
+                        i_ret[0] = 4096;
+                        i_ret[1] = 3072;
+                        break;
+                    case 5:
+                        i_ret[0] = 5120;
+                        i_ret[1] = 3840;
+                        break;
+                    case 6:
+                        i_ret[0] = 6144;
+                        i_ret[1] = 4608;
+                        break;
+                    case 7:
+                        i_ret[0] = 8192;
+                        i_ret[1] = 6144;
+                        break;
+                    case 8:
+                        i_ret[0] = 12288;
+                        i_ret[1] = 9216;
+                        break;
+                    case 9:
+                        i_ret[0] = 16384;
+                        i_ret[1] = 12288;
+                        break;
+                    case 10:
+                        i_ret[0] = 24576;
+                        i_ret[1] = 18432;
+                        break;
+                    case 11:
+                        i_ret[0] = 32768;
+                        i_ret[1] = 24576;
+                        break;
+                    default:
+                        i_ret[0] = 0;
+                        i_ret[1] = 0;
+                        break;
+                }
+            }
+            else
+            {
+                i_ret[0] = 0;
+                i_ret[1] = 0;
+            }
+            return i_ret;
+        }
+
+        public Boolean SetImageStore(float set)
+        {
+            return WriteDataParams("DP_IMAGE_STORE", set);
+        }
+        #endregion
+
+        #region 抓取图像
         /// <summary>
         /// <summary>
         /// 抓取图像
         /// 抓取图像
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
-        public Boolean GrabImage(String filename, short type)
+        public Boolean GrabImage(String filename, short xoff,short yoff, short width,short height,short type)
         {
         {
             if (m_bInitialised)
             if (m_bInitialised)
             {
             {
-                lrt = CZEMApi.Grab(0, 0, 1024, 768, type, filename);
+                lrt = CZEMApi.Grab(xoff, yoff, width, height, type, filename);
                 if (lrt != 0)
                 if (lrt != 0)
                 {
                 {
                     return false;
                     return false;
                 }
                 }
                 else
                 else
                 {
                 {
+                    ImageFrozen();
                     return true;
                     return true;
                 }
                 }
             }
             }
@@ -460,9 +704,83 @@ namespace SmartSEMControl
                 return false;
                 return false;
             }
             }
         }
         }
-#endregion
+        #endregion
 
 
-#region SEM移动接口
+        #region 图像解冻
+        public Boolean ImageFrozen()
+        {
+            return WriteDataParams(DP_FROZEN, (float)1); 
+        }
+        public Boolean ImageLive()
+        {
+            return WriteDataParams(DP_FROZEN, (float)0);
+        }
+        #endregion
+
+        #region 图像类型切换
+        public Boolean DetectorType(float set)
+        {
+            return WriteDataParams(DP_DETECTOR_TYPE, set);
+        }
+        #endregion
+
+        #region 电子束移动接口
+        /// <summary>
+        /// 获取电子束移动接口X
+        /// </summary>
+        /// <returns>true:float or false:NaN</returns>
+        public float GetBeamShiftX()
+        {
+            float ret = 0;
+            if (ReadParams(AP_BEAMSHIFT_X, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 获取电子束移动接口Y
+        /// </summary>
+        /// <returns>true:float or false:NaN</returns>
+        public float GetBeamShiftY()
+        {
+            float ret = 0;
+            if (ReadParams(AP_BEAMSHIFT_Y, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 设置电子束移动接口X
+        /// </summary>
+        /// <param name="set">X坐标</param>
+        /// <returns>true or false</returns>
+        public Boolean SetBeamShiftX(float set)
+        {
+            return WriteParams(AP_BEAMSHIFT_X, set);
+        }
+
+        /// <summary>
+        /// 设置电子束移动接口Y
+        /// </summary>
+        /// <param name="set">X坐标</param>
+        /// <returns>true or false</returns>
+        public Boolean SetBeamShiftY(float set)
+        {
+            return WriteParams(AP_BEAMSHIFT_Y, set);
+        }
+        #endregion
+
+        #region 样品台移动接口
         /// <summary>
         /// <summary>
         /// 返回样品台坐标数组
         /// 返回样品台坐标数组
         /// </summary>
         /// </summary>
@@ -499,7 +817,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 X轴
+        /// 样品台位置 X轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtX()
         public float GetStageAtX()
@@ -516,7 +834,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 Y轴
+        /// 样品台位置 Y轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtY()
         public float GetStageAtY()
@@ -533,7 +851,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 Z轴
+        /// 样品台位置 Z轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtZ()
         public float GetStageAtZ()
@@ -550,7 +868,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 T轴
+        /// 样品台位置 T轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtT()
         public float GetStageAtT()
@@ -567,7 +885,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 R轴
+        /// 样品台位置 R轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtR()
         public float GetStageAtR()
@@ -584,7 +902,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 M轴
+        /// 样品台位置 M轴
         /// </summary>
         /// </summary>
         /// <returns>true:float or false:NaN</returns>
         /// <returns>true:float or false:NaN</returns>
         public float GetStageAtM()
         public float GetStageAtM()
@@ -601,7 +919,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 X轴
+        /// 样品台位置 X轴
         /// </summary>
         /// </summary>
         /// <param name="set">X轴移动坐标</param>
         /// <param name="set">X轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -611,7 +929,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 Y轴
+        /// 样品台位置 Y轴
         /// </summary>
         /// </summary>
         /// <param name="set">Y轴移动坐标</param>
         /// <param name="set">Y轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -621,7 +939,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 Z轴
+        /// 样品台位置 Z轴
         /// </summary>
         /// </summary>
         /// <param name="set">Y轴移动坐标</param>
         /// <param name="set">Y轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -631,7 +949,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 T轴
+        /// 样品台位置 T轴
         /// </summary>
         /// </summary>
         /// <param name="set">Y轴移动坐标</param>
         /// <param name="set">Y轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -641,7 +959,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 R轴
+        /// 样品台位置 R轴
         /// </summary>
         /// </summary>
         /// <param name="set">Y轴移动坐标</param>
         /// <param name="set">Y轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -651,7 +969,7 @@ namespace SmartSEMControl
         }
         }
 
 
         /// <summary>
         /// <summary>
-        /// SEM位置 M轴
+        /// 样品台位置 M轴
         /// </summary>
         /// </summary>
         /// <param name="set">M轴移动坐标</param>
         /// <param name="set">M轴移动坐标</param>
         /// <returns></returns>
         /// <returns></returns>
@@ -659,9 +977,19 @@ namespace SmartSEMControl
         {
         {
             return WriteParams(AP_STAGE_GOTO_M, set);
             return WriteParams(AP_STAGE_GOTO_M, set);
         }
         }
-#endregion
+        #endregion
+
+        #region 移动样品台XY轴
+        public Boolean MoveStageXY(float x,float y)
+        {
+            Boolean ret = false;
+            ret = SetStageGotoX(x);
+            ret = SetStageGotoY(y);
+            return ret;
+        }
+        #endregion
 
 
-#region Scan Rotate角度接口
+        #region Scan Rotate角度接口
         /// <summary>
         /// <summary>
         /// 获取Scan Rotate角度接口
         /// 获取Scan Rotate角度接口
         /// </summary>
         /// </summary>
@@ -686,11 +1014,15 @@ namespace SmartSEMControl
         /// <returns>true or false</returns>
         /// <returns>true or false</returns>
         public Boolean SetScanRotation(float set)
         public Boolean SetScanRotation(float set)
         {
         {
-            return WriteParams(AP_SCANROTATION, set);
+            Boolean ret = false;
+            ret = WriteDataParams(DP_SCAN_ROT, 1);
+            ret = WriteParams(AP_SCANROTATION, set);
+            ret = WriteDataParams(DP_SCAN_ROT, 0);
+            return ret;
         }
         }
-#endregion
+        #endregion
 
 
-#region 像素读取PixelSize
+        #region 像素读取PixelSize
         /// <summary>
         /// <summary>
         /// 获取Pixel Size 接口,只读
         /// 获取Pixel Size 接口,只读
         /// </summary>
         /// </summary>
@@ -707,20 +1039,82 @@ namespace SmartSEMControl
                 return float.NaN;
                 return float.NaN;
             }
             }
         }
         }
-#endregion
+        #endregion
+
+        #region 电子束校正设置
+        /// <summary>
+        /// 读取电子束校正状态
+        /// </summary>
+        /// <returns></returns>
+        public float GetTiltCorrection()
+        {
+            float ret = 0;
+            if (ReadParams(DP_TILT_CORRECTION, ref ret))
+            {
+                return ret;
+            }
+            else
+            {
+                return float.NaN;
+            }
+        }
+
+        /// <summary>
+        /// 设置电子束校正状态
+        /// </summary>
+        /// <param name="set"></param>
+        /// <returns></returns>
+        public Boolean SetTiltCorrectionOff()
+        {
+            return WriteDataParams(DP_TILT_CORRECTION, (float)0);
+        }
+        public Boolean SetTiltCorrectionOn()
+        {
+            return WriteDataParams(DP_TILT_CORRECTION, (float)1);
+        }
+        #endregion
 
 
-#region 开启电压
+        #region 开启电压
         public Boolean CmdOpenVoltage()
         public Boolean CmdOpenVoltage()
         {
         {
             return ExecuteCmd(CMD_BEAM_ON);
             return ExecuteCmd(CMD_BEAM_ON);
         }
         }
-#endregion
+        #endregion
 
 
-#region 关闭电压
+        #region 关闭电压
         public Boolean CmdCloseVoltage()
         public Boolean CmdCloseVoltage()
         {
         {
             return ExecuteCmd(CMD_EHT_OFF);
             return ExecuteCmd(CMD_EHT_OFF);
         }
         }
-#endregion
+        #endregion
+
+        #region 自动对焦1
+        public Boolean CmdAutoFocusCoarse()
+        {
+            return ExecuteCmd(CMD_AUTO_FOCUS_COARSE);
+        }
+        #endregion
+
+        #region 自动对焦2
+        public Boolean CmdAutoFocusFine()
+        {
+            return ExecuteCmd(CMD_AUTO_FOCUS_FINE);
+        }
+        #endregion
+
+        #region 自动消像散
+        public Boolean CmdAutoStig()
+        {
+            return ExecuteCmd(CMD_AUTO_STIG);
+        }
+        #endregion
+
+        #region 调用宏文件命令
+        public Boolean CMDMCFFilename(String filename)
+        {
+            String CMDMCF = MCF_FILENAME + filename;
+            return ExecuteCmd(CMDMCF);
+        }
+        #endregion
     }
     }
 }
 }