Inheritance: TrakHound.OEE
Exemple #1
0
        private void ProcessQueue()
        {
            // Get Lists of just the Sequence numbers
            var gEventSequences = gEventsQueue.Select(o => o.CurrentValue.Sequence);
            var overrideSequences = overrideInstancesQueue.Select(o => o.Sequence);

            var oc = Configuration.Get(configuration);
            if (oc != null)
            {
                bool useOverrides = oc.Overrides.Count > 0;

                List<long> sequences = null;

                // Find intersecting Sequences in queues
                if (useOverrides) sequences = gEventSequences.Intersect(overrideSequences).ToList();
                else sequences = gEventSequences.ToList();

                if (sequences != null)
                {
                    // Create list of OeeData objects
                    var oeeDatas = new List<OEEData>();

                    foreach (var sequence in sequences)
                    {
                        // Find Sequence in queue lists
                        var gEvent = gEventsQueue.Find(o => o.CurrentValue.Sequence == sequence);
                        var overrideInstance = overrideInstancesQueue.Find(o => o.Sequence == sequence);

                        if (gEvent != null && (overrideInstance != null || !useOverrides))
                        {
                            // Create new OeeData object
                            var oeeData = new OEEData();
                            oeeData.Timestamp = gEvent.CurrentValue.Timestamp;
                            oeeData.Sequence = gEvent.CurrentValue.Sequence;

                            double duration = gEvent.Duration.TotalSeconds;

                            // Set Planned Production Time to entire duration
                            oeeData.PlannedProductionTime = duration;

                            // Test if Event's Value is equal to OEE's configured value
                            if (gEvent.CurrentValue.Value == oc.OperatingEventValue)
                            {
                                // Set Operating Time to entire duration
                                oeeData.OperatingTime = duration;

                                // Set Ideal OperatingTime to adjusted duration using Feedrate Overrdie average
                                if (useOverrides) oeeData.IdealOperatingTime = duration * (overrideInstance.FeedrateAverage / 100);
                                else oeeData.IdealOperatingTime = duration;
                            }

                            // Add to list
                            oeeDatas.Add(oeeData);
                        }

                        // Remove processed items from queue
                        gEventsQueue.RemoveAll(o => o.CurrentValue.Sequence == sequence);
                        overrideInstancesQueue.RemoveAll(o => o.Sequence == sequence);
                    }

                    // Send OeeData objects
                    if (oeeDatas.Count > 0) SendOeeData(oeeDatas);
                }
            }
        }
Exemple #2
0
        private void ProcessQueue()
        {
            // Get Lists of just the Sequence numbers
            var gEventSequences   = gEventsQueue.Select(o => o.CurrentValue.Sequence);
            var overrideSequences = overrideInstancesQueue.Select(o => o.Sequence);

            var oc = Configuration.Get(configuration);

            if (oc != null)
            {
                bool useOverrides = oc.Overrides.Count > 0;

                List <long> sequences = null;

                // Find intersecting Sequences in queues
                if (useOverrides)
                {
                    sequences = gEventSequences.Intersect(overrideSequences).ToList();
                }
                else
                {
                    sequences = gEventSequences.ToList();
                }

                if (sequences != null)
                {
                    // Create list of OeeData objects
                    var oeeDatas = new List <OEEData>();

                    foreach (var sequence in sequences)
                    {
                        // Find Sequence in queue lists
                        var gEvent           = gEventsQueue.Find(o => o.CurrentValue.Sequence == sequence);
                        var overrideInstance = overrideInstancesQueue.Find(o => o.Sequence == sequence);

                        if (gEvent != null && (overrideInstance != null || !useOverrides))
                        {
                            // Create new OeeData object
                            var oeeData = new OEEData();
                            oeeData.Timestamp = gEvent.CurrentValue.Timestamp;
                            oeeData.Sequence  = gEvent.CurrentValue.Sequence;

                            double duration = gEvent.Duration.TotalSeconds;

                            // Set Planned Production Time to entire duration
                            oeeData.PlannedProductionTime = duration;

                            // Test if Event's Value is equal to OEE's configured value
                            if (gEvent.CurrentValue.Value == oc.OperatingEventValue)
                            {
                                // Set Operating Time to entire duration
                                oeeData.OperatingTime = duration;

                                // Set Ideal OperatingTime to adjusted duration using Feedrate Overrdie average
                                if (useOverrides)
                                {
                                    oeeData.IdealOperatingTime = duration * (overrideInstance.FeedrateAverage / 100);
                                }
                                else
                                {
                                    oeeData.IdealOperatingTime = duration;
                                }
                            }

                            // Add to list
                            oeeDatas.Add(oeeData);
                        }

                        // Remove processed items from queue
                        gEventsQueue.RemoveAll(o => o.CurrentValue.Sequence == sequence);
                        overrideInstancesQueue.RemoveAll(o => o.Sequence == sequence);
                    }

                    // Send OeeData objects
                    if (oeeDatas.Count > 0)
                    {
                        SendOeeData(oeeDatas);
                    }
                }
            }
        }