Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }