123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- 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;
- using System.Xml.Linq;
- namespace Dynamicloadsimulationdevice.ViewModels
- {
- internal sealed class ShakerChannelViewModel:DisplayViewModelBase<Shaker.Models.ShakerChannelConfigModel>
- {
- private ShakerChannelViewModel() : base()
- {
- Title = nameof(LanguageValueViewModel.MenuChannelSetting);
- Content = typeof(Views.ShakerChannelView);
- #if NO_DEVICE
- var model =new ShakerChannelConfigModel()
- {
- Displacement = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.DisplacementCount).Select(x => new AIConfigModel()
- {
- ChannelType = AIChannelType.Displacement,
- })],
- Acceleration = [.. Enumerable.Range(0,ShakerConfigViewModel.Instance.AccelerationCount).Select(x=>new AIConfigModel()
- {
- ChannelType = AIChannelType.Acceleration,
- })],
- OutSignal = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.OutSignalCount).Select(x => new AIConfigModel()
- {
- ChannelType = AIChannelType.OutSignal,
- })],
- DifferentialPressure = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.DifferentialPressureCount).Select(x => new AIConfigModel()
- {
- ChannelType = AIChannelType.DifferentialPressure,
- })],
- Pressure = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.PressureCount).Select(x => new AIConfigModel()
- {
- ChannelType = AIChannelType.Pressure,
- })],
- Horizontal = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.HorizontalCount).Select(x => new AOConfigModel()
- {
- ChannelType = AOChannelType.Horizontal,
- })],
- Vertical = [.. Enumerable.Range(0, ShakerConfigViewModel.Instance.VerticalCount).Select(x => new AOConfigModel()
- {
- ChannelType = AOChannelType.Vertical,
- })],
- Balancing = [.. Enumerable.Repeat(AOChannel.Channel0, ShakerConfigViewModel.Instance.BalancingCount)],
- };
- ResultChannelType type = ResultChannelType.ActualDisplacement;
- model.ResultChannels = [.. ShakerConfigViewModel.Instance.MaxResultChannels.SelectMany(x =>
- {
- var c = Enumerable.Range(0, x).Select(y => (new ResultChannelModel()
- {
- ChannelType = type
- }));
- type++;
- return c;
- })];
- for(ResultChannel i= ResultChannel.Channal0;i<ResultChannel.Channal0+model.ResultChannels.Count;i++)
- {
- model.ResultChannels[(int)i].Channel = i;
- }
- UpDateModel(model);
- #endif
- }
- static ShakerChannelViewModel()
- {
- }
-
- public override string OKContent => nameof(LanguageValueViewModel.Apply);
- public override string IconKey => nameof(IconResourceValueViewModel.ChannelConfigGeometry);
- public override string MenuKey => nameof(LanguageValueViewModel.MenuChannelSetting);
- public override string MenuParentKey => nameof(LanguageValueViewModel.MenuDevice);
- public static ShakerChannelViewModel Instance { get; } = new ShakerChannelViewModel();
- /// <summary>
- /// 位移通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>> Displacement { get; } = new AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>>();
- /// <summary>
- /// 加速度通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>> Acceleration { get; } = new AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>>();
- /// <summary>
- /// 外部输入通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>> OutSignal { get; } = new AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>>();
- /// <summary>
- /// 压差通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>> DifferentialPressure { get; } = new AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>>();
- /// <summary>
- /// 支撑压力通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>> Pressure { get; } = new AvaloniaList<IndexValueItemViewModel<AIConfigViewModel>>();
- /// <summary>
- /// 水平缸通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AOConfigViewModel>> Horizontal { get; } = new AvaloniaList<IndexValueItemViewModel<AOConfigViewModel>>();
- /// <summary>
- /// 垂直缸通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AOConfigViewModel>> Vertical { get; } = new AvaloniaList<IndexValueItemViewModel<AOConfigViewModel>>();
- /// <summary>
- /// 平衡缸通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<AOChannel>> Balancing { get; } = new AvaloniaList<IndexValueItemViewModel<AOChannel>>();
- /// <summary>
- /// 结果通道
- /// </summary>
- public AvaloniaList<IndexValueItemViewModel<ResultChannelViewModel>> ResultChannels { get; } = new AvaloniaList<IndexValueItemViewModel<ResultChannelViewModel>>();
- public override void UpDateModel(ShakerChannelConfigModel model)
- {
- foreach (var item in Displacement)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Displacement.Clear();
- Displacement.AddRange(Enumerable.Range(0, model.Displacement.Count).Select(x => new IndexValueItemViewModel<AIConfigViewModel>(x + 1, new AIConfigViewModel(model.Displacement[x]))));
- foreach (var item in Displacement)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in Acceleration)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Acceleration.Clear();
- Acceleration.AddRange(Enumerable.Range(0, model.Acceleration.Count).Select(x => new IndexValueItemViewModel<AIConfigViewModel>(x + 1, new AIConfigViewModel(model.Acceleration[x]))));
- foreach (var item in Acceleration)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in OutSignal)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- OutSignal.Clear();
- OutSignal.AddRange(Enumerable.Range(0, model.OutSignal.Count).Select(x => new IndexValueItemViewModel<AIConfigViewModel>(x + 1, new AIConfigViewModel(model.OutSignal[x]))));
- foreach (var item in OutSignal)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in DifferentialPressure)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- DifferentialPressure.Clear();
- DifferentialPressure.AddRange(Enumerable.Range(0, model.DifferentialPressure.Count).Select(x => new IndexValueItemViewModel<AIConfigViewModel>(x + 1, new AIConfigViewModel(model.DifferentialPressure[x]))));
- foreach (var item in DifferentialPressure)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in Pressure)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Pressure.Clear();
- Pressure.AddRange(Enumerable.Range(0, model.Pressure.Count).Select(x => new IndexValueItemViewModel<AIConfigViewModel>(x + 1, new AIConfigViewModel(model.Pressure[x]))));
- foreach (var item in Pressure)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in Horizontal)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Horizontal.Clear();
- Horizontal.AddRange(Enumerable.Range(0, model.Horizontal.Count).Select(x => new IndexValueItemViewModel<AOConfigViewModel>(x + 1, new AOConfigViewModel(model.Horizontal[x]))));
- foreach (var item in Horizontal)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in Vertical)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Vertical.Clear();
- Vertical.AddRange(Enumerable.Range(0, model.Vertical.Count).Select(x => new IndexValueItemViewModel<AOConfigViewModel>(x + 1, new AOConfigViewModel(model.Vertical[x]))));
- foreach (var item in Vertical)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in Balancing)
- {
- item.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- Balancing.Clear();
- Balancing.AddRange(Enumerable.Range(0, model.Balancing.Count).Select(x => new IndexValueItemViewModel<AOChannel>(x, model.Balancing[x])));
- foreach (var item in Balancing)
- {
- item.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- foreach (var item in ResultChannels)
- {
- item.Value.PropertyChanged -= (_, _) => SetSaveClose(true);
- }
- ResultChannels.Clear();
- ResultChannels.AddRange(Enumerable.Range(0, model.ResultChannels.Count).Select(x => new IndexValueItemViewModel<ResultChannelViewModel>(x,new ResultChannelViewModel(model.ResultChannels[x]))));
- foreach (var item in ResultChannels)
- {
- item.Value.PropertyChanged += (_, _) => SetSaveClose(true);
- }
- base.UpDateModel(model);
- }
- protected override void Save()
- {
- if(Displacement.Select(x=>x.Value.Channel).Distinct().Count()!=Displacement.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.Displacement}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if(Displacement.Any(x=>x.Value.Sensitivity ==0))
- {
- ShowError($"{LanguageValueViewModel.Instance.Displacement}{LanguageValueViewModel.Instance.SensitivityIsZero}");
- savecanclose = false;
- return;
- }
- if (Acceleration.Select(x => x.Value.Channel).Distinct().Count() != Acceleration.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.Acceleration}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if(Acceleration.Any(x=>x.Value.Sensitivity ==0))
- {
- ShowError($"{LanguageValueViewModel.Instance.Acceleration}{LanguageValueViewModel.Instance.SensitivityIsZero}");
- savecanclose = false;
- return;
- }
- if (OutSignal.Select(x => x.Value.Channel).Distinct().Count() != OutSignal.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.OutInputSignal}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if (OutSignal.Any(x => x.Value.Sensitivity == 0))
- {
- ShowError($"{LanguageValueViewModel.Instance.OutInputSignal}{LanguageValueViewModel.Instance.OutSignalGainIsZero}");
- savecanclose = false;
- return;
- }
- if (Pressure.Select(x => x.Value.Channel).Distinct().Count() != Pressure.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.ValvePressure}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if (Pressure.Any(x => x.Value.Sensitivity == 0))
- {
- ShowError($"{LanguageValueViewModel.Instance.ValvePressure}{LanguageValueViewModel.Instance.SensitivityIsZero}");
- savecanclose = false;
- return;
- }
- if (DifferentialPressure.Select(x => x.Value.Channel).Distinct().Count() != DifferentialPressure.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.DifferentialPressure}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if(DifferentialPressure.Any(x=>x.Value.Sensitivity ==0))
- {
- ShowError($"{LanguageValueViewModel.Instance.DifferentialPressure}{LanguageValueViewModel.Instance.SensitivityIsZero}");
- savecanclose = false;
- return;
- }
- if (Vertical.Select(x => x.Value.Channel).Distinct().Count() != Vertical.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.Vertical}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if (Horizontal.Select(x => x.Value.Channel).Distinct().Count() != Horizontal.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.Horizontal}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if (Balancing.Select(x => x.Value).Distinct().Count() != Balancing.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.Balancing}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- if (ResultChannels.Select(x => x.Value.Channel).Distinct().Count() != ResultChannels.Count)
- {
- ShowError($"{LanguageValueViewModel.Instance.ResultChannels}{LanguageValueViewModel.Instance.ChannelRepeat}");
- savecanclose = false;
- return;
- }
- base.Save();
- savecanclose = false;
- }
- }
- }
|