123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using Shaker.Model;
- using Shaker.Models;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.Metrics;
- using System.Linq;
- using System.Runtime.Versioning;
- using System.Text;
- using System.Threading.Tasks;
- namespace ShakerService.ViewModel
- {
- internal class ServiceShakerConfigViewModel:BaseServiceViewModel<Shaker.Models.ShakerConfigModel>
- {
- public AccelerationSynthesisType SynthesisType { get => Model.SynthesisType; }
- public float OutSignalGain { get => Model.OutSignalGain; }
- public uint MaxRiseCount => Model.MaxRiseCount;
- public uint MaxZeroChangedCount => Model.MaxZeroChangedCount;
- public uint MaxSignalCount => Model.MaxSignalCount;
- public uint MaxEmergencyStopCount => Model.MaxEmergencyStopCount;
- public uint MaxStopWindowCount => MaxStopWindowCount;
- public uint MaxAdjustCount => Model.MaxAdjustCount;
- public uint MaxFallCount => Model.MaxFallCount;
- public uint StartCount => Model.StartCount;
- public float InitialLocation { get => Model.InitialLocation; }
- public uint SampleRate => Model.SampleRate;
- public uint FPGAClock => Model.FPGAClock;
- public int ChannelCount => Model.AnalogSignalConfigs.Count;
- public float MaxFrequency { get => Model.MaxFrequency; }
- public float MinFrequency { get => Model.MinFrequency;}
- public float MaxOutInput { get => Model.MaxOutInput; }
- public float MaxAcceleration { get => Model.MaxAcceleration; }
- public float MaxDisplacement { get => Model.MaxDisplacement; }
- public float MaxDriver { get => Model.MaxDriver;}
- public float MaxJitterAcceleration { get => Model.MaxJitterAcceleration; }
- public float MaxJitterDisplacement { get => Model.MaxJitterDisplacement; }
- public float MaxVelocity { get => Model.MaxVelocity; }
- public int AccelerationSensorCount => Model.AccelerationConfigs.Count;
- public List<ServiceAnalogSignalConfigViewModel> AnalogSignals { get; } = new List<ServiceAnalogSignalConfigViewModel>();
- public List<ServiceAccelerationConfigViewModel> Accelerations { get; } = new List<ServiceAccelerationConfigViewModel>();
- public float DisplacementSensitivity { get => Model.DisplacementSensitivity; }
- public float AccelerationSensitivity => Accelerations.Count > 0 ? Accelerations[0].Sensitivity : 1;
- private ServiceShakerConfigViewModel()
- {
- Communication.Instance.DbConnection.CreateTable<Shaker.Models.ShakerConfigModel>();
- var model = Communication.Instance.DbConnection.Query<Shaker.Models.ShakerConfigModel>($"select * from {nameof(Shaker.Models.ShakerConfigModel)} LIMIT 1")?.FirstOrDefault() ?? new Shaker.Models.ShakerConfigModel();
- Communication.Instance.DbConnection.CreateTable<AnalogSignalConfigModel>(tableName: nameof(AnalogSignals));
- model.AnalogSignalConfigs = Communication.Instance.DbConnection.Query<AnalogSignalConfigModel>($"select * from {nameof(AnalogSignals)}") ??new List<AnalogSignalConfigModel>();
- int count = model.AnalogSignalConfigs.Count;
- if(count<ServiceConfigViewModel.Instance.AnalogCount)
- {
- model.AnalogSignalConfigs.AddRange(Enumerable.Range(0, ServiceConfigViewModel.Instance.AnalogCount - count).Select(x => new AnalogSignalConfigModel()));
- }
- Communication.Instance.DbConnection.CreateTable<AccelerationConfigModel>(tableName: nameof(Accelerations));
- model.AccelerationConfigs = Communication.Instance.DbConnection.Query<AccelerationConfigModel>($"select * from {nameof(Accelerations)}") ?? new List<AccelerationConfigModel>();
- count = model.AccelerationConfigs.Count;
- if(count<ServiceConfigViewModel.Instance.AccelerationCount)
- {
- model.AccelerationConfigs.AddRange(Enumerable.Range(0, ServiceConfigViewModel.Instance.AccelerationCount - count).Select(x => new AccelerationConfigModel()));
- }
- UpModel(model);
- SaveData();
- Communication.Instance.Context.GetEvent<Shaker.Models.ShakerConfigModel>().Subscrip((sender, args) =>
- {
- UpModel(model);
- SetFpga();
- ServiceSweepConfigViewModel.Instance.SetFpga();
- SaveData();
- });
- }
- public override void SetFpga()
- {
- base.SetFpga();
- ShakerFpga.Instance.MaxRiseCount.Value = MaxRiseCount;
- ShakerFpga.Instance.MaxZeroChangedCount.Value = MaxZeroChangedCount;
- ShakerFpga.Instance.MaxSignalCount.Value =MaxSignalCount;
- ShakerFpga.Instance.MaxEmergencyStopCount.Value = MaxEmergencyStopCount;
- ShakerFpga.Instance.MaxStopWindowCount.Value = MaxStopWindowCount;
- ShakerFpga.Instance.MaxFallCount.Value = MaxFallCount;
- ShakerFpga.Instance.InitialLocation.Value = Tools.Tools.QuantitiesToVoltage(InitialLocation, DisplacementSensitivity);
- ShakerFpga.Instance.SampleRate.Value = SampleRate;
- ShakerFpga.Instance.SampleInterval.Value = 1f /SampleRate;
- ShakerFpga.Instance.RiseInterval.Value = Tools.Tools.CalcInterval(MaxRiseCount);
- ShakerFpga.Instance.ZeroChangedInterval.Value = Tools.Tools.CalcInterval(MaxZeroChangedCount);
- ShakerFpga.Instance.EmergencyStopInterval.Value = Tools.Tools.CalcInterval(MaxEmergencyStopCount);
- ShakerFpga.Instance.FallInterval.Value = Tools.Tools.CalcInterval(MaxFallCount);
- ShakerFpga.Instance.StopWindowInterval.Value = Tools.Tools.CalcInterval(MaxStopWindowCount);
- ShakerFpga.Instance.SignalInterval.Value = Tools.Tools.CalcInterval(MaxSignalCount);
- ShakerFpga.Instance.MaxOutInput.Value = MaxOutInput;
- ShakerFpga.Instance.WarnOutInput.Value = MaxOutInput * 0.8f;
- ShakerFpga.Instance.MaxAcceleration.Value = Tools.Tools.QuantitiesToVoltage(MaxAcceleration, AccelerationSensitivity);
- ShakerFpga.Instance.WarnAcceleration.Value = Tools.Tools.QuantitiesToVoltage(MaxAcceleration * 0.8f, AccelerationSensitivity);
- ShakerFpga.Instance.MaxDisplacement.Value = Tools.Tools.QuantitiesToVoltage(MaxDisplacement, DisplacementSensitivity);
- ShakerFpga.Instance.WarnDisplacement.Value = Tools.Tools.QuantitiesToVoltage(MaxDisplacement * 0.8f, DisplacementSensitivity);
- ShakerFpga.Instance.MaxDriver.Value =MaxDriver;
- ShakerFpga.Instance.AccelerationPolarity.Values = Accelerations.Select(x => x.Polarity == Shaker.Model.Polarity.Positive).ToArray();
- ShakerFpga.Instance.MaxAdjustCount.Value = MaxAdjustCount;
- ShakerFpga.Instance.AdjustInverval.Value = Tools.Tools.CalcInterval(MaxAdjustCount);
- ShakerFpga.Instance.StartCount.Value = StartCount;
- ShakerFpga.Instance.LoopRate.Value = FPGAClock / SampleRate;
- ShakerFpga.Instance.SynthesisType.Value = (ushort)SynthesisType;
- ShakerFpga.Instance.OutSignalGain.Value = OutSignalGain;
- ShakerFpga.Instance.MaxAdjustCount.Value = MaxAdjustCount;
- ShakerFpga.Instance.StartCount.Value = StartCount;
- ShakerFpga.Instance.MaxJitterAcceleration.Value = Tools.Tools.QuantitiesToVoltage(MaxJitterAcceleration, AccelerationSensitivity);
- ShakerFpga.Instance.MaxJitterDisplacement.Value = Tools.Tools.QuantitiesToVoltage(MaxJitterDisplacement, DisplacementSensitivity);
- }
- public override void UpModel(Shaker.Models.ShakerConfigModel model)
- {
- base.UpModel(model);
- model.AnalogSignalConfigs ??= new List<AnalogSignalConfigModel>();
- model.AccelerationConfigs ??= new List<AccelerationConfigModel>();
- int count = model.AnalogSignalConfigs.Count;
- if (count < ServiceConfigViewModel.Instance.AnalogCount)
- {
- model.AnalogSignalConfigs.AddRange(Enumerable.Range(0, ServiceConfigViewModel.Instance.AnalogCount - count).Select(x => new AnalogSignalConfigModel()));
- }
- else if(count>ServiceConfigViewModel.Instance.AnalogCount)
- {
- model.AnalogSignalConfigs = model.AnalogSignalConfigs.Take(ServiceConfigViewModel.Instance.AnalogCount).ToList();
- }
- model.AccelerationConfigs = Communication.Instance.DbConnection.Query<AccelerationConfigModel>($"select * from {nameof(Accelerations)}") ?? new List<AccelerationConfigModel>();
- count = model.AccelerationConfigs.Count;
- if (count < ServiceConfigViewModel.Instance.AccelerationCount)
- {
- model.AccelerationConfigs.AddRange(Enumerable.Range(0, ServiceConfigViewModel.Instance.AccelerationCount - count).Select(x => new AccelerationConfigModel()));
- }
- else if(count>ServiceConfigViewModel.Instance.AccelerationCount)
- {
- model.AccelerationConfigs = model.AccelerationConfigs.Take(ServiceConfigViewModel.Instance.AccelerationCount).ToList();
- }
- AnalogSignals.Clear();
- Accelerations.Clear();
- if(model.AnalogSignalConfigs.Count>0)
- {
- AnalogSignals.AddRange(model.AnalogSignalConfigs.Select(x => new ServiceAnalogSignalConfigViewModel(x)));
- }
- if(model.AccelerationConfigs.Count > 0)
- {
- Accelerations.AddRange(model.AccelerationConfigs.Select(x => new ServiceAccelerationConfigViewModel(x)));
- }
- }
- private protected override void SaveData()
- {
- base.SaveData();
- Communication.Instance.DbConnection.DeleteAll<AnalogSignalConfigModel>(tableName: nameof(AnalogSignals));
- Communication.Instance.DbConnection.InsertAll(Model.AnalogSignalConfigs, tableName: nameof(AnalogSignals));
- Communication.Instance.DbConnection.DeleteAll<AccelerationConfigModel>(tableName: nameof(Accelerations));
- Communication.Instance.DbConnection.InsertAll(Model.AccelerationConfigs, tableName: nameof(Accelerations));
- }
- static ServiceShakerConfigViewModel()
- {
- }
- public static ServiceShakerConfigViewModel Instance { get; } = new ServiceShakerConfigViewModel();
- }
- }
|