using DataEntity.Share; using DriverLib.Engine; using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using XCommon.Log; using XHandler.Controls; using XHandler.View.MethodProperty; using XImagingXhandler.XDAL; using System.Linq; using System.Runtime.Remoting.Channels; namespace XHandler.View { /// /// 控制移液枪类 /// public partial class ControlPipetteGun : Window { #region 变量 //private GetOrSetLattice getOrSetLattice = new GetOrSetLattice(); //private UnloadTipsBll unloadTipsBll = new UnloadTipsBll(); private UnloadTipsControl unloadTipsCtrl = new UnloadTipsControl(Shared.SoftwareInformation.currentculture); #endregion #region 构造函数 /// /// 构造函数 /// public ControlPipetteGun() { InitializeComponent(); } #endregion #region 初始化 /// /// 初始化 /// /// /// private void ControlPipetteGun_Loaded(object sender, RoutedEventArgs e) { try { //获取当前系统的非夹爪通道数量 List deviceArmList = DeviceArmDB.GetDeviceArmFromdb(Shared.SoftwareInformation.software_information_id); var armListResult = deviceArmList.Where(x => x.arm_type != 0); if(armListResult.Any()&&armListResult.Count()==1) { cbxArmZ.Visibility = Visibility.Collapsed; } else { cbxArmZ.Visibility = Visibility.Visible; cbxArmZ.ItemsSource= armListResult; cbxArmZ.SelectedIndex = 0; } } catch (Exception ex) { LoggerHelper.ErrorLog("ControlPipetteGun_Loaded ERROR:", ex); } } #endregion #region 关闭窗口 /// /// 关闭窗口 /// /// /// private void btnClose_Click(object sender, RoutedEventArgs e) { try { this.Close(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region X-轴偏移 TODO /// /// 往左偏移 /// /// /// private void btnLeft_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxXOffset, "请输入X-轴偏移量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.XMoveLeft(Shared.ChanelArmId, float.Parse(tBoxXOffset.Text)); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪X轴向右偏移"); } } /// /// 往右偏移 /// /// /// private void btnRight_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxXOffset, "请输入X-轴偏移量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.XMoveRight(Shared.ChanelArmId, float.Parse(tBoxXOffset.Text)); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪X轴向左偏移"); } } #endregion #region Y-轴偏移 TODO /// /// 往前偏移 /// /// /// private void btnFwd_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxYOffset, "请输入Y-轴偏移量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.ADPYMoveForward(Shared.ChanelArmId, float.Parse(tBoxYOffset.Text)); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪Y轴向前偏移"); } } /// /// 往后偏移 /// /// /// private void btnBack_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxYOffset, "请输入Y-轴偏移量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.ADPYMoveBackward(Shared.ChanelArmId, float.Parse(tBoxYOffset.Text)); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪Y轴向后偏移"); } } #endregion #region Z-轴偏移 /// /// 向上偏移 /// /// /// private void btnUp_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxZOffset, "请输入Z-轴偏移量")) { return; } Mouse.OverrideCursor = Cursors.Wait; if (cbxArmZ.Visibility == Visibility.Visible) { DeviceArm deviceArm = (DeviceArm)cbxArmZ.SelectedItem; string[] strArmProperty = deviceArm.device_arm_property.Trim().Split(','); if (strArmProperty.Length > 0 && strArmProperty[0] != "") { if (deviceArm.channels >= 1 && strArmProperty.Length == 1) { Shared.ChannelsId = Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelCount = deviceArm.channels; } else { Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelsId = Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelCount = Shared.ChannelsId.Length; } } result = MethodAction.Instance.ADPZUp(Convert.ToInt32(cbxArmZ.SelectedValue), float.Parse(tBoxZOffset.Text), Shared.ChannelsId); } else { result = MethodAction.Instance.ADPZUp(Shared.ChanelArmId, float.Parse(tBoxZOffset.Text), Shared.ChannelsId); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { Mouse.OverrideCursor = null; // 判断结果是否失败 ResultIsFail(result, "移液枪Z轴向上偏移"); } } /// /// 向下偏移 /// /// /// private void btnDown_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxZOffset, "请输入Z-轴偏移量")) { return; } Mouse.OverrideCursor = Cursors.Wait; if (cbxArmZ.Visibility == Visibility.Visible) { DeviceArm deviceArm = (DeviceArm)cbxArmZ.SelectedItem; string[] strArmProperty = deviceArm.device_arm_property.Trim().Split(','); if (strArmProperty.Length > 0 && strArmProperty[0] != "") { if (deviceArm.channels >= 1 && strArmProperty.Length == 1) { Shared.ChannelsId = Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelCount = deviceArm.channels; } else { Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelsId = Array.ConvertAll(strArmProperty, s => int.Parse(s)); Shared.ChannelCount = Shared.ChannelsId.Length; } } result = MethodAction.Instance.ADPZDown(Convert.ToInt32(cbxArmZ.SelectedValue), float.Parse(tBoxZOffset.Text), Shared.ChannelsId); } else { result = MethodAction.Instance.ADPZDown(Shared.ChanelArmId, float.Parse(tBoxZOffset.Text), Shared.ChannelsId); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { Mouse.OverrideCursor = null; // 判断结果是否失败 ResultIsFail(result, "移液枪Z轴向下偏移"); } } #endregion #region 移液量 TODO /// /// 吸液 /// /// /// private void btnAspirate_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxPipetteOffset, "请输入吸液量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.ADPAspirate(Shared.ChanelArmId, float.Parse(tBoxPipetteOffset.Text), Shared.ChannelsId); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪吸液"); } } /// /// 加液 /// /// /// private void btnDispense_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; try { // 判断输入值是否为空 if (!ValueIsEmpty(tBoxPipetteOffset, "请输入排液量")) { return; } this.Cursor = Cursors.Wait; result = MethodAction.Instance.ADPDispense(Shared.ChanelArmId, float.Parse(tBoxPipetteOffset.Text), Shared.ChannelsId); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { this.Cursor = Cursors.Arrow; // 判断结果是否失败 ResultIsFail(result, "移液枪排液"); } } #endregion #region Footer TODO /// /// 安装Tip /// /// /// private void btnLoadTip_Click(object sender, RoutedEventArgs e) { HxResult result = new HxResult(); result.Result = ResultType.Success; PlsToolTipWin plsToolTipWin = null; try { this.Cursor = Cursors.Arrow; System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { plsToolTipWin = new PlsToolTipWin("暂不支持!"); plsToolTipWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; plsToolTipWin.ShowDialog(); })); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { } } /// /// 卸载Tip /// /// /// private void btnUnLoadTip_Click(object sender, RoutedEventArgs e) { try { string strMsg = "卸载Tip成功!"; PlsToolTipWin plsToolTipWin = null; // 卸载枪头 Mouse.OverrideCursor = Cursors.Wait; string strMsgTip = unloadTipsCtrl.UnLoadTip(); if (!string.IsNullOrEmpty(strMsgTip)) { strMsg = strMsgTip; } Mouse.OverrideCursor = null; System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { plsToolTipWin = new PlsToolTipWin(strMsg); plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; plsToolTipWin.ShowDialog(); })); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } finally { Mouse.OverrideCursor = null; } } /// /// 取消 /// /// /// private void btnCancel_Click(object sender, RoutedEventArgs e) { try { this.Close(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region 数据检查 /// /// 只能输入正浮点数 /// /// /// private void tBoxPreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e) { TextBox textElem = (sender as TextBox); // 解决连续输入很多. if ((textElem.Text.StartsWith(".") || string.IsNullOrWhiteSpace(textElem.Text) || textElem.Text.Contains(".")) && e.Text == ".") { e.Handled = true; return; } // 禁止在0前面继续输入0 int index = ((System.Windows.Controls.TextBox)e.Source).CaretIndex; if (textElem.Text.StartsWith("0.") && index == 0 && e.Text == "0") { e.Handled = true; return; } Regex re = new Regex("[^0-9.]+"); e.Handled = re.IsMatch(e.Text); } /// /// 输入框失去焦点:限制一位小数 /// /// /// private void tBoxLostFocus(object sender, RoutedEventArgs e) { TextBox textElem = (sender as TextBox); if (textElem.Text.Length > 0) { textElem.Text = Math.Round(double.Parse(textElem.Text), 1).ToString(); } } /// /// 禁用快捷指令 /// /// /// private void tBoxPreviewPreviewCanExecute(object sender, CanExecuteRoutedEventArgs e) { if (e.Command == ApplicationCommands.Copy || e.Command == ApplicationCommands.Cut || e.Command == ApplicationCommands.Paste) { e.CanExecute = false; e.Handled = true; } } /// /// 判断输入值是否为空 /// /// /// /// private bool ValueIsEmpty(TextBox tbox, string strMsg) { if (string.IsNullOrEmpty(tbox.Text)) { PlsToolTipWin plsToolTipWin = new PlsToolTipWin(strMsg); plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; plsToolTipWin.ShowDialog(); tbox.Focus(); return false; } return true; } /// /// 判断结果是否失败 /// /// /// private void ResultIsFail(HxResult result, string strMsg) { if (result.Result != ResultType.Success) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { PlsToolTipWin plsToolTipWin = new PlsToolTipWin(string.Format("{0}失败:{1}", strMsg, result.AlarmInfo)); plsToolTipWin.btnCancel.Visibility = Visibility.Hidden; plsToolTipWin.ShowDialog(); })); } } #endregion } }