|
@@ -25,6 +25,7 @@ namespace MeasureThread
|
|
|
private ISEMControl iSEM;
|
|
|
const float Z_Min = 0;
|
|
|
const float Z_Max = 0.05f;
|
|
|
+ const float fSateyZ = (float)0.007;//单位是米
|
|
|
public Locate(ISEMControl iSEM)
|
|
|
{
|
|
|
this.log = NLog.LogManager.GetCurrentClassLogger();
|
|
@@ -32,14 +33,116 @@ namespace MeasureThread
|
|
|
|
|
|
this.iSEM = iSEM ?? throw new ArgumentNullException(nameof(iSEM));
|
|
|
}
|
|
|
- //public Locate( LocateParam prm, ISEMControl iSEM)
|
|
|
- //{
|
|
|
- // this.log = NLog.LogManager.GetCurrentClassLogger();
|
|
|
+
|
|
|
+ public bool LocateCutHolePosition(MeasureData.CutHole currHole, bool ifTilt)
|
|
|
+ {
|
|
|
+ if (ifTilt)//如果是倾斜样品台,移动Z轴
|
|
|
+ {
|
|
|
+ //0、先移动Z轴到比较低的位置上。
|
|
|
+ if (!MoveZAxis(fSateyZ, Locate.ZAxisDirection.down))
|
|
|
+ {
|
|
|
+
|
|
|
+ log.Error("测量线程报错:样品台Z轴移动失败,Z移动" + fSateyZ.ToString(), false);
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //1、移动样品台到第一个观测点,先移动R轴,再移动XY轴
|
|
|
+
|
|
|
+ if (!MoveRAxis(currHole.Position.R))
|
|
|
+ {
|
|
|
+
|
|
|
+ log.Error("测量线程报错:样品台R轴移动失败,R为" + currHole.Position.ToString(), false);
|
|
|
+
|
|
|
+ //continue;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //2、移动XY轴
|
|
|
+ // lo.MoveToPixByMoveStage(currHole.Position.X,currHole.Position.Y)
|
|
|
+ if (!iSEM.MoveStageXY(currHole.Position.X, currHole.Position.Y))
|
|
|
+ {
|
|
|
+
|
|
|
+ log.Error("测量线程报错:样品台XY轴移动失败,(X,Y)为"
|
|
|
+ + currHole.Position.X.ToString() + ","
|
|
|
+ + currHole.Position.Y.ToString() + ")", false);
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(1000);
|
|
|
+
|
|
|
+ if (iSEM.GetStageIs() == 0)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //判断是否停止进程
|
|
|
+
|
|
|
+
|
|
|
+ //3、恢复Z轴
|
|
|
+ if (ifTilt)
|
|
|
+ {
|
|
|
+ //恢复Z轴
|
|
|
+
|
|
|
+ if (!MoveZAxisByAbs(currHole.Position.Z))
|
|
|
+ {
|
|
|
+
|
|
|
+ log.Error("测量线程报错:样品台Z轴移动失败,Z为" + currHole.Position.Z.ToString(), false);
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- // this.log = log ?? throw new ArgumentNullException(nameof(log));
|
|
|
- // this.prm = prm ?? throw new ArgumentNullException(nameof(prm));
|
|
|
- // this.iSEM = iSEM ?? throw new ArgumentNullException(nameof(iSEM));
|
|
|
- //}
|
|
|
+
|
|
|
+ //4、设置WD
|
|
|
+ iSEM.SetWorkingDistance(currHole.Position.WD);
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ return true;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public bool RotateStageByDeltaR(float deltaR)
|
|
|
+ {
|
|
|
+ float Zpos = iSEM.GetStageAtZ();
|
|
|
+ Thread.Sleep(200);
|
|
|
+
|
|
|
+ log.Info("测量线程:当前Z轴位置" + Zpos.ToString() + "m", true);
|
|
|
+ Locate lo = new Locate(iSEM);
|
|
|
+ //选择之前,先降Z轴
|
|
|
+ lo.MoveZAxis(fSateyZ, Locate.ZAxisDirection.down);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ iSEM.SetStageDeltaR(deltaR);
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(1000);
|
|
|
+
|
|
|
+ if (iSEM.GetStageIs() == 0)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ if (!MoveZAxisByAbs(Zpos))
|
|
|
+ {
|
|
|
+ log.Error("测量线程报错:样品台Z回到安全位置失败", false);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
public void RecordCurrentBeamShiftAndStagePosition()
|
|
|
{
|
|
|
#region 记录初始设置的BeamShift的百分比和样品台XY位置
|
|
@@ -138,7 +241,7 @@ namespace MeasureThread
|
|
|
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(2000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -155,7 +258,7 @@ namespace MeasureThread
|
|
|
}
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(4000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -184,7 +287,7 @@ namespace MeasureThread
|
|
|
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(2000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -240,7 +343,7 @@ namespace MeasureThread
|
|
|
//判断是否移动完成
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(5000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -259,7 +362,7 @@ namespace MeasureThread
|
|
|
//判断是否移动完成
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(5000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -348,7 +451,7 @@ namespace MeasureThread
|
|
|
//判断是否移动完成
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(4000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -396,7 +499,7 @@ namespace MeasureThread
|
|
|
//判断是否移动完成
|
|
|
while (true)
|
|
|
{
|
|
|
- Thread.Sleep(4000);
|
|
|
+ Thread.Sleep(1000);
|
|
|
if (iSEM.GetStageIs() == 0)
|
|
|
{
|
|
|
break;
|
|
@@ -416,11 +519,9 @@ namespace MeasureThread
|
|
|
}
|
|
|
this.prm.PositionX = x;
|
|
|
this.prm.PositionY = y;
|
|
|
- //this.prm.PixelSize_Y_cur = pixelSize_Y_cur;
|
|
|
+
|
|
|
MoveToPixByMoveStage();
|
|
|
- Thread.Sleep(1000);
|
|
|
- iSEM.SetAutoVideoBrightnessAndContrast();
|
|
|
- Thread.Sleep(3000);
|
|
|
+ Thread.Sleep(200);
|
|
|
return true;
|
|
|
|
|
|
}
|
|
@@ -435,9 +536,7 @@ namespace MeasureThread
|
|
|
this.prm.PositionY = y;
|
|
|
this.prm.PixelSize_Y_cur = pixelSize_Y_cur;
|
|
|
MoveToPix();
|
|
|
- Thread.Sleep(1000);
|
|
|
- iSEM.SetAutoVideoBrightnessAndContrast();
|
|
|
- Thread.Sleep(3000);
|
|
|
+ Thread.Sleep(200);
|
|
|
return true;
|
|
|
}
|
|
|
public LocateParam GetParam()
|