public LoadTaskHandler(TaskQueueItemsService taskQueueItemsService, Logger logger) { _opcName = NewOpcServer.OpcList.Rbu; TaskQueueItemsService = taskQueueItemsService; Logger = logger; ReportsService = new ReportsService(); TasksReader = new TasksReader(); ContainersReader = new ContainersReader(); BatchersReader = new BatchersReader(); RecipesReader = new RecipesReader(); CommonOpcParametersReader = new CommonOpcParametersReader(); CreateSubscribe(); }
public ReportHelper(Logger logger) { Logger = logger; Service = new ReportsService(); BatchersReader = new BatchersReader(); DosingSourcesReader = new DosingSourcesReader(); _reportAttributesDict = GetAttributes(); _opc = NewOpcServer.GetInstance().GetOpc(NewOpcServer.OpcList.Rbu); #region Timers _timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 1, 0, 0) }; #endregion }
private List <BatcherMaterial> GetBatcherMaterials(string batch) { var batcherMaterials = new List <BatcherMaterial>(); var batcherNames = BatchersReader.GetBatcherNames(); if (_reportAttributesDict.ContainsKey(ReportAttributes.FinishLoadingDate) && _reportAttributesDict.ContainsKey(ReportAttributes.FinishLoadingTime)) { foreach (var batcherName in batcherNames) { var finishDateLoadingTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.FinishLoadingDate]; var finishTimeLoadingTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.FinishLoadingTime]; var finishLoadingDate = _opc.ReadNode(finishDateLoadingTag.ToNode(), OpcAttribute.Value) ?.ToString(); var finishLoadingTime = _opc.ReadNode(finishTimeLoadingTag.ToNode(), OpcAttribute.Value) ?.ToString(); if (finishLoadingDate != "1990-01-01" && finishLoadingDate != "null") { var batcherMaterial = new BatcherMaterial { FinishLoading = OpcHelper.StringDateParsing(finishLoadingDate, finishLoadingTime) }; if (_reportAttributesDict.ContainsKey(ReportAttributes.StartLoadingDate) && _reportAttributesDict.ContainsKey(ReportAttributes.StartLoadingTime)) { var startDateLoadingTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.StartLoadingDate]; var startTimeLoadingTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.StartLoadingTime]; var startLoadingDate = _opc.ReadNode(startDateLoadingTag.ToNode(), OpcAttribute.Value)?.ToString(); var startLoadingTime = _opc.ReadNode(startTimeLoadingTag.ToNode(), OpcAttribute.Value)?.ToString(); batcherMaterial.StartLoading = OpcHelper.StringDateParsing(startLoadingDate, startLoadingTime); } if (_reportAttributesDict.ContainsKey(ReportAttributes.StartWeight)) { var startWeightTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.StartWeight]; var startWeightString = _opc.ReadNode(startWeightTag.ToNode(), OpcAttribute.Value)?.ToString(); decimal.TryParse(startWeightString, out var startWeight); batcherMaterial.StartWeight = startWeight; } if (_reportAttributesDict.ContainsKey(ReportAttributes.FinishWeight)) { var finishWeightTag = batch + $"{batcherName}." + _reportAttributesDict[ReportAttributes.FinishWeight]; var finishWeightString = _opc.ReadNode(finishWeightTag.ToNode(), OpcAttribute.Value)?.ToString(); decimal.TryParse(finishWeightString, out var finishWeight); batcherMaterial.FinishWeight = finishWeight; } var batcherString = batch + $"{batcherName}."; batcherMaterial.DosingSourceMaterials = GetDosingSourceMaterials(batcherString); batcherMaterials.Add(batcherMaterial); } } } return(batcherMaterials); }
private Dictionary <ApiOpcParameter, string> GetValues(ApiTask task, ApiRecipe recipe, Dictionary <long, ApiRecipeMaterial> containers) { var result = new Dictionary <ApiOpcParameter, string>(); var isOk = true; var batchers = BatchersReader.ListBatchers(); foreach (var batcher in batchers) { foreach (var dosingSource in batcher.DosingSources) { containers.TryGetValue(dosingSource.Container.Id, out var recipeMaterial); if (recipeMaterial != null) { var materialSetParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x => x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.MaterialSet)); if (materialSetParameter != null) { var volume = Math.Round(recipeMaterial.Volume * task.BatchVolume, 1); result.Add(materialSetParameter, volume.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - MaterialSet."); } var materialIdParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x => x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.MaterialId)); if (materialIdParameter != null) { result.Add(materialIdParameter, recipeMaterial.Material.Id.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - MaterialId."); } var containerIdParameter = dosingSource.DosingSourceOpcParameters.FirstOrDefault(x => x.Name == OpcHelper.GetTagName(OpcHelper.TagNames.ContainerId)); if (containerIdParameter != null) { result.Add(containerIdParameter, dosingSource.Container.Id.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error($"У дозатора {batcher.Name} - источник дозирования {dosingSource.Name} отсутствует параметр - ContainerId."); } } } } var batchesAmount = GetCommonParameter(OpcHelper.TagNames.BatchesAmount); if (batchesAmount != null) { result.Add(batchesAmount, task.BatchesAmount.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error("Отсутствует параметр - BatchesAmount."); } var mixingTime = GetCommonParameter(OpcHelper.TagNames.MixingTime); if (mixingTime != null) { result.Add(mixingTime, recipe.MixingTime.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error("Отсутствует параметр - MixingTime."); } var percentOpenGate = GetCommonParameter(OpcHelper.TagNames.PercentOpenGate); if (percentOpenGate != null) { result.Add(percentOpenGate, recipe.PercentOpenGate.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error("Отсутствует параметр - PercentOpenGate."); } var timeFullUnload = GetCommonParameter(OpcHelper.TagNames.TimeFullUnload); if (timeFullUnload != null) { result.Add(timeFullUnload, recipe.TimeFullUnload.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error("Отсутствует параметр - TimeFullUnload."); } var timePartialUnload = GetCommonParameter(OpcHelper.TagNames.TimePartialUnload); if (timePartialUnload != null) { result.Add(timePartialUnload, recipe.TimePartialUnload.ToString(CultureInfo.InvariantCulture)); } else { isOk = false; Logger.Error("Отсутствует параметр - TimePartialUnload."); } return(isOk ? result : null); }