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(); } } }