ShakerChannelConfigViewModel.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. using IModel;
  2. using Shaker.Model;
  3. using Shaker.Models;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace ShakerService.ViewModel
  10. {
  11. internal sealed class ShakerChannelConfigViewModel:ViewModelBase<Shaker.Models.ShakerChannelConfigModel>
  12. {
  13. private ShakerChannelConfigViewModel():base()
  14. {
  15. }
  16. static ShakerChannelConfigViewModel()
  17. {
  18. }
  19. /// <summary>
  20. /// 位移通道
  21. /// </summary>
  22. public IReadOnlyList<AIConfigModel> Displacement =>CurrentModel.Displacement;
  23. /// <summary>
  24. /// 加速度通道
  25. /// </summary>
  26. public IReadOnlyList<AIConfigModel> Acceleration =>CurrentModel.Acceleration;
  27. /// <summary>
  28. /// 外部输入通道
  29. /// </summary>
  30. public IReadOnlyList<AIConfigModel> OutSignal =>CurrentModel.OutSignal;
  31. /// <summary>
  32. /// 压差通道
  33. /// </summary>
  34. public IReadOnlyList<AIConfigModel> DifferentialPressure =>CurrentModel.DifferentialPressure;
  35. /// <summary>
  36. /// 支撑压力通道
  37. /// </summary>
  38. public IReadOnlyList<AIConfigModel> Pressure =>CurrentModel.Pressure;
  39. /// <summary>
  40. /// 水平缸通道
  41. /// </summary>
  42. public IReadOnlyList<AOConfigModel> Horizontal =>CurrentModel.Horizontal;
  43. /// <summary>
  44. /// 垂直缸通道
  45. /// </summary>
  46. public IReadOnlyList<AOConfigModel> Vertical =>CurrentModel.Vertical;
  47. /// <summary>
  48. /// 平衡缸通道
  49. /// </summary>
  50. public IReadOnlyList<AOChannel> Balancing =>CurrentModel.Balancing;
  51. private protected override void SaveModel()
  52. {
  53. base.SaveModel();
  54. Communication.Instance.DbConnection.DeleteAll<AIConfigModel>(tableName: nameof(Displacement));
  55. Communication.Instance.DbConnection.InsertAll(CurrentModel.Displacement, tableName: nameof(Displacement));
  56. Communication.Instance.DbConnection.DeleteAll<AIConfigModel>(tableName: nameof(Acceleration));
  57. Communication.Instance.DbConnection.InsertAll(CurrentModel.Acceleration, tableName: nameof(Acceleration));
  58. Communication.Instance.DbConnection.DeleteAll<AIConfigModel>(tableName: nameof(OutSignal));
  59. Communication.Instance.DbConnection.InsertAll(CurrentModel.OutSignal, tableName: nameof(OutSignal));
  60. Communication.Instance.DbConnection.DeleteAll<AIConfigModel>(tableName: nameof(DifferentialPressure));
  61. Communication.Instance.DbConnection.InsertAll(CurrentModel.DifferentialPressure, tableName: nameof(DifferentialPressure));
  62. Communication.Instance.DbConnection.DeleteAll<AIConfigModel>(tableName: nameof(Pressure));
  63. Communication.Instance.DbConnection.InsertAll(CurrentModel.Pressure, tableName: nameof(Pressure));
  64. Communication.Instance.DbConnection.DeleteAll<AOConfigModel>(tableName: nameof(Horizontal));
  65. Communication.Instance.DbConnection.InsertAll(CurrentModel.Horizontal, tableName: nameof(Horizontal));
  66. Communication.Instance.DbConnection.DeleteAll<AOConfigModel>(tableName: nameof(Vertical));
  67. Communication.Instance.DbConnection.InsertAll(CurrentModel.Vertical, tableName: nameof(Vertical));
  68. Communication.Instance.DbConnection.DeleteAll<AOChannel>(tableName: nameof(Balancing));
  69. for(int i=0;i<CurrentModel.Balancing.Count;i++)
  70. {
  71. Communication.Instance.DbConnection.Execute($"INSERT INTO {nameof(Balancing)} (Value) VALUES ({(int)CurrentModel.Balancing[i]});");
  72. }
  73. }
  74. private protected override void ReadModel()
  75. {
  76. base.ReadModel();
  77. Communication.Instance.DbConnection.CreateTable<AIConfigModel>(tableName: nameof(Displacement));
  78. CurrentModel.Displacement = Communication.Instance.DbConnection.Table<AIConfigModel>(tableName: nameof(Displacement))?.ToList() ?? new List<AIConfigModel>();
  79. if(CurrentModel.Displacement.Count>ShakerConfigViewModel.Instance.DisplacementCount)
  80. {
  81. CurrentModel.Displacement.RemoveRange(ShakerConfigViewModel.Instance.DisplacementCount, CurrentModel.Displacement.Count - ShakerConfigViewModel.Instance.DisplacementCount);
  82. }
  83. else if(CurrentModel.Displacement.Count<ShakerConfigViewModel.Instance.DisplacementCount)
  84. {
  85. CurrentModel.Displacement.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.DisplacementCount - CurrentModel.Displacement.Count));
  86. }
  87. for(int i = 0; i < ShakerConfigViewModel.Instance.DisplacementCount; i++)
  88. {
  89. CurrentModel.Displacement[i].ChannelType = AIChannelType.Displacement;
  90. CurrentModel.Displacement[i].Sensitivity = CurrentModel.Displacement[i].Sensitivity ==0 ? 1000 : CurrentModel.Displacement[i].Sensitivity;
  91. }
  92. Communication.Instance.DbConnection.CreateTable<AIConfigModel>(tableName: nameof(Acceleration));
  93. CurrentModel.Acceleration = Communication.Instance.DbConnection.Table<AIConfigModel>(tableName: nameof(Acceleration))?.ToList() ?? new List<AIConfigModel>();
  94. if (CurrentModel.Acceleration.Count > ShakerConfigViewModel.Instance.AccelerationCount)
  95. {
  96. CurrentModel.Acceleration.RemoveRange(ShakerConfigViewModel.Instance.AccelerationCount, CurrentModel.Acceleration.Count - ShakerConfigViewModel.Instance.AccelerationCount);
  97. }
  98. else if (CurrentModel.Acceleration.Count < ShakerConfigViewModel.Instance.AccelerationCount)
  99. {
  100. CurrentModel.Acceleration.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.AccelerationCount - CurrentModel.Acceleration.Count));
  101. }
  102. for (int i = 0; i < ShakerConfigViewModel.Instance.AccelerationCount; i++)
  103. {
  104. CurrentModel.Acceleration[i].ChannelType = AIChannelType.Acceleration;
  105. CurrentModel.Acceleration[i].Sensitivity = CurrentModel.Acceleration[i].Sensitivity == 0 ? 1000 : CurrentModel.Acceleration[i].Sensitivity;
  106. }
  107. Communication.Instance.DbConnection.CreateTable<AIConfigModel>(tableName: nameof(OutSignal));
  108. CurrentModel.OutSignal = Communication.Instance.DbConnection.Table<AIConfigModel>(tableName: nameof(OutSignal))?.ToList() ?? new List<AIConfigModel>();
  109. if (CurrentModel.OutSignal.Count > ShakerConfigViewModel.Instance.OutSignalCount)
  110. {
  111. CurrentModel.OutSignal.RemoveRange(ShakerConfigViewModel.Instance.OutSignalCount, CurrentModel.OutSignal.Count - ShakerConfigViewModel.Instance.OutSignalCount);
  112. }
  113. else if (CurrentModel.OutSignal.Count < ShakerConfigViewModel.Instance.OutSignalCount)
  114. {
  115. CurrentModel.OutSignal.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.OutSignalCount - CurrentModel.OutSignal.Count));
  116. }
  117. for (int i = 0; i < ShakerConfigViewModel.Instance.OutSignalCount; i++)
  118. {
  119. CurrentModel.OutSignal[i].ChannelType = AIChannelType.OutSignal;
  120. CurrentModel.OutSignal[i].Sensitivity = CurrentModel.OutSignal[i].Sensitivity == 0 ? 1000 : CurrentModel.OutSignal[i].Sensitivity;
  121. }
  122. Communication.Instance.DbConnection.CreateTable<AIConfigModel>(tableName: nameof(DifferentialPressure));
  123. CurrentModel.DifferentialPressure = Communication.Instance.DbConnection.Table<AIConfigModel>(tableName: nameof(DifferentialPressure))?.ToList() ?? new List<AIConfigModel>();
  124. if (CurrentModel.DifferentialPressure.Count > ShakerConfigViewModel.Instance.DifferentialPressureCount)
  125. {
  126. CurrentModel.DifferentialPressure.RemoveRange(ShakerConfigViewModel.Instance.DifferentialPressureCount, CurrentModel.DifferentialPressure.Count - ShakerConfigViewModel.Instance.DifferentialPressureCount);
  127. }
  128. else if (CurrentModel.DifferentialPressure.Count < ShakerConfigViewModel.Instance.DifferentialPressureCount)
  129. {
  130. CurrentModel.DifferentialPressure.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.DifferentialPressureCount - CurrentModel.DifferentialPressure.Count));
  131. }
  132. for (int i = 0; i < ShakerConfigViewModel.Instance.DifferentialPressureCount; i++)
  133. {
  134. CurrentModel.DifferentialPressure[i].ChannelType = AIChannelType.DifferentialPressure;
  135. CurrentModel.DifferentialPressure[i].Sensitivity = CurrentModel.DifferentialPressure[i].Sensitivity == 0 ? 1000 : CurrentModel.DifferentialPressure[i].Sensitivity;
  136. }
  137. Communication.Instance.DbConnection.CreateTable<AIConfigModel>(tableName: nameof(Pressure));
  138. CurrentModel.Pressure = Communication.Instance.DbConnection.Table<AIConfigModel>(tableName: nameof(Pressure))?.ToList() ?? new List<AIConfigModel>();
  139. if (CurrentModel.Pressure.Count > ShakerConfigViewModel.Instance.PressureCount)
  140. {
  141. CurrentModel.Pressure.RemoveRange(ShakerConfigViewModel.Instance.PressureCount, CurrentModel.Pressure.Count - ShakerConfigViewModel.Instance.PressureCount);
  142. }
  143. else if (CurrentModel.Pressure.Count < ShakerConfigViewModel.Instance.PressureCount)
  144. {
  145. CurrentModel.Pressure.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.PressureCount - CurrentModel.Pressure.Count));
  146. }
  147. for (int i = 0; i < ShakerConfigViewModel.Instance.PressureCount; i++)
  148. {
  149. CurrentModel.Pressure[i].ChannelType = AIChannelType.Pressure;
  150. CurrentModel.Pressure[i].Sensitivity = CurrentModel.Pressure[i].Sensitivity == 0 ? 1000 : CurrentModel.Pressure[i].Sensitivity;
  151. }
  152. Communication.Instance.DbConnection.CreateTable<AOConfigModel>(tableName: nameof(Horizontal));
  153. CurrentModel.Horizontal = Communication.Instance.DbConnection.Table<AOConfigModel>(tableName: nameof(Horizontal))?.ToList() ?? new List<AOConfigModel>();
  154. if (CurrentModel.Horizontal.Count > ShakerConfigViewModel.Instance.HorizontalCount)
  155. {
  156. CurrentModel.Horizontal.RemoveRange(ShakerConfigViewModel.Instance.HorizontalCount, CurrentModel.Horizontal.Count - ShakerConfigViewModel.Instance.HorizontalCount);
  157. }
  158. else if (CurrentModel.Horizontal.Count < ShakerConfigViewModel.Instance.HorizontalCount)
  159. {
  160. CurrentModel.Horizontal.AddRange(Enumerable.Repeat(new AOConfigModel(), ShakerConfigViewModel.Instance.HorizontalCount - CurrentModel.Horizontal.Count));
  161. }
  162. for (int i = 0; i < ShakerConfigViewModel.Instance.HorizontalCount; i++)
  163. {
  164. CurrentModel.Horizontal[i].ChannelType = AOChannelType.Horizontal;
  165. }
  166. Communication.Instance.DbConnection.CreateTable<AOConfigModel>(tableName: nameof(Vertical));
  167. CurrentModel.Vertical = Communication.Instance.DbConnection.Table<AOConfigModel>(tableName: nameof(Vertical))?.ToList() ?? new List<AOConfigModel>();
  168. if (CurrentModel.Vertical.Count > ShakerConfigViewModel.Instance.VerticalCount)
  169. {
  170. CurrentModel.Vertical.RemoveRange(ShakerConfigViewModel.Instance.VerticalCount, CurrentModel.Vertical.Count - ShakerConfigViewModel.Instance.VerticalCount);
  171. }
  172. else if (CurrentModel.Vertical.Count < ShakerConfigViewModel.Instance.VerticalCount)
  173. {
  174. CurrentModel.Vertical.AddRange(Enumerable.Repeat(new AOConfigModel(), ShakerConfigViewModel.Instance.VerticalCount - CurrentModel.Vertical.Count));
  175. }
  176. for (int i = 0; i < ShakerConfigViewModel.Instance.VerticalCount; i++)
  177. {
  178. CurrentModel.Vertical[i].ChannelType = AOChannelType.Vertical;
  179. }
  180. Communication.Instance.DbConnection.Execute($"CREATE TABLE IF NOT EXISTS {nameof(Balancing)} ({nameof(BaseModel.Id)} INTEGER PRIMARY KEY AUTOINCREMENT, Value INT);");
  181. CurrentModel.Balancing = Communication.Instance.DbConnection.Query<AOChannel>($"SELECT Value FROM {nameof(Balancing)}")?.ToList() ?? new List<AOChannel>();
  182. if (CurrentModel.Balancing.Count > ShakerConfigViewModel.Instance.BalancingCount)
  183. {
  184. CurrentModel.Balancing.RemoveRange(ShakerConfigViewModel.Instance.BalancingCount, CurrentModel.Balancing.Count - ShakerConfigViewModel.Instance.BalancingCount);
  185. }
  186. else if (CurrentModel.Balancing.Count < ShakerConfigViewModel.Instance.BalancingCount)
  187. {
  188. CurrentModel.Balancing.AddRange(Enumerable.Repeat(new AOChannel(), ShakerConfigViewModel.Instance.BalancingCount - CurrentModel.Balancing.Count));
  189. }
  190. SaveModel();
  191. }
  192. private protected override void UpModel(ShakerChannelConfigModel model)
  193. {
  194. model.Displacement ??= new List<AIConfigModel>();
  195. if (model.Displacement.Count > ShakerConfigViewModel.Instance.DisplacementCount)
  196. {
  197. model.Displacement.RemoveRange(ShakerConfigViewModel.Instance.DisplacementCount, model.Displacement.Count - ShakerConfigViewModel.Instance.DisplacementCount);
  198. }
  199. else if (model.Displacement.Count < ShakerConfigViewModel.Instance.DisplacementCount)
  200. {
  201. model.Displacement.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.DisplacementCount - model.Displacement.Count));
  202. }
  203. for (int i = 0; i < ShakerConfigViewModel.Instance.DisplacementCount; i++)
  204. {
  205. model.Displacement[i].ChannelType = AIChannelType.Displacement;
  206. model.Displacement[i].Sensitivity = model.Displacement[i].Sensitivity == 0 ? 1000 : model.Displacement[i].Sensitivity;
  207. }
  208. model.Acceleration ??= new List<AIConfigModel>();
  209. if (model.Acceleration.Count > ShakerConfigViewModel.Instance.AccelerationCount)
  210. {
  211. model.Acceleration.RemoveRange(ShakerConfigViewModel.Instance.AccelerationCount, model.Acceleration.Count - ShakerConfigViewModel.Instance.AccelerationCount);
  212. }
  213. else if (model.Acceleration.Count < ShakerConfigViewModel.Instance.AccelerationCount)
  214. {
  215. model.Acceleration.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.AccelerationCount - model.Acceleration.Count));
  216. }
  217. for (int i = 0; i < ShakerConfigViewModel.Instance.AccelerationCount; i++)
  218. {
  219. model.Acceleration[i].ChannelType = AIChannelType.Acceleration;
  220. model.Acceleration[i].Sensitivity = model.Acceleration[i].Sensitivity == 0 ? 1000 : model.Acceleration[i].Sensitivity;
  221. }
  222. model.OutSignal ??= new List<AIConfigModel>();
  223. if (model.OutSignal.Count > ShakerConfigViewModel.Instance.OutSignalCount)
  224. {
  225. model.OutSignal.RemoveRange(ShakerConfigViewModel.Instance.OutSignalCount, model.OutSignal.Count - ShakerConfigViewModel.Instance.OutSignalCount);
  226. }
  227. else if (model.OutSignal.Count < ShakerConfigViewModel.Instance.OutSignalCount)
  228. {
  229. model.OutSignal.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.OutSignalCount - model.OutSignal.Count));
  230. }
  231. for (int i = 0; i < ShakerConfigViewModel.Instance.OutSignalCount; i++)
  232. {
  233. model.OutSignal[i].ChannelType = AIChannelType.OutSignal;
  234. model.OutSignal[i].Sensitivity = model.OutSignal[i].Sensitivity == 0 ? 1000 : model.OutSignal[i].Sensitivity;
  235. }
  236. model.DifferentialPressure ??= new List<AIConfigModel>();
  237. if (model.DifferentialPressure.Count > ShakerConfigViewModel.Instance.DifferentialPressureCount)
  238. {
  239. model.DifferentialPressure.RemoveRange(ShakerConfigViewModel.Instance.DifferentialPressureCount, model.DifferentialPressure.Count - ShakerConfigViewModel.Instance.DifferentialPressureCount);
  240. }
  241. else if (model.DifferentialPressure.Count < ShakerConfigViewModel.Instance.DifferentialPressureCount)
  242. {
  243. model.DifferentialPressure.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.DifferentialPressureCount - model.DifferentialPressure.Count));
  244. }
  245. for (int i = 0; i < ShakerConfigViewModel.Instance.DifferentialPressureCount; i++)
  246. {
  247. model.DifferentialPressure[i].ChannelType = AIChannelType.DifferentialPressure;
  248. model.DifferentialPressure[i].Sensitivity = model.DifferentialPressure[i].Sensitivity == 0 ? 1000 : model.DifferentialPressure[i].Sensitivity;
  249. }
  250. model.Pressure ??= new List<AIConfigModel>();
  251. if (model.Pressure.Count > ShakerConfigViewModel.Instance.PressureCount)
  252. {
  253. model.Pressure.RemoveRange(ShakerConfigViewModel.Instance.PressureCount, model.Pressure.Count - ShakerConfigViewModel.Instance.PressureCount);
  254. }
  255. else if (model.Pressure.Count < ShakerConfigViewModel.Instance.PressureCount)
  256. {
  257. model.Pressure.AddRange(Enumerable.Repeat(new AIConfigModel(), ShakerConfigViewModel.Instance.PressureCount - model.Pressure.Count));
  258. }
  259. for (int i = 0; i < ShakerConfigViewModel.Instance.PressureCount; i++)
  260. {
  261. model.Pressure[i].ChannelType = AIChannelType.Pressure;
  262. model.Pressure[i].Sensitivity = model.Pressure[i].Sensitivity == 0 ? 1000 : model.Pressure[i].Sensitivity;
  263. }
  264. model.Horizontal ??= new List<AOConfigModel>();
  265. if (model.Horizontal.Count > ShakerConfigViewModel.Instance.HorizontalCount)
  266. {
  267. model.Horizontal.RemoveRange(ShakerConfigViewModel.Instance.HorizontalCount, model.Horizontal.Count - ShakerConfigViewModel.Instance.HorizontalCount);
  268. }
  269. else if (model.Horizontal.Count < ShakerConfigViewModel.Instance.HorizontalCount)
  270. {
  271. model.Horizontal.AddRange(Enumerable.Repeat(new AOConfigModel(), ShakerConfigViewModel.Instance.HorizontalCount - model.Horizontal.Count));
  272. }
  273. for (int i = 0; i < ShakerConfigViewModel.Instance.HorizontalCount; i++)
  274. {
  275. model.Horizontal[i].ChannelType = AOChannelType.Horizontal;
  276. }
  277. model.Vertical ??= new List<AOConfigModel>();
  278. if (model.Vertical.Count > ShakerConfigViewModel.Instance.VerticalCount)
  279. {
  280. model.Vertical.RemoveRange(ShakerConfigViewModel.Instance.VerticalCount, model.Vertical.Count - ShakerConfigViewModel.Instance.VerticalCount);
  281. }
  282. else if (model.Vertical.Count < ShakerConfigViewModel.Instance.VerticalCount)
  283. {
  284. model.Vertical.AddRange(Enumerable.Repeat(new AOConfigModel(), ShakerConfigViewModel.Instance.VerticalCount - model.Vertical.Count));
  285. }
  286. for (int i = 0; i < ShakerConfigViewModel.Instance.VerticalCount; i++)
  287. {
  288. model.Vertical[i].ChannelType = AOChannelType.Vertical;
  289. }
  290. model.Balancing ??= new List<AOChannel>();
  291. if (model.Balancing.Count > ShakerConfigViewModel.Instance.BalancingCount)
  292. {
  293. model.Balancing.RemoveRange(ShakerConfigViewModel.Instance.BalancingCount, model.Balancing.Count - ShakerConfigViewModel.Instance.BalancingCount);
  294. }
  295. else if (model.Balancing.Count < ShakerConfigViewModel.Instance.BalancingCount)
  296. {
  297. model.Balancing.AddRange(Enumerable.Repeat(new AOChannel(), ShakerConfigViewModel.Instance.BalancingCount - model.Balancing.Count));
  298. }
  299. base.UpModel(model);
  300. }
  301. public override void SetFpga()
  302. {
  303. base.SetFpga();
  304. ShakerFpga.ShakerFpga.Instance.位移通道.Values = [.. Displacement.Select(x => (byte)x.Channel)];
  305. /*
  306. * 位移灵敏度用户设置的单位为mv/mm,在这里需要转换成mm/V
  307. */
  308. ShakerFpga.ShakerFpga.Instance.位移灵敏度.Value = [.. Displacement.Select(x => 1000 / x.Sensitivity)];
  309. ShakerFpga.ShakerFpga.Instance.位移直偏.Value = [.. Displacement.Select(x => x.Bias)];
  310. ShakerFpga.ShakerFpga.Instance.加速度通道.Values = [.. Acceleration.Select(x => (byte)x.Channel)];
  311. /*
  312. * 加速度灵敏度用户设置的单位为mv/g,在这里需要转换成g/V
  313. */
  314. ShakerFpga.ShakerFpga.Instance.加速度灵敏度.Value = [.. Acceleration.Select(x =>1000/ x.Sensitivity)];
  315. ShakerFpga.ShakerFpga.Instance.外部输入通道.Values = [.. OutSignal.Select(x => (byte)x.Channel)];
  316. ShakerFpga.ShakerFpga.Instance.外部输入增益.Value = [.. OutSignal.Select(x => x.Sensitivity)];
  317. ShakerFpga.ShakerFpga.Instance.压差通道.Values = [.. DifferentialPressure.Select(x => (byte)x.Channel)];
  318. ShakerFpga.ShakerFpga.Instance.压差直偏.Value = [.. DifferentialPressure.Select(x => x.Bias)];
  319. /*
  320. * 压差灵敏度用户设置的单位为V/MPa,在这里需要转换成MPa/V
  321. */
  322. ShakerFpga.ShakerFpga.Instance.压差灵敏度.Value = [.. DifferentialPressure.Select(x => 1/x.Sensitivity)];
  323. ShakerFpga.ShakerFpga.Instance.支撑压力通道.Values = [.. Pressure.Select(x => (byte)x.Channel)];
  324. ShakerFpga.ShakerFpga.Instance.支撑压力直偏.Value = [.. Pressure.Select(x => x.Bias)];
  325. /*
  326. * 支撑压力灵敏度用户设置的单位为V/MPa,在这里需要转换成MPa/V
  327. */
  328. ShakerFpga.ShakerFpga.Instance.支撑压力灵敏度.Value = [.. Pressure.Select(x => 1/x.Sensitivity)];
  329. ShakerFpga.ShakerFpga.Instance.平衡缸通道.Values = [.. Balancing.Select(x => (byte)x)];
  330. ShakerFpga.ShakerFpga.Instance.水平缸通道.Values = [.. Horizontal.Select(x => (byte)x.Channel)];
  331. ShakerFpga.ShakerFpga.Instance.垂直缸通道.Values = [.. Vertical.Select(x => (byte)x.Channel)];
  332. ShakerFpga.ShakerFpga.Instance.伺服驱动直偏.Value = [.. Horizontal.Select(x => x.Bias),..Vertical.Select(x => x.Bias)];
  333. ShakerFpga.ShakerFpga.Instance.伺服缸极性.Values = [.. Horizontal.Select(x => x.Polarity == Shaker.Model.Polarity.Positive), ..Vertical.Select(x => x.Polarity == Shaker.Model.Polarity.Positive)];
  334. ShakerFpga.ShakerFpga.Instance.伺服开环.Values = [.. Horizontal.Select(x => x.OpenLoop), .. Vertical.Select(x => x.OpenLoop)];
  335. ShakerFpga.ShakerFpga.Instance.伺服阀开环驱动.Value = [.. Horizontal.Select(x => x.OpenLoopDriver), .. Vertical.Select(x => x.OpenLoopDriver)];
  336. }
  337. public static ShakerChannelConfigViewModel Instance { get; } = new ShakerChannelConfigViewModel();
  338. }
  339. }