123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- 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<ShakerConfigModel>
- {
- private List<byte> maxResultChannels = new List<byte>();
- private ShakerConfigViewModel():base()
- {
- GetEvent<AllConfig>().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();
- /// <summary>
- /// 水平缸数
- /// </summary>
- public byte HorizontalCount => Model.HorizontalCount;
- /// <summary>
- /// 垂直缸数
- /// </summary>
- public byte VerticalCount => Model.VerticalCount;
- /// <summary>
- /// 平衡缸数
- /// </summary>
- public byte BalancingCount => Model.BalancingCount;
- /// <summary>
- /// 压差通道数
- /// </summary>
- public byte DifferentialPressureCount => Model.DifferentialPressureCount;
- /// <summary>
- /// 压力通道数
- /// </summary>
- public byte PressureCount => Model.PressureCount;
- /// <summary>
- /// 外部输入通道数
- /// </summary>
- public byte OutSignalCount => Model.OutSignalCount;
- /// <summary>
- /// 重力加速度(m/s^2)
- /// </summary>
- public double G => Model.G;
- /// <summary>
- /// 位移通道数
- /// </summary>
- public byte DisplacementCount => Model.DisplacementCount;
- /// <summary>
- /// 加速度通道数
- /// </summary>
- public byte AccelerationCount => Model.AccelerationCount;
- /// <summary>
- /// 最大模拟输入通道数
- /// </summary>
- public byte MaxAICount => Model.MaxAICount;
- /// <summary>
- /// 最大模拟输出通道数
- /// </summary>
- public byte MaxAOCount => Model.MaxAOCount;
- /// <summary>
- /// 水平缸通道数
- /// </summary>
- public byte MaxHorizontalCount => Model.MaxHorizontalCount;
- /// <summary>
- /// 垂直缸通道数
- /// </summary>
- public byte MaxVerticalCount => Model.MaxVerticalCount;
- /// <summary>
- /// 平衡缸通道数
- /// </summary>
- public byte MaxBalancingCount => Model.MaxBalancingCount;
- /// <summary>
- /// 采样率
- /// </summary>
- public ushort SampleRate => Model.SampleRate;
- /// <summary>
- /// Fpga主时钟
- /// </summary>
- public uint FpgaClock => Model.FpgaClock;
- /// <summary>
- /// fifo中数据通道数
- /// </summary>
- public byte MaxFifoChannelCount => Model.MaxFifoChannelCount;
- /// <summary>
- /// 实际位移通道数
- /// </summary>
- public byte MaxActualDisplacement => Model.MaxActualDisplacement;
- /// <summary>
- /// 给定位移通道数
- /// </summary>
- public byte MaxGivenDisplacement => Model.MaxGivenDisplacement;
- /// <summary>
- /// 水平缸驱动通道数
- /// </summary>
- public byte MaxHorizontalCylinderDrive => Model.MaxHorizontalCylinderDrive;
- /// <summary>
- /// 垂直缸驱动通道数
- /// </summary>
- public byte MaxVerticalCylinderDrive => Model.MaxVerticalCylinderDrive;
- /// <summary>
- /// 平衡缸驱动通道数
- /// </summary>
- public byte MaxBalancingCylinderDrive => Model.MaxBalancingCylinderDrive;
- /// <summary>
- /// 压差通道数
- /// </summary>
- public byte MaxDifferentialPressure => Model.MaxDifferentialPressure;
- /// <summary>
- /// 压力通道数
- /// </summary>
- public byte MaxSupportingPressure => Model.MaxSupportingPressure;
- /// <summary>
- /// 六自由度给定位移
- /// </summary>
- public byte MaxSixFreedomsGivenDisplacement => Model.MaxSixFreedomsGivenDisplacement;
- /// <summary>
- /// 当前位置通道数
- /// </summary>
- public byte MaxCurrentLocation => Model.MaxCurrentLocation;
- /// <summary>
- /// 实际加速度通道数
- /// </summary>
- public byte MaxAcceleration => Model.MaxAcceleration;
- /// <summary>
- /// 外部输入通道数
- /// </summary>
- public byte MaxOutSignal => Model.MaxOutSignal;
- public IReadOnlyList<byte> 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<AIChannel> AIs { get; } = new AvaloniaList<AIChannel>();
- public AvaloniaList<AOChannel> AOs { get; } = new AvaloniaList<AOChannel>();
- }
- }
|