using SA_LTT; using SA_LTT.Module; using System; using System.Threading; using System.Windows.Forms; namespace SA_LTT_UI.Viewer { public partial class AttenuatorViewer : Form { MainFrame _mainFrame; Thread t_UIUpdate; bool updateCheck; protected override CreateParams CreateParams { get { CreateParams MyCp = base.CreateParams; MyCp.ExStyle |= 0x02000000; return MyCp; } } public AttenuatorViewer(MainFrame mainFrame) { InitializeComponent(); cbb_Resolution.SelectedIndex = 1; _mainFrame = mainFrame; t_UIUpdate = new Thread(UIUpdateTh); t_UIUpdate.Start(); } private void UIUpdateTh() { while (_mainFrame.equipment.IsDisposed == false) { Thread.Sleep(10); if (updateCheck == false) { updateCheck = true; UIUpdate(); } } } private void UIUpdate() { if (InvokeRequired) { BeginInvoke(new UIUpdateDelegate(UIUpdate)); return; } else { try { lb_RotatorPosition.Text = $"Current waveplate rotator position is {_mainFrame.equipment.attenuator.Position} steps, {_mainFrame.equipment.attenuator.Degree} deg"; lb_MotorState.Text = _mainFrame.equipment.attenuator.MotorState.ToString(); lb_MotorSpeed.Text = _mainFrame.equipment.attenuator.DegreePerSecondFromSpeed.ToString() + "degree/sec"; lb_MotorResolution.Text = _mainFrame.equipment.attenuator.SteppingResolution.ToString(); lb_AccelerationValue.Text = _mainFrame.equipment.attenuator.AccelerationValue.ToString(); lb_DecelerationValue.Text = _mainFrame.equipment.attenuator.DecelerationValue.ToString(); lb_MotorEnable.BackColor = _mainFrame.equipment.attenuator.MotorEnable ? System.Drawing.Color.Lime : System.Drawing.Color.Red; lb_PortName.Text = _mainFrame.equipment.attenuator.PortName; lb_PortName.BackColor = _mainFrame.equipment.attenuator.IsOpen ? System.Drawing.Color.Lime : System.Drawing.Color.Red; if (_mainFrame.equipment.attenuator.IsOpen) { if (gb_Control.Enabled == false) { gb_Control.Enabled = true; } } else { if (gb_Control.Enabled) { gb_Control.Enabled = false; } } } catch (Exception e) { EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace); } finally { updateCheck = false; } } } private void AttenuatorViewer_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); } private void btn_MinusJog_MouseDown(object sender, MouseEventArgs e) { _mainFrame.equipment.attenuator.JogNegative(); } private void btn_MinusJog_MouseUp(object sender, MouseEventArgs e) { _mainFrame.equipment.attenuator.Stop(); } private void btn_PlusJog_MouseDown(object sender, MouseEventArgs e) { _mainFrame.equipment.attenuator.JogPositive(); } private void btn_PlusJog_MouseUp(object sender, MouseEventArgs e) { _mainFrame.equipment.attenuator.Stop(); } private void btn_MoveMinus1000_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(-1000); } private void btn_MoveMinus100_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(-100); } private void btn_MoveMinus10_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(-10); } private void btn_MoveMinus1_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(-1); } private void btn_MovePlus1_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(1); } private void btn_MovePlus10_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(10); } private void btn_MovePlus100_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(100); } private void btn_MovePlus1000_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.MoveRelative(1000); } private void btn_Home_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.Home(); } private void btn_Stop_Click(object sender, EventArgs e) { _mainFrame.equipment.attenuator.Stop(); } private void tb_Speed_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { double speed; if(double.TryParse(tb_Speed.Text, out speed)) { int speedValue = _mainFrame.equipment.attenuator.GetSpeedFromDegreePerSecond(speed); _mainFrame.equipment.attenuator.SetSpeed(speedValue); } } } private void cbb_Resolution_SelectedIndexChanged(object sender, EventArgs e) { if (_mainFrame != null) { Attenuator.MicroSteppingResolution[] data = (Attenuator.MicroSteppingResolution[])Enum.GetValues(typeof(Attenuator.MicroSteppingResolution)); _mainFrame.equipment.attenuator.SetMicroSteppingResolution(data[cbb_Resolution.SelectedIndex]); } } private void btn_AngleSet_Click(object sender, EventArgs e) { float angle; if(float.TryParse(tb_AngleValue.Text, out angle)) { _mainFrame.equipment.attenuator.MoveAbsolute(angle); } else { MessageBoxPad mbp = new MessageBoxPad("숫자값 을 입력해 주세요."); mbp.Show(); } } } }