using System; using System.Linq; using SHJX.Service.Dao; using SHJX.Service.Model.Control; using System.Collections.Generic; using SHJX.Service.Common.ReadXML; using SHJX.Service.Model.Dao; namespace SHJX.Service.Control.ServiceController { public class SettingController { private readonly SettingDataManager _settingDataManager; public SettingController(ReadConfigUtil config) { _settingDataManager = new SettingDataManager(config); } /// /// 设置速度 /// /// /// public bool SetSpeed(MotorSpeed speed) { var speedArgs = new PortArgs() { TypeName = speed.NodeName, Distance = speed.Speed, WriteWay = WriteWay.Speed }; var res = DataCentre.GetClient.Factory(speed.NodeName).Write(speedArgs); #region 加速度 var acSpeedArgs = new PortArgs() { TypeName = speed.NodeName, Distance = speed.AcSpeed, WriteWay = WriteWay.AcSpeed }; res = res && DataCentre.GetClient.Factory(speed.NodeName).Write(acSpeedArgs); #endregion #region 减速度 PortArgs deSpeedArgs = new() { TypeName = speed.NodeName, Distance = speed.DeSpeed, WriteWay = WriteWay.DeSpeed }; res = res && DataCentre.GetClient.Factory(speed.NodeName).Write(deSpeedArgs); #endregion return res; } public bool SettingTemperature(int temperature) { var args = new PortArgs { TypeName = "Heat", Distance = temperature }; return DataCentre.GetClient.Factory("Heat").Write(args); } /// /// 获取数据 /// /// /// public List GetData() where T : class { var data = _settingDataManager.Query().ToList(); return data; } public List GetWavekeys() { return _settingDataManager.GetWavekeys(); } //public double GetBlankValue(Wavekey WaveKey, string level,string item) //{ // var _balanceVals = DataCentre.GetBalanceValue; // var blankTasks = DataCentre._dataManager.GetTaskByWaveKey(WaveKey.WaveKey, level, "空白") ?? DataCentre._dataManager.GetLastOtherTaskByWaveKey("空白", level); // GetBDBlankTaskResult(blankTasks,_balanceVals.MaxVolume, out var noneValue); // return noneValue; //} public double GetBlankCalibrationValue(string WaveKey, string level, string item) { var _balanceVals = DataCentre.GetBalanceValue; var bdTasks = DataCentre._dataManager.GetTaskByWaveKey(WaveKey, level, item) ?? DataCentre._dataManager.GetLastOtherTaskByWaveKey(item, level); tempCount = 0; if (item == "标定") { GetBDTaskResult(item, bdTasks, _balanceVals.MaxVolume, out var bdValue); return bdValue; } else { GetBlankTaskResult(item, bdTasks, _balanceVals.MaxVolume, out var bdValue); return bdValue; } } private double[] temp = new double[50]; int tempCount = 0; public void GetBlankTaskResult( string type, List noneTasks, double maxVolume, out double blankValue) { if (noneTasks?.Count > 1) { var noneMaxValue = noneTasks.Max(item => item.Amount); var noneMinValue = noneTasks.Min(item => item.Amount); if (noneMaxValue >= maxVolume) { GetBlankTaskResult(type, noneTasks.Where(item => item.Amount != noneMaxValue).ToList(), maxVolume, out blankValue); } if (type == "空白" && noneMaxValue - noneMinValue > 0.8) { GetBlankTaskResult(type, noneTasks.Where(item => item.Amount != noneMinValue).ToList(), maxVolume, out blankValue); } temp[tempCount++] = Math.Round(noneTasks.Average(item => item.Amount), 2); blankValue = temp[0]; } else { var first = noneTasks?.FirstOrDefault(); //temp[tempCount++] = Math.Round(first?.Amount ?? 0, 2); if (first?.Amount >= maxVolume) { temp[tempCount++] = 0; } else temp[tempCount++] = Math.Round(first?.Amount ?? 0, 2); blankValue = temp[0]; } } public void GetBDTaskResult(string type, List bdTasks, double maxVolume, out double bdValue) { if (bdTasks is not null && bdTasks.Any()) { for (int i = 0; i < bdTasks.Count; i++) { if (bdTasks[i].Amount >= maxVolume) { bdTasks.Remove(bdTasks[i]); i--; } } if (bdTasks.Count == 0) { bdValue = Math.Round(maxVolume, 2); } else { var bdAmount = bdTasks.Average(item => Convert.ToDouble(item.Amount)); bdValue = Math.Round(bdAmount, 2); } } else { var first = bdTasks?.FirstOrDefault(); if (first?.Amount >= maxVolume) bdValue = 0; else bdValue = Math.Round(first?.Amount ?? 0, 2); } } //public void GetBDTaskResult( List bdTasks, double maxVolume, out double bdValue) //{ // if (bdTasks is not null && bdTasks.Any()) // { // for (int i = 0; i < bdTasks.Count; i++) // { // if (bdTasks[i].Amount >= maxVolume) // bdTasks.Remove(bdTasks[i]); // } // var bdAmount = bdTasks.Average(item => Convert.ToDouble(item.Amount)); // } // else // { // var first = bdTasks?.FirstOrDefault(); // bdValue = first?.Amount ?? 0; // } //} /// /// 更新信息 /// /// /// public bool UpdateValues(List lists) where T : class, new() { var row = _settingDataManager.Update(lists); return row > 0; } } }