123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using Shaker.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ShakerService.ViewModel
- {
- internal sealed class ServoConfigViewModel:ViewModelBase<ServoConfigModel>
- {
- private ServoConfigViewModel():base()
- {
- }
- static ServoConfigViewModel()
- {
- }
- private protected override void ReadModel()
- {
- base.ReadModel();
- Communication.Instance.DbConnection.CreateTable<ServoConfigModel>();
- var model = Communication.Instance.DbConnection.Table<ServoConfigModel>().FirstOrDefault() ?? new ServoConfigModel();
- Communication.Instance.DbConnection.CreateTable<PIModel>();
- model.PI = Communication.Instance.DbConnection.Table<PIModel>()?.ToList()?? new List<PIModel>();
- if(model.PI.Count>4)
- {
- model.PI.RemoveRange(4, model.PI.Count - 4);
- }
- else if(model.PI.Count<4)
- {
- model.PI.AddRange(Enumerable.Repeat(new PIModel(), 4 - model.PI.Count));
- }
- CurrentModel = model;
- SaveModel();
- }
- private protected override void SaveModel()
- {
- base.SaveModel();
- Communication.Instance.DbConnection.DeleteAll<ServoConfigModel>();
- Communication.Instance.DbConnection.Insert(CurrentModel);
- Communication.Instance.DbConnection.DeleteAll<PIModel>();
- Communication.Instance.DbConnection.InsertAll(CurrentModel.PI);
- }
- private protected override void UpModel(ServoConfigModel model)
- {
- if(model.PI ==null) model.PI = new List<PIModel>();
- if (model.PI.Count > 4)
- {
- model.PI.RemoveRange(4, model.PI.Count - 4);
- }
- else if (model.PI.Count < 4)
- {
- model.PI.AddRange(Enumerable.Repeat(new PIModel(), 4 - model.PI.Count));
- }
- base.UpModel(model);
- }
- public override void SetFpga()
- {
- base.SetFpga();
- ShakerFpga.ShakerFpga.Instance.P参数.Value = [.. PI.Select(x => x.P)];
- ShakerFpga.ShakerFpga.Instance.I参数.Value = [.. PI.Select(x => x.I)];
- ShakerFpga.ShakerFpga.Instance.水平阀死区电压.Value = HorizontalBarrierPotential;
- ShakerFpga.ShakerFpga.Instance.竖直阀死区电压.Value = VerticalBarrierPotential;
- ShakerFpga.ShakerFpga.Instance.最大积分电压.Value = MaxIntegratedVoltage;
- ShakerFpga.ShakerFpga.Instance.最大驱动电压.Value = MaxDriverVoltage;
- ShakerFpga.ShakerFpga.Instance.急停后驱动限幅值.Value = EmerhencyDriverLimitVoltage;
- ShakerFpga.ShakerFpga.Instance.位移前馈增益.Value = DisplacementFeedforwardGain;
- ShakerFpga.ShakerFpga.Instance.驱动超限电压.Value = DriverOverLimitVoltage;
- }
- public static ServoConfigViewModel Instance { get; } = new ServoConfigViewModel();
- public IReadOnlyList<PIModel> PI => CurrentModel.PI;
- /// <summary>
- /// 水平阀死区电压(V)
- /// </summary>
- public double HorizontalBarrierPotential => CurrentModel.HorizontalBarrierPotential;
- /// <summary>
- /// 竖直阀死区电压(V)
- /// </summary>
- public double VerticalBarrierPotential => CurrentModel.VerticalBarrierPotential;
- /// <summary>
- /// 最大积分电压(V)
- /// </summary>
- public double MaxIntegratedVoltage => CurrentModel.MaxIntegratedVoltage;
- /// <summary>
- /// 位移前馈增益
- /// </summary>
- public double DisplacementFeedforwardGain => CurrentModel.DisplacementFeedforwardGain;
- /// <summary>
- /// 最大驱动电压(V)
- /// </summary>
- public double MaxDriverVoltage => CurrentModel.MaxDriverVoltage;
- /// <summary>
- /// 驱动超限电压(V)
- /// </summary>
- public double DriverOverLimitVoltage => CurrentModel.DriverOverLimitVoltage;
- /// <summary>
- /// 急停后驱动限幅值(V)
- /// </summary>
- public double EmerhencyDriverLimitVoltage => CurrentModel.EmerhencyDriverLimitVoltage;
- }
- }
|