|
@@ -14,6 +14,12 @@ using MeasureData;
|
|
|
|
|
|
namespace MeasureThread
|
|
namespace MeasureThread
|
|
{
|
|
{
|
|
|
|
+ public enum FMode
|
|
|
|
+ {
|
|
|
|
+ Manual,
|
|
|
|
+ Auto
|
|
|
|
+ }
|
|
|
|
+
|
|
public class Measure
|
|
public class Measure
|
|
{
|
|
{
|
|
//全局只有一个fatorySEM
|
|
//全局只有一个fatorySEM
|
|
@@ -52,6 +58,14 @@ namespace MeasureThread
|
|
set { this.m_ThreadStatus = value; }
|
|
set { this.m_ThreadStatus = value; }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //对焦模式
|
|
|
|
+ private FMode m_bFocusMode;
|
|
|
|
+ public FMode FocusMode
|
|
|
|
+ {
|
|
|
|
+ get { return this.m_bFocusMode; }
|
|
|
|
+ set { this.m_bFocusMode = FocusMode; }
|
|
|
|
+ }
|
|
|
|
+
|
|
//// SEM data general
|
|
//// SEM data general
|
|
//CSEMDataGnrPtr m_pSEMDataGnr;
|
|
//CSEMDataGnrPtr m_pSEMDataGnr;
|
|
|
|
|
|
@@ -63,6 +77,12 @@ namespace MeasureThread
|
|
//构造函数
|
|
//构造函数
|
|
public Measure()
|
|
public Measure()
|
|
{
|
|
{
|
|
|
|
+ Init();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void Init()
|
|
|
|
+ {
|
|
|
|
+ FocusMode = FMode.Manual;
|
|
}
|
|
}
|
|
|
|
|
|
//初始化测量业务, 读测量文件,判断是否有可测试的切孔
|
|
//初始化测量业务, 读测量文件,判断是否有可测试的切孔
|
|
@@ -150,13 +170,42 @@ namespace MeasureThread
|
|
//第一个孔的测试过程
|
|
//第一个孔的测试过程
|
|
public void FirstHole()
|
|
public void FirstHole()
|
|
{
|
|
{
|
|
|
|
+ MeasureData.CutHole firstHole = m_cutHoles[0];
|
|
//12.根据样品类型参数确定是否需要PT沉积,控制PT针插入
|
|
//12.根据样品类型参数确定是否需要PT沉积,控制PT针插入
|
|
|
|
+ if (firstHole.PT == PTType.Have)
|
|
|
|
+ {
|
|
|
|
+ if (!iSEM.InsertPT())
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
//13.自动定位切割
|
|
//13.自动定位切割
|
|
{
|
|
{
|
|
//1.控制SEM放大600X
|
|
//1.控制SEM放大600X
|
|
|
|
+ if (!iSEM.SetMagnification(600))
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
//2.控制SEM自动对焦、亮度、对比度
|
|
//2.控制SEM自动对焦、亮度、对比度
|
|
|
|
+ if (FocusMode == FMode.Manual)
|
|
|
|
+ {
|
|
|
|
+ //弹出手动对焦的窗口
|
|
|
|
+ }
|
|
|
|
+ else if (FocusMode == FMode.Auto)
|
|
|
|
+ {
|
|
|
|
+ //调用自动对焦模块
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
//3.设置SEM进行角度补偿54度
|
|
//3.设置SEM进行角度补偿54度
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
//4.控制SEM拍照
|
|
//4.控制SEM拍照
|
|
//5.保存照片
|
|
//5.保存照片
|
|
{
|
|
{
|
|
@@ -241,5 +290,51 @@ namespace MeasureThread
|
|
{
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //角度补偿
|
|
|
|
+ public bool TiltCorrection(float a_fAngle)
|
|
|
|
+ {
|
|
|
|
+ bool bTilt = false;
|
|
|
|
+ float fOldTilt = iSEM.GetTiltCorrection();
|
|
|
|
+ if (fOldTilt == float.NaN)
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ else if (fOldTilt == 1)
|
|
|
|
+ {
|
|
|
|
+ bTilt = true;
|
|
|
|
+ }
|
|
|
|
+ else if (fOldTilt == 0)
|
|
|
|
+ {
|
|
|
|
+ bTilt = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!iSEM.SetTiltCorrectionOn())
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!iSEM.SetTiltAngle(a_fAngle))
|
|
|
|
+ {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //恢复原始角度
|
|
|
|
+ if (bTilt)
|
|
|
|
+ {
|
|
|
|
+ if (!iSEM.SetTiltCorrectionOn())
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if (!iSEM.SetTiltCorrectionOff())
|
|
|
|
+ {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|