using Avalonia.Collections; using IViewModel; using IViewModel.ViewModels; using MessagePack.Formatters; using Mono.Cecil; using Shaker.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dynamicloadsimulationdevice.ViewModels { public sealed class ServoConfigViewModel : DisplayViewModelBase { private ServoConfigViewModel() : base() { Title = nameof(LanguageValueViewModel.MenuDeviceConfig); Content = typeof(Views.ServoConfigView); #if NO_DEVICE UpDateModel(new ServoConfigModel() { PI = [.. Enumerable.Range(0,ShakerConfigViewModel.Instance.VerticalCount).Select(x=>new PIModel()),..Enumerable.Range(0,ShakerConfigViewModel.Instance.VerticalCount).Select(x=>new PIModel())] }); #endif } static ServoConfigViewModel() { } public override double Width => 780; public override double Height => 620; public override bool CanResize => false; public override string MenuKey => nameof(LanguageValueViewModel.MenuDeviceConfig); public override string MenuParentKey => nameof(LanguageValueViewModel.MenuDevice); public override string IconKey => nameof(IconResourceValueViewModel.DeviceConfigGeometry); public override bool ShowTop => true; public override void UpDateModel(ServoConfigModel model) { foreach (var item in PI) { item.Value.PropertyChanged -= (sender, args) => SetSaveClose(true); } PI.Clear(); if(model.PI.Count>0) { for (int i = 0; i < model.PI.Count; i++) { PI.Add(new IndexValueItemViewModel(i + 1, new PIViewModel(model.PI[i]))); PI[^1].Value.PropertyChanged += (sender, args) => SetSaveClose(true); } } base.UpDateModel(model); } protected override void Save() { base.Save(); savecanclose = false; } public override string OKContent => nameof(LanguageValueViewModel.Apply); public static ServoConfigViewModel Instance { get; } = new ServoConfigViewModel(); public AvaloniaList> PI { get; } = new AvaloniaList>(); /// /// 水平阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.HorizontalBarrierPotential))] public double HorizontalBarrierPotential { get => Model.HorizontalBarrierPotential; set => SetProperty(ref Model.HorizontalBarrierPotential, value); } /// /// 最大水平阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxHorizontalBarrierPotential))] public double MaxHorizontalBarrierPotential { get => Model.MaxHorizontalBarrierPotential; } /// /// 最小水平阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinHorizontalBarrierPotential))] public double MinHorizontalBarrierPotential { get => Model.MinHorizontalBarrierPotential; } /// /// 竖直阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.VerticalBarrierPotential))] public double VerticalBarrierPotential { get => Model.VerticalBarrierPotential; set => SetProperty(ref Model.VerticalBarrierPotential, value); } /// /// 最大竖直阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxVerticalBarrierPotential))] public double MaxVerticalBarrierPotential { get => Model.MaxVerticalBarrierPotential; } /// /// 最小竖直阀死区电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinVerticalBarrierPotential))] public double MinVerticalBarrierPotential { get => Model.MinVerticalBarrierPotential; } /// /// 最大积分电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxIntegratedVoltage))] public double MaxIntegratedVoltage { get => Model.MaxIntegratedVoltage; set => SetProperty(ref Model.MaxIntegratedVoltage, value); } /// /// 最大最大积分电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxMaxIntegratedVoltage))] public double MaxMaxIntegratedVoltage { get => Model.MaxMaxIntegratedVoltage; } /// /// 最小最大积分电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinMaxIntegratedVoltage))] public double MinMaxIntegratedVoltage { get => Model.MinMaxIntegratedVoltage; } /// /// 位移前馈增益 /// [PropertyAssociation(nameof(ServoConfigModel.DisplacementFeedforwardGain))] public double DisplacementFeedforwardGain { get => Model.DisplacementFeedforwardGain; set => SetProperty(ref Model.DisplacementFeedforwardGain, value); } /// /// 最大位移前馈增益 /// [PropertyAssociation(nameof(ServoConfigModel.MaxDisplacementFeedforwardGain))] public double MaxDisplacementFeedforwardGain { get => Model.MaxDisplacementFeedforwardGain; } /// /// 最小位移前馈增益 /// [PropertyAssociation(nameof(ServoConfigModel.MinDisplacementFeedforwardGain))] public double MinDisplacementFeedforwardGain { get => Model.MinDisplacementFeedforwardGain; } /// /// 最大驱动电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxDriverVoltage))] public double MaxDriverVoltage { get => Model.MaxDriverVoltage; set => SetProperty(ref Model.MaxDriverVoltage, value); } /// /// 最大最大驱动电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxMaxDriverVoltage))] public double MaxMaxDriverVoltage { get => Model.MaxMaxDriverVoltage; } /// /// 最小最大驱动电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinMaxDriverVoltage))] public double MinMaxDriverVoltage { get => Model.MinMaxDriverVoltage; } /// /// 驱动超限电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.DriverOverLimitVoltage))] public double DriverOverLimitVoltage { get => Model.DriverOverLimitVoltage; set => SetProperty(ref Model.DriverOverLimitVoltage, value); } /// /// 最大驱动超限电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxDriverOverLimitVoltage))] public double MaxDriverOverLimitVoltage { get => Model.MaxDriverOverLimitVoltage; } /// /// 最小驱动超限电压(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinDriverOverLimitVoltage))] public double MinDriverOverLimitVoltage { get => Model.MinDriverOverLimitVoltage; } /// /// 急停后驱动限幅值(V) /// [PropertyAssociation(nameof(ServoConfigModel.EmerhencyDriverLimitVoltage))] public double EmerhencyDriverLimitVoltage { get => Model.EmerhencyDriverLimitVoltage; set => SetProperty(ref Model.EmerhencyDriverLimitVoltage, value); } /// /// 最大急停后驱动限幅值(V) /// [PropertyAssociation(nameof(ServoConfigModel.MaxEmerhencyDriverLimitVoltage))] public double MaxEmerhencyDriverLimitVoltage { get => Model.MaxEmerhencyDriverLimitVoltage; } /// /// 最小急停后驱动限幅值(V) /// [PropertyAssociation(nameof(ServoConfigModel.MinEmerhencyDriverLimitVoltage))] public double MinEmerhencyDriverLimitVoltage { get => Model.MinEmerhencyDriverLimitVoltage; } } }