using MECF.Framework.Common.CommonData.Reservoir; using MECF.Framework.Common.OperationCenter; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using static System.Net.Mime.MediaTypeNames; namespace CyberX8_Themes.UserControls { /// /// CrossDoseControl.xaml 的交互逻辑 /// public partial class CrossDoseControl : UserControl { public CrossDoseControl() { InitializeComponent(); } #region 属性 public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register( "ModuleName", typeof(string), typeof(CrossDoseControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender)); /// /// ModuleName /// public string ModuleName { get { return (string)this.GetValue(ModuleNameProperty); } set { this.SetValue(ModuleNameProperty, value); } } public static readonly DependencyProperty ANTransferFlowProperty = DependencyProperty.Register( "ANTransferFlow", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// ANTransferFlow /// public double ANTransferFlow { get { return (double)this.GetValue(ANTransferFlowProperty); } set { this.SetValue(ANTransferFlowProperty, value); } } public static readonly DependencyProperty RemainingFlowProperty = DependencyProperty.Register( "RemainingFlow", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// RemainingFlow /// public double RemainingFlow { get { return (double)this.GetValue(RemainingFlowProperty); } set { this.SetValue(RemainingFlowProperty, value); } } public static readonly DependencyProperty ReservoirDataProperty = DependencyProperty.Register( "ReservoirData", typeof(CompactMembranReservoirData), typeof(CrossDoseControl), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// ReservoirData /// public CompactMembranReservoirData ReservoirData { get { return (CompactMembranReservoirData)this.GetValue(ReservoirDataProperty); } set { this.SetValue(ReservoirDataProperty, value); } } public static readonly DependencyProperty PumpFactorProperty = DependencyProperty.Register( "PumpFactor", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.000, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// PumpFactor /// public double PumpFactor { get { return (double)this.GetValue(PumpFactorProperty); } set { this.SetValue(PumpFactorProperty, value); } } public static readonly DependencyProperty IsCalibrateEnableProperty = DependencyProperty.Register( "IsCalibrateEnable", typeof(bool), typeof(CrossDoseControl), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// IsCalibrateEnable /// public bool IsCalibrateEnable { get { return (bool)this.GetValue(IsCalibrateEnableProperty); } set { this.SetValue(IsCalibrateEnableProperty, value); } } public static readonly DependencyProperty TargetDosingVolumeProperty = DependencyProperty.Register( "TargetDosingVolume", typeof(double), typeof(CrossDoseControl), new FrameworkPropertyMetadata(0.00, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// TargetDosingVolume /// public double TargetDosingVolume { get { return (double)this.GetValue(TargetDosingVolumeProperty); } set { this.SetValue(TargetDosingVolumeProperty, value); } } public static readonly DependencyProperty IsAutoModeProperty = DependencyProperty.Register( "IsAutoMode", typeof(bool), typeof(CrossDoseControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// IsAutoMode /// public bool IsAutoMode { get { return (bool)this.GetValue(IsAutoModeProperty); } set { this.SetValue(IsAutoModeProperty, value); } } #endregion /// /// 手动Dosing开始 /// /// /// private void Start_Click(object sender, RoutedEventArgs e) { if (requestVolume.Text != "") { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartDosing", double.Parse(requestVolume.Text)); } } /// /// 手动Dosing停止 /// /// /// private void Halt_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.HaltDosing"); } /// /// 计算Pump Factor /// /// /// private void Calibrate_Click(object sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(counterVolume.Text) && !string.IsNullOrEmpty(requestVolume.Text)) { double request = double.Parse(requestVolume.Text); if (request == 0) return; double pumpFactor = double.Parse(counterVolume.Text) / request; InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPumpFactor", Math.Round(pumpFactor, 3)); } } /// /// Reset电机 /// /// /// private void Reset_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ResetCrossDose"); } /// /// 输入限制 /// /// /// /// private void OnPreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !IsTextAllowed(e.Text, ((TextBox) sender).Text); } private bool IsTextAllowed(string key, string text) { Regex regex = new Regex(@"^[0-9\.]+$"); return regex.IsMatch(key); } } }