Esempio n. 1
0
 /// <summary>
 /// Update all relevance parameters after a node value update.
 /// </summary>
 public void UpdateRelevance(ContosoAggregatedOeeKpiTimeSpan topologyNode)
 {
     if (Relevance != null)
     {
         foreach (ContosoPerformanceRelevance relevance in Relevance)
         {
             UpdateRelevanceItem(topologyNode, relevance, Last);
         }
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Update the alerts for the specified node.
        /// </summary>
        void UpdateKPIAndOeeAlerts(ContosoTopologyNode node)
        {
            ContosoAggregatedOeeKpiTimeSpan oeeKpi = node.Last;

            node.Status |= UpdateAlert(node, oeeKpi.Kpi1.Kpi, oeeKpi.Kpi1.Time, node.Kpi1PerformanceSetting, ContosoAlertCause.AlertCauseKpi1BelowMinimum, ContosoAlertCause.AlertCauseKpi1AboveMaximum);
            node.Status |= UpdateAlert(node, oeeKpi.Kpi2.Kpi, oeeKpi.Kpi2.Time, node.Kpi2PerformanceSetting, ContosoAlertCause.AlertCauseKpi2BelowMinimum, ContosoAlertCause.AlertCauseKpi2AboveMaximum);
            node.Status |= UpdateAlert(node, node.OeeAvailabilityLast.OeeAvailability, node.OeeAvailabilityLast.Time, node.OeeAvailabilityPerformanceSetting, ContosoAlertCause.AlertCauseOeeAvailabilityBelowMinimum, ContosoAlertCause.AlertCauseOeeAvailabilityAboveMaximum);
            node.Status |= UpdateAlert(node, node.OeePerformanceLast.OeePerformance, node.OeePerformanceLast.Time, node.OeePerformancePerformanceSetting, ContosoAlertCause.AlertCauseOeePerformanceBelowMinimum, ContosoAlertCause.AlertCauseOeePerformanceAboveMaximum);
            node.Status |= UpdateAlert(node, node.OeeQualityLast.OeeQuality, node.OeeQualityLast.Time, node.OeeQualityPerformanceSetting, ContosoAlertCause.AlertCauseOeeQualityBelowMinimum, ContosoAlertCause.AlertCauseOeeQualityAboveMaximum);
        }
Esempio n. 3
0
        /// <summary>
        /// Callback for a query to update the relevance data of a topology node.
        /// </summary>
        public void UpdateRelevanceItem(ContosoAggregatedOeeKpiTimeSpan topologyNode, ContosoPerformanceRelevance relevance, ContosoDataItem data)
        {
            switch (relevance)
            {
            case ContosoPerformanceRelevance.Kpi2:
            case ContosoPerformanceRelevance.Kpi2_Station:
                topologyNode.Kpi2.Kpi  = data.Value;
                topologyNode.Kpi2.Time = data.Time;
                break;

            case ContosoPerformanceRelevance.Kpi1:
            case ContosoPerformanceRelevance.Kpi1_Station:
                topologyNode.Kpi1.Kpi  = data.Value;
                topologyNode.Kpi1.Time = data.Time;
                break;

            case ContosoPerformanceRelevance.OeeQuality_Bad:
                topologyNode.OeeQuality.Bad     = data.Value;
                topologyNode.OeeQuality.Time    = new DateTime(Math.Max(topologyNode.OeeQuality.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Quality = topologyNode.OeeQuality.OeeQuality;
                break;

            case ContosoPerformanceRelevance.OeeQuality_Station_Good:
            case ContosoPerformanceRelevance.OeeQuality_Good:
                topologyNode.OeeQuality.Good    = data.Value;
                topologyNode.OeeQuality.Time    = new DateTime(Math.Max(topologyNode.OeeQuality.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Quality = topologyNode.OeeQuality.OeeQuality;
                break;

            case ContosoPerformanceRelevance.OeePerformance_Ideal:
                topologyNode.OeePerformance.IdealCycleTime = data.Value;
                topologyNode.OeePerformance.Time           = new DateTime(Math.Max(topologyNode.OeePerformance.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Performance        = topologyNode.OeePerformance.OeePerformance;
                break;

            case ContosoPerformanceRelevance.OeePerformance_Actual:
                topologyNode.OeePerformance.ActualCycleTime = data.Value;
                topologyNode.OeePerformance.Time            = new DateTime(Math.Max(topologyNode.OeePerformance.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Performance         = topologyNode.OeePerformance.OeePerformance;
                break;

            case ContosoPerformanceRelevance.OeeAvailability_Running:
                topologyNode.OeeAvailability.OverallRunningTime = data.Value;
                topologyNode.OeeAvailability.Time    = new DateTime(Math.Max(topologyNode.OeeAvailability.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Availability = topologyNode.OeeAvailability.OeeAvailability;
                break;

            case ContosoPerformanceRelevance.OeeAvailability_Fault:
                topologyNode.OeeAvailability.OverallFaultTime = data.Value;
                topologyNode.OeeAvailability.Time             = new DateTime(Math.Max(topologyNode.OeeAvailability.Time.Ticks, data.Time.Ticks), DateTimeKind.Utc);
                topologyNode.OeeOverall.Availability          = topologyNode.OeeAvailability.OeeAvailability;
                break;
            }
        }
Esempio n. 4
0
 public void AddStation(ContosoAggregatedOeeKpiTimeSpan x)
 {
     Kpi1.AddStation(x.Kpi1);
     Kpi2.AddStation(x.Kpi2);
     OeeAvailability.AddStation(x.OeeAvailability);
     OeePerformance.AddStation(x.OeePerformance);
     OeeQuality.AddStation(x.OeeQuality);
     OeeOverall.Update(OeeAvailability, OeePerformance, OeeQuality);
     if (x.EndTime > EndTime)
     {
         EndTime = x.EndTime;
     }
 }
        /// <summary>
        /// Get the relevant Oee Kpi data item.
        /// </summary>
        private ContosoDataItem GetData(ContosoAggregatedOeeKpiTimeSpan oeeKpi, ContosoPerformanceRelevance relevance)
        {
            switch (relevance)
            {
            case ContosoPerformanceRelevance.Kpi1:
                return(oeeKpi.Kpi1);

            case ContosoPerformanceRelevance.Kpi2:
                return(oeeKpi.Kpi2);

            case ContosoPerformanceRelevance.OeeQuality:
                return(oeeKpi.OeeQuality);

            case ContosoPerformanceRelevance.OeePerformance:
                return(oeeKpi.OeePerformance);

            case ContosoPerformanceRelevance.OeeAvailability:
                return(oeeKpi.OeeAvailability);

            case ContosoPerformanceRelevance.OeeOverall:
                return(oeeKpi.OeeOverall);
            }
            throw new Exception("Invalid Performance Relevance");
        }
Esempio n. 6
0
        /// <summary>
        /// Update the OEE and KPI values
        /// </summary>
        public void UpdateAllKPIAndOEEValues(int histogram = 0)
        {
            // topology is updated from bottom to top nodes, add Production Line view
            List <string> orderedlist = GetAllChildren(TopologyRoot.Key, typeof(ProductionLine));

            // add factory view
            orderedlist.AddRange(GetAllChildren(TopologyRoot.Key, typeof(Factory)));
            // add top view
            orderedlist.Add(TopologyRoot.Key);

            bool updateStatus = false;

            // update all, list is already in the right order to process sequentially
            foreach (string item in orderedlist)
            {
                ContosoTopologyNode actualNode = this[item] as ContosoTopologyNode;
                if (actualNode != null)
                {
                    ContosoAggregatedOeeKpiHistogram oeeKpiHistogram = actualNode[histogram];
                    for (int i = 0; i < oeeKpiHistogram.Intervals.Count; i++)
                    {
                        ContosoAggregatedOeeKpiTimeSpan oeeKpiNode = oeeKpiHistogram[i];
                        oeeKpiNode.Reset();

                        List <string> children = actualNode.GetChildren();
                        foreach (string child in children)
                        {
                            // special case for child as OPC UA server
                            Station childStation = this[child] as Station;
                            if (childStation != null)
                            {
                                ContosoAggregatedOeeKpiTimeSpan oeeKpiChild = childStation[histogram, i];
                                // add all Oee and KPI using the metric for stations
                                oeeKpiNode.AddStation(oeeKpiChild);
                                // update alerts for the station
                                ContosoAggregatedOeeKpiHistogram childOeeKpiHistogram = childStation[histogram];
                                if (childOeeKpiHistogram.CheckAlerts)
                                {
                                    UpdateKPIAndOeeAlerts(childStation);
                                }
                            }
                            else
                            {
                                ContosoTopologyNode childNode = this[child] as ContosoTopologyNode;
                                if (childNode != null)
                                {
                                    ContosoAggregatedOeeKpiTimeSpan oeeKpiChild = childNode[histogram, i];
                                    // add all Oee and KPI using the default metric
                                    oeeKpiNode.Add(oeeKpiChild);
                                }
                                else
                                {
                                    continue;
                                }
                            }
                        }
                        if (oeeKpiNode.EndTime > oeeKpiHistogram.EndTime)
                        {
                            oeeKpiHistogram.EndTime = oeeKpiNode.EndTime;
                        }
                    }

                    if (oeeKpiHistogram.CheckAlerts)
                    {
                        // check for alerts
                        UpdateKPIAndOeeAlerts(actualNode);
                        updateStatus = true;
                    }
                }
            }
            if (updateStatus)
            {
                UpdateAllStatusTopology();
            }
        }
Esempio n. 7
0
 public ContosoOeeKpiOpCodeQueryInfo(string appUri, ContosoAggregatedOeeKpiTimeSpan topologyNode)
 {
     AppUri       = appUri;
     TopologyNode = topologyNode;
 }