| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508 |
- using SHJX.Service.Control.Common.Assets;
- using SHJX.Service.Control.Execute.TitrationController;
- using shjxCamera;
- namespace SHJX.Service.Control.Service
- {
- public class ManualService : IManualService
- {
- private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ManualService));
- #region Field
- private readonly IEventAggregator _ea;
- private readonly IDataManager _dataManager;
- private readonly ReadConfigUtil _readConfig;
- public readonly static List<double> GraberValues = new();
- public readonly static List<double> GraberValues2 = new();
- #endregion
- #region Property
- public Dictionary<string, string> ManualTabItems => _readConfig.GetManualTabItem;
- public double DissolveTemperatureDefaultValue => _readConfig.DissolveTemperatureValue;
- public double TitrationTemperatureDefaultValue => _readConfig.TitrationTemperatureValue;
- #endregion
- public ManualService(IEventAggregator ea, IDataManager dataManager, ReadConfigUtil readConfig)
- {
- _ea = ea;
- _dataManager = dataManager;
- _readConfig = readConfig;
- Messager<object>.Register("GraberColorValue", GetGraberValue);
- Messager<object>.Register("TitrationStart", ExecuteTitrationStart);
- Messager<object>.Register("TitrationStop", ExecuteTitrationStop);
- Messager<TitrationValueArgs>.Register("TitrationValueChange", ExecuteTitrationValueChange);
- Messager<object>.Register("GraberColorValue2", GetGraber2Value);
- Messager<object>.Register("TitrationStart2", ExecuteTitration2Start);
- Messager<object>.Register("TitrationStop2", ExecuteTitration2Stop);
- Messager<Titration2ValueArgs>.Register("Titration2ValueChange", ExecuteTitration2ValueChange);
- }
- /// <summary>
- /// 获取数据
- /// </summary>
- /// <param name="value"></param>
- public void GetGraberValue(object value)
- {
- GraberValues.Add(Convert.ToDouble(value));
- _ea.GetEvent<GraberValueEvent>().Publish(GraberValues);
- _ea.GetEvent<TitrationStatusEvent>().Publish(true);
- }
- /// <summary>
- /// 获取数据2
- /// </summary>
- /// <param name="value"></param>
- public void GetGraber2Value(object value)
- {
- GraberValues2.Add(Convert.ToDouble(value));
- _ea.GetEvent<Graber2ValueEvent>().Publish(GraberValues2);
- _ea.GetEvent<Titration2StatusEvent>().Publish(true);
- }
- /// <summary>
- /// 滴定开始
- /// </summary>
- /// <param name="value"></param>
- public void ExecuteTitrationStart(object value)
- {
- try
- {
- GraberValues.Clear();
- _ea.GetEvent<TitrationStatusEvent>().Publish(true);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 滴定2开始
- /// </summary>
- /// <param name="value"></param>
- public void ExecuteTitration2Start(object value)
- {
- try
- {
- GraberValues.Clear();
- _ea.GetEvent<Titration2StatusEvent>().Publish(true);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 滴定结束
- /// </summary>
- /// <param name="value"></param>
- public void ExecuteTitrationStop(object value)
- {
- try
- {
- GraberValues.Clear();
- _ea.GetEvent<TitrationStatusEvent>().Publish(false);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 滴定2结束
- /// </summary>
- /// <param name="value"></param>
- public void ExecuteTitration2Stop(object value)
- {
- try
- {
- GraberValues2.Clear();
- _ea.GetEvent<Titration2StatusEvent>().Publish(false);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 滴定改变
- /// </summary>
- public void ExecuteTitrationValueChange(TitrationValueArgs arg)
- {
- _ea.GetEvent<TitrationValueEvent>().Publish(arg);
- }
- /// <summary>
- /// 滴定2改变
- /// </summary>
- public void ExecuteTitration2ValueChange(Titration2ValueArgs arg)
- {
- _ea.GetEvent<Titration2ValueEvent>().Publish(arg);
- }
- public List<T> GetData<T>() where T : class => _dataManager.Query<T>().ToList();
- public bool UpdateData<T>(T t) where T : class => _dataManager.Update(t) > 0;
- public bool UpdateAreaAllData(EquipmentArea name)
- {
- DetailState flag = DetailState.Init;
- int flag2 = 1;
- if (!name.Enable)
- {
- flag = DetailState.Doing;
- flag2 = 0;
- }
- _dataManager.Update<SampleDetail>().Where(it => it.NodeName.Equals(name.PointName)).SetValues(it => it.TaskStatus.Set(flag) && it.DetailInfo.Set("")).Execute();
- _dataManager.Update<PositionHotlist>().Where(it => it.PositionName.Equals(name.PointName)).SetValues(it => it.CurrentOccupy.Set(string.Empty) && it.Enable.Set(flag2)).Execute();
- List<EquipmentArea> names = new List<EquipmentArea>();
- names.Add(name);
- _ea.GetEvent<UpdateSampleDetailNullEvent>().Publish(names);
- return true;
- }
- public async Task<bool> ManualWriteRegisterAsync(string name, double value)
- {
- return await Task.Factory.StartNew(() =>
- {
- bool res = ExecuteCommand.RegisterExecute(EquipmentNames.Timer, 1); //开启计时器
- return res && ExecuteCommand.RegisterExecute(name, value); //写入
- });
- }
- public async Task<bool> ManualWriteMoveToMotorAsync(string name, double value, MotorManualMoveType type)
- {
- return await Task.Factory.StartNew(() =>
- {
- MotorConvert convert = _dataManager.Query<MotorConvert>().ToList()?.FirstOrDefault(item => item.MotorName.Equals(name));
- if (convert is null)
- {
- return false;
- }
- //if (value > 1000 && name.In(EquipmentNames.AxisX, EquipmentNames.AxisY)) //这段代码是xy移动距离大于1000前要看z是否回到原点
- //{
- // char[] judgeRes = EquipmentNames.AxisZ.MotorRead();
- // if (judgeRes is null or { Length: 0 })
- // {
- // return false;
- // }
- // if (!judgeRes[3 - 1].Equals('0'))
- // {
- // EquipmentNames.AxisZ.MotorGoBack();
- // }
- //}
- bool res = name.LiquidMotorMove(Convert.ToInt32(Math.Round(value * convert.ConvertRatio)));
- MotorMoveStatus status = _dataManager.Query<MotorMoveStatus>().ToList()?.FirstOrDefault(item => item.MotorName.Equals(name));
- if (status is null)
- {
- return res;
- }
- if (res)
- {
- switch (type)
- {
- case MotorManualMoveType.Forward:
- status.CurrentPosition += Math.Abs(value);
- break;
- case MotorManualMoveType.Inversion:
- status.CurrentPosition -= Math.Abs(value);
- if (status.CurrentPosition < 0)
- {
- status.CurrentPosition = 0;
- }
- break;
- }
- _dataManager.Update(status);
- }
- return res;
- });
- }
- public async Task<bool> ManualWriteMoveToDMotor(string name, double value, MotorManualMoveType type)
- {
- return await Task.Factory.StartNew(() =>
- {
- MotorConvert convert = _dataManager.Query<MotorConvert>().ToList()?.FirstOrDefault(item => item.MotorName.Equals(name));
- if (convert is null)
- {
- return false;
- }
- MotorMoveStatus status = _dataManager.Query<MotorMoveStatus>().ToList()?.FirstOrDefault(item => item.MotorName.Equals(name));
- if (status is null)
- {
- return false;
- }
- bool res = name.LiquidMotorMove(Convert.ToInt32(Math.Round(-1*(Math.Abs(value) - status.CurrentPosition ) * convert.ConvertRatio)));
- if (res)
- {
- switch (type)
- {
- case MotorManualMoveType.Forward:
- status.CurrentPosition = Math.Abs(value);
- break;
- }
- _dataManager.Update(status);
- }
- return res;
- });
- }
- public async Task<bool> MotorGoBackAsync(string name)
- {
- return await Task.Factory.StartNew(() =>
- {
- return ExecuteCommand.MotorGoBackExecute(name);
- });
- }
- public bool MotorStop(string name) => name.MotorStop();
- public async Task<bool> UpdateSpeedAsync(string name)
- {
- return await Task.Factory.StartNew(() =>
- {
- MotorSpeed speed = _dataManager.Query<MotorSpeed>().Where(it => it.DetailName.Equals(name)).First();
- bool res = speed.SystemName.WriteSpeed(speed.Speed);
- res = res && speed.SystemName.WriteAcSpeed(speed.AcSpeed);
- res = res && speed.SystemName.WriteDeSpeed(speed.DeSpeed);
- return res;
- });
- }
- public bool ManualControlRegister(string typeName, RegisterExecuteType type)
- {
- bool res = type switch
- {
- RegisterExecuteType.Open => typeName.RegisterOpen(),
- RegisterExecuteType.Close => typeName.RegisterClose(),
- _ => throw new ArgumentNullException(typeName),
- };
- return res;
- }
- public bool ManualSettingPID(string type, object value)
- {
- bool res = type.ToLower() switch
- {
- "ratio" => EquipmentNames.DissolveHeating.WriteRatio(value),
- "integral" => EquipmentNames.DissolveHeating.WriteIntegral(value),
- "differential" => EquipmentNames.DissolveHeating.WriteDifferential(value),
- "integraldeafult" => EquipmentNames.DissolveHeating.WriteIntegralDeafult(value),
- _ => throw new ArgumentException("未找到对应PID项定义")
- };
- return res;
- }
- public bool ManualSettingTemp(object value)
- {
- return EquipmentNames.DissolveHeating.WriteTemperature(value);
- }
- public async Task<bool> ManualDirectOutLiquidAsync(string type, object value)
- {
- return await Task.Factory.StartNew(() =>
- {
- return type.LiquidMotorMove(Convert.ToInt32(Math.Round(Convert.ToDouble(value))));
- });
- }
- //public static async Task<bool> ManualLiquidExecuteStatic(string pumpName, LiquidSwitchPattern pattern, object value)
- //{
- // return await Task.Factory.StartNew(() =>
- // {
- // return LiquidPipeSwitch.StartNew.SetLiquidName(pumpName).Execute(pattern, value);
- // });
- //}
- public async Task<bool> ManualLiquidExecute(string pumpName, LiquidSwitchPattern pattern, object value)
- {
- return await Task.Factory.StartNew(() =>
- {
- return LiquidPipeSwitch.StartNew.SetLiquidName(pumpName).Execute(pattern, value);
- });
- }
- public async Task<bool> ManualLiquidExecuteOxalate(string pumpName, LiquidSwitchPattern pattern, object value)
- {
- return await Task.Factory.StartNew(() =>
- {
- return LiquidPipeSwitchOxalate.StartNew.SetLiquidName(pumpName).ExecuteOxalate(pattern, value);
- });
- }
- public LiquidAmount GetOnceDropLiquidAmount()
- {
- LiquidAmount liquid = _dataManager.Query<LiquidAmount>().Where(it => it.LiquidName.Equals(EquipmentNames.Titration1PotassiumPermanganate)).First();
- return liquid;
- }
- public void ManualExecuteTitration(TitrationArg arg)
- {
- double amount = 0.0;
- TitrationExecute.Start(arg, ref amount);
- }
- public void ManualExecuteTitrationStop()
- {
- TitrationExecute.Running = false;
-
- }
- public void ManualExecuteExplosion(int MaxCameraRange)
- {
- ColorDataGraber _graber = Globals.Graber;
- CameraValue explosion = _dataManager.Query<CameraValue>().First();
- _graber.PresetLightParammanual(explosion, MaxCameraRange);
- }
- public void ManualExecuteTitration2(Titration2Arg arg)
- {
- double amount = 0.0;
- Titration2Execute.Start(arg, ref amount);
- }
- public void ManualExecuteTitration2Stop()
- {
- Titration2Execute.Running = false;
- }
- public void ManualExecuteExplosion2(int MaxCameraRange)
- {
- ColorData2Graber _graber = Globals.Graber2;
- Camera2Value explosion= _dataManager.Query<Camera2Value>().First();
- _graber.PresetLightParammanual(explosion, MaxCameraRange);
- }
- public void ManualcheckParams2()
- {
- ColorData2Graber _graber = Globals.Graber2;
- _graber.ShowParammanual();
- }
- public void ManualcheckParams()
- {
- ColorDataGraber _graber = Globals.Graber;
- _graber.ShowParammanual();
- }
- /// <summary>
- /// 计算k值
- /// </summary>
- /// <returns></returns>
- public double CalculationKValue()
- {
- List<EquipmentTask> tasks = _dataManager.Query<EquipmentTask>().Where(it => it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH)).With(a => a.WaveKey, b => b.WaveKey, _dataManager.Query<EquipmentTask>().Where(it => it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH) && it.Status.Equals(TaskState.Finished)).OrderBy(it => it.CreateTime, OrderPattern.Desc).Take(1), WithPattern.Equals).ToList();
- if (!tasks.Any())
- {
- return 0;
- }
- double volumeSum = 0.0;
- foreach (EquipmentTask task in tasks)
- {
- volumeSum += task.Amount;
- }
- if (volumeSum.Equals(0))
- {
- return 0;
- }
- double avgRes = volumeSum / tasks.Count;
- double returnResult = 10 / avgRes;
- return Math.Round(returnResult,3);
- }
- public Task<bool> ElectricDropper(string EpType, RegisterExecuteType type)
- {
- bool res = type switch
- {
- RegisterExecuteType.Open => DropperForward(EpType),
- RegisterExecuteType.Close => DropperInversion(EpType),
- RegisterExecuteType.Point => DropperPoint(EpType),
- _ => throw new ArgumentOutOfRangeException(nameof(type)),
- };
- return Task.FromResult(res);
-
- }
- public Task<bool> ElectricDropperFind(string EpType, RegisterExecuteType type)
- {
- bool res = type switch
- {
- RegisterExecuteType.Open => DropperForward(EpType),
- RegisterExecuteType.Close => DropperInversion(EpType),
- _ => throw new ArgumentOutOfRangeException(nameof(type)),
- };
- return Task.FromResult(res);
- }
- private static bool DropperForward(string elementName)
- {
- char[] readData2 = $"{elementName}Dropper".MotorRead();
- if (readData2 is null or not { Length: 8 })
- {
- return false;
- }
- if (readData2[5 - 1].Equals('0'))
- {
- $"{elementName}DropperForward".RegisterOpen();
- Thread.Sleep(200);
- $"{elementName}DropperInversion".RegisterOpen();
- bool res = true;
- do
- {
- Thread.Sleep(200);
- char[] readData = $"{elementName}Dropper".MotorRead();
- if (readData is null or not { Length: 8 })
- {
- continue;
- }
- res = readData[6 - 1].Equals('0');
- } while (!res);
- $"{elementName}DropperInversion".RegisterClose();
- Thread.Sleep(200);
- $"{elementName}DropperForward".RegisterClose();
- return true;
- }
- else
- return false;
- }
- public static bool DropperInversion(string elementName)
- {
- char[] readData2 = $"{elementName}Dropper".MotorRead();
- if (readData2 is null or not { Length: 8})
- {
- return false;
- }
- if (readData2[6 - 1].Equals('0'))
- {
- bool res = $"{elementName}DropperInversion".RegisterOpen();
- do
- {
- Thread.Sleep(200);
- char[] readData = $"{elementName}Dropper".MotorRead();
- if (readData is null or not { Length: 8 })
- {
- continue;
- }
- res = readData[5 - 1].Equals('0');
- } while (!res);
- $"{elementName}DropperInversion".RegisterClose();
- return res;
- }
- else
- return false;
- }
- public static bool DropperPoint(string elementName)
- {
- char[] readData2 = $"{elementName}Dropper".MotorRead();
- if (readData2 is null or not { Length: 8 })
- {
- return false;
- }
- bool res = $"{elementName}DropperInversion".RegisterOpen();
- do
- {
- Thread.Sleep(200);
- char[] readData = $"{elementName}Dropper".MotorRead();
- if (readData is null or not { Length: 8 })
- {
- continue;
- }
- res = readData[5 - 1].Equals('0');
- } while (!res);
- $"{elementName}DropperInversion".RegisterClose();
- return res;
- }
- }
- }
|