using MECF.Framework.Common.OperationCenter; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; 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; namespace CyberX8_Themes.UserControls { /// /// LinMotControl.xaml 的交互逻辑 /// public partial class LinMotControl : UserControl, INotifyPropertyChanged { #region 属性 public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register("ModuleName", typeof(string), typeof(LinMotControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender)); /// /// 模块名称 /// public string ModuleName { get { return (string)this.GetValue(ModuleNameProperty); } set { this.SetValue(ModuleNameProperty, value); } } public static readonly DependencyProperty ModuleTitleProperty = DependencyProperty.Register("ModuleTitle", typeof(string), typeof(LinMotControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender)); /// /// 标题 /// public string ModuleTitle { get { return (string)this.GetValue(ModuleTitleProperty); } set { this.SetValue(ModuleTitleProperty, value); } } public static readonly DependencyProperty ParentModuleProperty = DependencyProperty.Register("ParentModule", typeof(string), typeof(LinMotControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender)); public event PropertyChangedEventHandler PropertyChanged; /// /// ParentModule /// public string ParentModule { get { return (string)this.GetValue(ParentModuleProperty); } set { this.SetValue(ParentModuleProperty, value); } } public static readonly DependencyProperty CurrentSpeedProperty = DependencyProperty.Register("CurrentSpeed", typeof(string), typeof(LinMotControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender)); /// /// 模块名称 /// public string CurrentSpeed { get { return (string)this.GetValue(CurrentSpeedProperty); } set { this.SetValue(CurrentSpeedProperty, value); } } /// /// Speed /// public int Speed { get { return _speed; } set { _speed = value; InvokePropertyChanged(nameof(Speed)); } } private int _speed=100; public static readonly DependencyProperty PositionProperty = DependencyProperty.Register("Position", typeof(double), typeof(LinMotControl)); public double Position { get { return (double)this.GetValue(PositionProperty); } set { SetValue(PositionProperty, value); } } public static readonly DependencyProperty IsConnectedProperty = DependencyProperty.Register("IsConnected", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); /// /// 连接状态 /// public bool IsConnected { get { return (bool)this.GetValue(IsConnectedProperty); } set { this.SetValue(IsConnectedProperty, value); } } public static readonly DependencyProperty StatusWordProperty = DependencyProperty.Register("StatusWord", typeof(short), typeof(LinMotControl), new FrameworkPropertyMetadata((short)0,new PropertyChangedCallback(StatusWordPropertyChangedCallBack))); /// /// 状态字 /// public short StatusWord { get { return (short)this.GetValue(StatusWordProperty); } set { this.SetValue(StatusWordProperty, value); } } private static void StatusWordPropertyChangedCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e) { short statusWord = (short)e.NewValue; d.SetValue(ReadyProperty, (statusWord & 0x01) == 1); d.SetValue(DisableProperty, (statusWord & 0b0100) >> 2 == 0); d.SetValue(ErrorProperty, ((statusWord & 0b01000) >> 3 == 1)||((statusWord & 0b01000000000000) >> 12 == 1)); d.SetValue(InitProperty, (statusWord & 0b0100000000000) >> 11 == 1); d.SetValue(RunProperty, (statusWord & 0b010000000000000) >> 13 == 1); } public static readonly DependencyProperty ReadyProperty = DependencyProperty.Register("Ready", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool Ready { get { return (bool)this.GetValue(ReadyProperty); } set { SetValue(ReadyProperty, value); } } public static readonly DependencyProperty DisableProperty = DependencyProperty.Register("Disable", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool Disable { get { return (bool)this.GetValue(DisableProperty); } set { SetValue(DisableProperty, value); } } public static readonly DependencyProperty RunProperty = DependencyProperty.Register("Run", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool Run { get { return (bool)this.GetValue(RunProperty); } set { SetValue(RunProperty, value); } } public static readonly DependencyProperty ErrorProperty = DependencyProperty.Register("Error", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool Error { get { return (bool)this.GetValue(ErrorProperty); } set { SetValue(ErrorProperty, value); } } public static readonly DependencyProperty InitProperty = DependencyProperty.Register("Init", typeof(bool), typeof(LinMotControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool Init { get { return (bool)this.GetValue(InitProperty); } set { SetValue(InitProperty, value); } } private void InvokePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion /// /// 构造函数 /// public LinMotControl() { InitializeComponent(); } /// /// 启动 /// /// /// private void Start_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartCurve","Speed",new object[] {_speed}); } private void Stop_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Stop"); } private void Abort_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort"); } private void Reset_Click(object sender, RoutedEventArgs e) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Reset"); } } }