ShakerConfigViewModel.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using Avalonia.Collections;
  2. using IViewModel.ViewModels;
  3. using Shaker.Model;
  4. using Shaker.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Dynamicloadsimulationdevice.ViewModels
  11. {
  12. internal sealed class ShakerConfigViewModel:ViewModelBase<ShakerConfigModel>
  13. {
  14. private List<byte> maxResultChannels = new List<byte>();
  15. private ShakerConfigViewModel():base()
  16. {
  17. GetEvent<AllConfig>().Subscrip((sender, args) =>
  18. {
  19. UpDateModel(args.Data.ShakerConfig);
  20. });
  21. #if NO_DEVICE
  22. UpDateModel(new ShakerConfigModel());
  23. #endif
  24. }
  25. static ShakerConfigViewModel()
  26. {
  27. }
  28. public override void UpDateModel(ShakerConfigModel model)
  29. {
  30. AIs.Clear();
  31. AIs.AddRange(Enumerable.Range(0, model.MaxAICount).Select(x => (AIChannel)((byte)AIChannel.Channel0 + x)));
  32. AOs.Clear();
  33. AOs.AddRange(Enumerable.Range(0, model.MaxAOCount).Select(x => (AOChannel)((byte)AOChannel.Channel0 + x)));
  34. model ??= new ShakerConfigModel();
  35. maxResultChannels = [MaxActualDisplacement, MaxGivenDisplacement, MaxHorizontalCylinderDrive, MaxVerticalCylinderDrive, MaxBalancingCylinderDrive, MaxDifferentialPressure, MaxSupportingPressure, MaxSixFreedomsGivenDisplacement, MaxCurrentLocation, MaxAcceleration, MaxOutSignal];
  36. base.UpDateModel(model);
  37. }
  38. public static ShakerConfigViewModel Instance { get; } = new ShakerConfigViewModel();
  39. /// <summary>
  40. /// 水平缸数
  41. /// </summary>
  42. public byte HorizontalCount => Model.HorizontalCount;
  43. /// <summary>
  44. /// 垂直缸数
  45. /// </summary>
  46. public byte VerticalCount => Model.VerticalCount;
  47. /// <summary>
  48. /// 平衡缸数
  49. /// </summary>
  50. public byte BalancingCount => Model.BalancingCount;
  51. /// <summary>
  52. /// 压差通道数
  53. /// </summary>
  54. public byte DifferentialPressureCount => Model.DifferentialPressureCount;
  55. /// <summary>
  56. /// 压力通道数
  57. /// </summary>
  58. public byte PressureCount => Model.PressureCount;
  59. /// <summary>
  60. /// 外部输入通道数
  61. /// </summary>
  62. public byte OutSignalCount => Model.OutSignalCount;
  63. /// <summary>
  64. /// 重力加速度(m/s^2)
  65. /// </summary>
  66. public double G => Model.G;
  67. /// <summary>
  68. /// 位移通道数
  69. /// </summary>
  70. public byte DisplacementCount => Model.DisplacementCount;
  71. /// <summary>
  72. /// 加速度通道数
  73. /// </summary>
  74. public byte AccelerationCount => Model.AccelerationCount;
  75. /// <summary>
  76. /// 最大模拟输入通道数
  77. /// </summary>
  78. public byte MaxAICount => Model.MaxAICount;
  79. /// <summary>
  80. /// 最大模拟输出通道数
  81. /// </summary>
  82. public byte MaxAOCount => Model.MaxAOCount;
  83. /// <summary>
  84. /// 水平缸通道数
  85. /// </summary>
  86. public byte MaxHorizontalCount => Model.MaxHorizontalCount;
  87. /// <summary>
  88. /// 垂直缸通道数
  89. /// </summary>
  90. public byte MaxVerticalCount => Model.MaxVerticalCount;
  91. /// <summary>
  92. /// 平衡缸通道数
  93. /// </summary>
  94. public byte MaxBalancingCount => Model.MaxBalancingCount;
  95. /// <summary>
  96. /// 采样率
  97. /// </summary>
  98. public ushort SampleRate => Model.SampleRate;
  99. /// <summary>
  100. /// Fpga主时钟
  101. /// </summary>
  102. public uint FpgaClock => Model.FpgaClock;
  103. /// <summary>
  104. /// fifo中数据通道数
  105. /// </summary>
  106. public byte MaxFifoChannelCount => Model.MaxFifoChannelCount;
  107. /// <summary>
  108. /// 实际位移通道数
  109. /// </summary>
  110. public byte MaxActualDisplacement => Model.MaxActualDisplacement;
  111. /// <summary>
  112. /// 给定位移通道数
  113. /// </summary>
  114. public byte MaxGivenDisplacement => Model.MaxGivenDisplacement;
  115. /// <summary>
  116. /// 水平缸驱动通道数
  117. /// </summary>
  118. public byte MaxHorizontalCylinderDrive => Model.MaxHorizontalCylinderDrive;
  119. /// <summary>
  120. /// 垂直缸驱动通道数
  121. /// </summary>
  122. public byte MaxVerticalCylinderDrive => Model.MaxVerticalCylinderDrive;
  123. /// <summary>
  124. /// 平衡缸驱动通道数
  125. /// </summary>
  126. public byte MaxBalancingCylinderDrive => Model.MaxBalancingCylinderDrive;
  127. /// <summary>
  128. /// 压差通道数
  129. /// </summary>
  130. public byte MaxDifferentialPressure => Model.MaxDifferentialPressure;
  131. /// <summary>
  132. /// 压力通道数
  133. /// </summary>
  134. public byte MaxSupportingPressure => Model.MaxSupportingPressure;
  135. /// <summary>
  136. /// 六自由度给定位移
  137. /// </summary>
  138. public byte MaxSixFreedomsGivenDisplacement => Model.MaxSixFreedomsGivenDisplacement;
  139. /// <summary>
  140. /// 当前位置通道数
  141. /// </summary>
  142. public byte MaxCurrentLocation => Model.MaxCurrentLocation;
  143. /// <summary>
  144. /// 实际加速度通道数
  145. /// </summary>
  146. public byte MaxAcceleration => Model.MaxAcceleration;
  147. /// <summary>
  148. /// 外部输入通道数
  149. /// </summary>
  150. public byte MaxOutSignal => Model.MaxOutSignal;
  151. public IReadOnlyList<byte> MaxResultChannels => maxResultChannels;
  152. public uint MaxRiseCount => Model.MaxRiseCount;
  153. public uint MaxDropCount => Model.MaxDropCount;
  154. public uint MaxZeroChangedCount => Model.MaxZeroChangedCount;
  155. public uint MaxSignalStopCount => Model.MaxSignalStopCount;
  156. public AIChannel MinAIChannel => AIChannel.Channel0;
  157. public AIChannel MaxAIChannel => MinAIChannel + MaxAICount;
  158. public AOChannel MinAOChannel => AOChannel.Channel0;
  159. public AOChannel MaxAOChannel => MinAOChannel + MaxAOCount;
  160. public AvaloniaList<AIChannel> AIs { get; } = new AvaloniaList<AIChannel>();
  161. public AvaloniaList<AOChannel> AOs { get; } = new AvaloniaList<AOChannel>();
  162. }
  163. }