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); } } }
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); } } } }