using Avalonia.Collections; using IViewModel.ViewModels; using Shaker.Model; using Shaker.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Dynamicloadsimulationdevice.ViewModels { internal sealed class ShakerConfigViewModel:ViewModelBase { private List maxResultChannels = new List(); private ShakerConfigViewModel():base() { GetEvent().Subscrip((sender, args) => { UpDateModel(args.Data.ShakerConfig); }); #if NO_DEVICE UpDateModel(new ShakerConfigModel()); #endif } static ShakerConfigViewModel() { } public override void UpDateModel(ShakerConfigModel model) { AIs.Clear(); AIs.AddRange(Enumerable.Range(0, model.MaxAICount).Select(x => (AIChannel)((byte)AIChannel.Channel0 + x))); AOs.Clear(); AOs.AddRange(Enumerable.Range(0, model.MaxAOCount).Select(x => (AOChannel)((byte)AOChannel.Channel0 + x))); model ??= new ShakerConfigModel(); maxResultChannels = [MaxActualDisplacement, MaxGivenDisplacement, MaxHorizontalCylinderDrive, MaxVerticalCylinderDrive, MaxBalancingCylinderDrive, MaxDifferentialPressure, MaxSupportingPressure, MaxSixFreedomsGivenDisplacement, MaxCurrentLocation, MaxAcceleration, MaxOutSignal]; base.UpDateModel(model); } public static ShakerConfigViewModel Instance { get; } = new ShakerConfigViewModel(); /// /// 水平缸数 /// public byte HorizontalCount => Model.HorizontalCount; /// /// 垂直缸数 /// public byte VerticalCount => Model.VerticalCount; /// /// 平衡缸数 /// public byte BalancingCount => Model.BalancingCount; /// /// 压差通道数 /// public byte DifferentialPressureCount => Model.DifferentialPressureCount; /// /// 压力通道数 /// public byte PressureCount => Model.PressureCount; /// /// 外部输入通道数 /// public byte OutSignalCount => Model.OutSignalCount; /// /// 重力加速度(m/s^2) /// public double G => Model.G; /// /// 位移通道数 /// public byte DisplacementCount => Model.DisplacementCount; /// /// 加速度通道数 /// public byte AccelerationCount => Model.AccelerationCount; /// /// 最大模拟输入通道数 /// public byte MaxAICount => Model.MaxAICount; /// /// 最大模拟输出通道数 /// public byte MaxAOCount => Model.MaxAOCount; /// /// 水平缸通道数 /// public byte MaxHorizontalCount => Model.MaxHorizontalCount; /// /// 垂直缸通道数 /// public byte MaxVerticalCount => Model.MaxVerticalCount; /// /// 平衡缸通道数 /// public byte MaxBalancingCount => Model.MaxBalancingCount; /// /// 采样率 /// public ushort SampleRate => Model.SampleRate; /// /// Fpga主时钟 /// public uint FpgaClock => Model.FpgaClock; /// /// fifo中数据通道数 /// public byte MaxFifoChannelCount => Model.MaxFifoChannelCount; /// /// 实际位移通道数 /// public byte MaxActualDisplacement => Model.MaxActualDisplacement; /// /// 给定位移通道数 /// public byte MaxGivenDisplacement => Model.MaxGivenDisplacement; /// /// 水平缸驱动通道数 /// public byte MaxHorizontalCylinderDrive => Model.MaxHorizontalCylinderDrive; /// /// 垂直缸驱动通道数 /// public byte MaxVerticalCylinderDrive => Model.MaxVerticalCylinderDrive; /// /// 平衡缸驱动通道数 /// public byte MaxBalancingCylinderDrive => Model.MaxBalancingCylinderDrive; /// /// 压差通道数 /// public byte MaxDifferentialPressure => Model.MaxDifferentialPressure; /// /// 压力通道数 /// public byte MaxSupportingPressure => Model.MaxSupportingPressure; /// /// 六自由度给定位移 /// public byte MaxSixFreedomsGivenDisplacement => Model.MaxSixFreedomsGivenDisplacement; /// /// 当前位置通道数 /// public byte MaxCurrentLocation => Model.MaxCurrentLocation; /// /// 实际加速度通道数 /// public byte MaxAcceleration => Model.MaxAcceleration; /// /// 外部输入通道数 /// public byte MaxOutSignal => Model.MaxOutSignal; public IReadOnlyList MaxResultChannels => maxResultChannels; public uint MaxRiseCount => Model.MaxRiseCount; public uint MaxDropCount => Model.MaxDropCount; public uint MaxZeroChangedCount => Model.MaxZeroChangedCount; public uint MaxSignalStopCount => Model.MaxSignalStopCount; public AIChannel MinAIChannel => AIChannel.Channel0; public AIChannel MaxAIChannel => MinAIChannel + MaxAICount; public AOChannel MinAOChannel => AOChannel.Channel0; public AOChannel MaxAOChannel => MinAOChannel + MaxAOCount; public AvaloniaList AIs { get; } = new AvaloniaList(); public AvaloniaList AOs { get; } = new AvaloniaList(); } }