using SmartSEMControl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HOZProject
{
public partial class FormUCMain : Form
{
//全局只有一个fatorySEM
static FactoryHardware factorySEM = FactoryHardware.Instance;
ISEMControl iSEM = factorySEM.ISEM;
//电镜连接状态变量
bool m_SEMConnectState = false;
//电压状态变量
bool m_HTState = false;
//样品台状态变量
bool m_StageStage = false;
int ThreadTime = 1000;
public FormUCMain()
{
InitializeComponent();
}
#region 窗体事件
private void FormUCMain_Load(object sender, EventArgs e)
{
//获取电镜状态
Thread thread = new Thread(new ThreadStart(GetSEMConnectState));
thread.Start();
}
#endregion
#region 获取初始参数
public void GetInitState()
{
if (iSEM != null)
{
}
}
#endregion
#region 关闭与最小化按钮事件
private void pichide_MouseEnter(object sender, EventArgs e)
{
pichide.Image = Properties.Resources.Min_Blue;
}
private void pichide_MouseLeave(object sender, EventArgs e)
{
pichide.Image = Properties.Resources.Min_Gray;
}
private void picexit_MouseEnter(object sender, EventArgs e)
{
picexit.Image = Properties.Resources.exit_Red;
}
private void picexit_MouseLeave(object sender, EventArgs e)
{
picexit.Image = Properties.Resources.exit_Gray;
}
private void picexit_Click(object sender, EventArgs e)
{
this.Close();
}
private void pichide_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
#endregion
#region 拖动窗体
private Point mouseOff;//鼠标移动位置变量
private bool leftFlag;//标签是否为左键
private void FormUCMain_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}
}
private void FormUCMain_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}
private void FormUCMain_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}
#endregion
#region SEM功能按钮读写事件
#region 连接、关闭设备
///
/// 初始化连接设备
///
///
///
private void btnConnect_Click(object sender, EventArgs e)
{
//1.判断当前连接状态
if (m_SEMConnectState)
{
if (iSEM != null)
{
iSEM.Dispose();
}
}
}
#endregion
#region 获取与设置缩放参数
///
/// 获取缩放参数
///
///
///
private void btnenlargeGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetMagnification();
if (float.IsNaN(ret))
{
txtenlarge.Enabled = false;
btnenlargeSet.Enabled = false;
}
else
{
txtenlarge.Text = ret.ToString();
btnenlargeSet.Enabled = true;
}
}
///
/// 获取缩放参数
///
///
///
private void btnenlargeSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtenlarge.Text, out set))
{
iSEM.SetMagnification(set);
}
}
#endregion
#region 获取与设置亮度参数
private void btnBrightnessGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetBrightness();
if (float.IsNaN(ret))
{
txtBrightness.Enabled = false;
btnBrightnessSet.Enabled = false;
}
else
{
txtBrightness.Text = ret.ToString();
btnBrightnessSet.Enabled = true;
}
}
private void btnBrightnessSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtBrightness.Text, out set))
{
iSEM.SetBrightness(set);
}
}
#endregion
#region 获取与设置焦距参数
private void btnWDGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetWorkingDistance();
if (float.IsNaN(ret))
{
txtWD.Enabled = false;
btnWDSet.Enabled = false;
}
else
{
txtWD.Text = ret.ToString();
btnWDSet.Enabled = true;
}
}
private void btnWDSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtWD.Text, out set))
{
iSEM.SetWorkingDistance(set);
}
}
#endregion
#region 获取与设置对比度参数
private void btnContrastGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetContrast();
if (float.IsNaN(ret))
{
txtContrast.Enabled = false;
btnContrastSet.Enabled = false;
}
else
{
txtContrast.Text = ret.ToString();
btnContrastSet.Enabled = true;
}
}
private void btnContrastSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtContrast.Text, out set))
{
iSEM.SetContrast(set);
}
}
#endregion
#region 获取与设置倾斜矫正参数
private void btnTiltAngleGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetTiltAngle();
if (float.IsNaN(ret))
{
txtTiltAngle.Enabled = false;
btnTiltAngleSet.Enabled = false;
}
else
{
txtTiltAngle.Text = ret.ToString();
btnTiltAngleSet.Enabled = true;
}
}
private void btnTiltAngleSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtTiltAngle.Text, out set))
{
iSEM.SetTiltAngle(set);
}
}
#endregion
#region 获取与设置旋转角度参数
private void btnScanRotationGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetScanRotation();
if (float.IsNaN(ret))
{
txtScanRotation.Enabled = false;
btnScanRotationSet.Enabled = false;
}
else
{
txtScanRotation.Text = ret.ToString();
btnScanRotationSet.Enabled = true;
}
}
private void btnScanRotationSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtScanRotation.Text, out set))
{
iSEM.SetScanRotation(set);
}
}
#endregion
#region 获取与设置像散Y参数
private void btnAstigmatismXGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetAstigmatismX();
if (float.IsNaN(ret))
{
txtAstigmatismX.Enabled = false;
btnAstigmatismXSet.Enabled = false;
}
else
{
txtAstigmatismX.Text = ret.ToString();
btnAstigmatismXSet.Enabled = true;
}
}
private void btnAstigmatismXSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtAstigmatismX.Text, out set))
{
iSEM.SetAstigmatismX(set);
}
}
#endregion
#region 获取与设置像散Y参数
private void btnAstigmatismYGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetAstigmatismY();
if (float.IsNaN(ret))
{
txtAstigmatismY.Enabled = false;
btnAstigmatismYSet.Enabled = false;
}
else
{
txtAstigmatismY.Text = ret.ToString();
btnAstigmatismYSet.Enabled = true;
}
}
private void btnAstigmatismYSet_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtAstigmatismY.Text, out set))
{
iSEM.SetAstigmatismY(set);
}
}
#endregion
#region 获取像素尺寸
private void btnPixelSizeGet_Click(object sender, EventArgs e)
{
float ret = iSEM.GetPixelSize();
if (float.IsNaN(ret))
{
txtPixelSize.Text = "NaN";
}
else
{
txtPixelSize.Text = ret.ToString();
}
}
#endregion
#region 切换电压状态
private void pbHT_Click(object sender, EventArgs e)
{
if (!m_HTState)
{
//打开电压
iSEM.CmdOpenVoltage();
m_HTState = true;
pbHT.BackgroundImage = Properties.Resources.OFF;
}
else
{
//关闭电压
iSEM.CmdCloseVoltage();
m_HTState = false;
pbHT.BackgroundImage = Properties.Resources.ON;
}
}
#endregion
#region 获取样品台六轴位置信息
private void btnGetStagePosition_Click(object sender, EventArgs e)
{
try
{
float[] pt = iSEM.GetStagePosition();
if (!float.IsNaN(pt[0]))
{
txtStageX.Text = pt[0].ToString();
}
if (!float.IsNaN(pt[1]))
{
txtStageY.Text = pt[1].ToString();
}
if (!float.IsNaN(pt[2]))
{
txtStageZ.Text = pt[2].ToString();
}
if (!float.IsNaN(pt[3]))
{
txtStageT.Text = pt[3].ToString();
}
if (!float.IsNaN(pt[4]))
{
txtStageR.Text = pt[4].ToString();
}
if (!float.IsNaN(pt[5]))
{
txtStageM.Text = pt[5].ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 获取与设置样品台X轴参数
private void btnStageGetX_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtX();
if (float.IsNaN(ret))
{
txtStageX.Text = "NaN";
}
else
{
txtStageX.Text = ret.ToString();
}
}
private void btnStageSetX_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageX.Text, out set))
{
iSEM.SetStageGotoX(set);
}
}
#endregion
#region 获取与设置样品台T轴参数
private void btnStageGetT_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtT();
if (float.IsNaN(ret))
{
txtStageT.Text = "NaN";
}
else
{
txtStageT.Text = ret.ToString();
}
}
private void btnStageSetT_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageT.Text, out set))
{
iSEM.SetStageGotoT(set);
}
}
#endregion
#region 获取与设置样品台Y轴参数
private void btnStageGetY_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtY();
if (float.IsNaN(ret))
{
txtStageY.Text = "NaN";
}
else
{
txtStageY.Text = ret.ToString();
}
}
private void btnStageSetY_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageY.Text, out set))
{
iSEM.SetStageGotoY(set);
}
}
#endregion
#region 获取与设置样品台R轴参数
private void btnStageGetR_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtR();
if (float.IsNaN(ret))
{
txtStageR.Text = "NaN";
}
else
{
txtStageR.Text = ret.ToString();
}
}
private void btnStageSetR_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageR.Text, out set))
{
iSEM.SetStageGotoR(set);
}
}
#endregion
#region 获取与设置样品台Z轴参数
private void btnStageGetZ_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtZ();
if (float.IsNaN(ret))
{
txtStageZ.Text = "NaN";
}
else
{
txtStageZ.Text = ret.ToString();
}
}
private void btnStageSetZ_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageZ.Text, out set))
{
iSEM.SetStageGotoZ(set);
}
}
#endregion
#region 获取与设置样品台M轴参数
private void btnStageGetM_Click(object sender, EventArgs e)
{
float ret = iSEM.GetStageAtM();
if (float.IsNaN(ret))
{
txtStageM.Text = "NaN";
}
else
{
txtStageM.Text = ret.ToString();
}
}
private void btnStageSetM_Click(object sender, EventArgs e)
{
float set = 0;
if (float.TryParse(txtStageM.Text, out set))
{
iSEM.SetStageGotoM(set);
}
}
#endregion
#endregion
#region 获取状态(电镜连接状态、自动函数的状态、样品台状态)
public void GetSEMConnectState()
{
bool result = GetAllState(StateType.SEMConnectState);
if (result)
{
//已连接,设置按钮图像
btnConnect.BackgroundImage = Properties.Resources.CloseImg;
}
else
{
btnConnect.BackgroundImage = Properties.Resources.ConnectImg;
}
//设置电镜连接状态:True
m_SEMConnectState = result;
}
public void GetAutoFUNCState()
{
bool result = GetAllState(StateType.AutoFUNCState);
if (result)
{
}
else
{
}
}
public void GetStageState()
{
bool result = GetAllState(StateType.StageState);
if (result)
{
btnConnect.BackgroundImage = Properties.Resources.CloseImg;
}
else
{
btnConnect.BackgroundImage = Properties.Resources.ConnectImg;
}
}
public bool GetAllState(StateType stateType)
{
bool bResult = false;
float fResult = 0;
switch (stateType)
{
case StateType.SEMConnectState:
while (true)
{
bResult = iSEM.ConnectStatus();
if (bResult)
{
return bResult;
}
Thread.Sleep(ThreadTime);
}
case StateType.AutoFUNCState:
while (true)
{
fResult = iSEM.GetAutoFunction();
if (fResult > 0)
{
bResult = true;
return bResult;
}
Thread.Sleep(ThreadTime);
}
case StateType.StageState:
while (true)
{
fResult = iSEM.GetStageIs();
if (fResult > 0)
{
bResult = true;
return bResult;
}
Thread.Sleep(ThreadTime);
}
}
return bResult;
}
///
/// 状态枚举
///
public enum StateType
{
SEMConnectState = 0,
AutoFUNCState = 1,
StageState = 2
}
#endregion
private void btnMoveSEMCenter_Click(object sender, EventArgs e)
{
//设置当前样品台状态
m_StageStage = false;
float setX = 0;
float setY = 0;
bool GotoResult = false;
//判断X、Y轴信息
if (float.TryParse(txtStageX.Text, out setX)&&float.TryParse(txtStageY.Text, out setY))
{
GotoResult = iSEM.MoveStageXY(setX,setY);
}
}
private void btnStop_Click(object sender, EventArgs e)
{
if (iSEM != null)
{
//即刻停止
iSEM.CmdStageAbort();
}
}
private void btnGetImage_Click(object sender, EventArgs e)
{
FormShowImage fShowImage = new FormShowImage();
fShowImage.ShowDialog();
}
}
}