public List <BlackMaple.MachineFramework.MaterialToSendToExternalQueue> HandleEvent(LogEntry e) { var cycle = new List <MWI.LogEntry>(); var sendToExternal = new List <BlackMaple.MachineFramework.MaterialToSendToExternalQueue>(); if (e.Pallet >= 1) { cycle = _log.CurrentPalletLog(e.Pallet.ToString()); } var jobs = new Dictionary <string, JobPlan>(); Log.Debug("Handling mazak event {@event}", e); switch (e.Code) { case LogCode.LoadBegin: _log.RecordLoadStart( mats: CreateMaterialWithoutIDs(e), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, foreignId: e.ForeignID); break; case LogCode.LoadEnd: _log.AddPendingLoad(e.Pallet.ToString(), PendingLoadKey(e), e.StationNumber, CalculateElapsed(e, cycle, LogType.LoadUnloadCycle, e.StationNumber), CalculateActiveLoadTime(e), e.ForeignID); break; case LogCode.MachineCycleStart: // There should never be any pending loads since the pallet movement event should have fired. // Just in case, we check for pending loads here cycle = CheckPendingLoads(e.Pallet, e.TimeUTC.AddSeconds(-1), "", false, cycle); _log.RecordMachineStart( mats: GetMaterialOnPallet(e, cycle).Select(m => m.Mat), pallet: e.Pallet.ToString(), statName: _machGroupName.MachineGroupName, statNum: e.StationNumber, program: e.Program, timeUTC: e.TimeUTC, pockets: ToolsToSnapshot(e.StationNumber, _mazakSchedules.Tools), foreignId: e.ForeignID); break; case LogCode.MachineCycleEnd: var machStart = FindMachineStart(e, cycle, e.StationNumber); TimeSpan elapsed; IEnumerable <JobLogDB.ToolPocketSnapshot> toolsAtStart; if (machStart != null) { elapsed = e.TimeUTC.Subtract(machStart.EndTimeUTC); toolsAtStart = _log.ToolPocketSnapshotForCycle(machStart.Counter); } else { Log.Debug("Calculating elapsed time for {@entry} did not find a previous cycle event", e); elapsed = TimeSpan.Zero; toolsAtStart = Enumerable.Empty <JobLogDB.ToolPocketSnapshot>(); } var toolsAtEnd = ToolsToSnapshot(e.StationNumber, _mazakSchedules.Tools); if (elapsed > TimeSpan.FromSeconds(30)) { var machineMats = GetMaterialOnPallet(e, cycle); var s = _log.RecordMachineEnd( mats: machineMats.Select(m => m.Mat), pallet: e.Pallet.ToString(), statName: _machGroupName.MachineGroupName, statNum: e.StationNumber, program: e.Program, timeUTC: e.TimeUTC, result: "", elapsed: elapsed, active: CalculateActiveMachining(machineMats), tools: JobLogDB.ToolPocketSnapshot.DiffSnapshots(toolsAtStart, toolsAtEnd), pockets: toolsAtEnd, foreignId: e.ForeignID); HandleMachiningCompleted(s); } else { //TODO: add this with a FAIL result and skip the event in Update Log? Log.Warning("Ignoring machine cycle at {time} on pallet {pallet} because it is less than 30 seconds", e.TimeUTC, e.Pallet); } break; case LogCode.UnloadBegin: _log.RecordUnloadStart( mats: GetMaterialOnPallet(e, cycle).Select(m => m.Mat), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, foreignId: e.ForeignID); break; case LogCode.UnloadEnd: //TODO: test for rework var loadElapsed = CalculateElapsed(e, cycle, LogType.LoadUnloadCycle, e.StationNumber); var mats = GetMaterialOnPallet(e, cycle); var queues = FindUnloadQueues(mats); sendToExternal.AddRange(FindSendToExternalQueue(mats)); _log.RecordUnloadEnd( mats: mats.Select(m => m.Mat), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, elapsed: loadElapsed, active: CalculateActiveUnloadTime(mats), foreignId: e.ForeignID, unloadIntoQueues: queues); break; case LogCode.PalletMoving: if (e.FromPosition != null && e.FromPosition.StartsWith("LS")) { CheckPendingLoads(e.Pallet, e.TimeUTC, e.ForeignID, true, cycle); } break; } _onMazakLog(e); return(sendToExternal); }
public List <BlackMaple.MachineFramework.MaterialToSendToExternalQueue> HandleEvent(LogEntry e) { var cycle = new List <MWI.LogEntry>(); var sendToExternal = new List <BlackMaple.MachineFramework.MaterialToSendToExternalQueue>(); if (e.Pallet >= 1) { cycle = _log.CurrentPalletLog(e.Pallet.ToString()); } var jobs = new Dictionary <string, JobPlan>(); Log.Debug("Handling mazak event {@event}", e); switch (e.Code) { case LogCode.LoadBegin: _log.RecordLoadStart( mats: CreateMaterialWithoutIDs(e), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, foreignId: e.ForeignID); break; case LogCode.LoadEnd: _log.AddPendingLoad(e.Pallet.ToString(), PendingLoadKey(e), e.StationNumber, CalculateElapsed(e, cycle, LogType.LoadUnloadCycle, e.StationNumber), CalculateActiveLoadTime(e), e.ForeignID); break; case LogCode.MachineCycleStart: // There should never be any pending loads since the pallet movement event should have fired. // Just in case, we check for pending loads here cycle = CheckPendingLoads(e.Pallet, e.TimeUTC.AddSeconds(-1), "", false, cycle); _log.RecordMachineStart( mats: GetMaterialOnPallet(e, cycle).Select(m => m.Mat), pallet: e.Pallet.ToString(), statName: "MC", statNum: e.StationNumber, program: e.Program, timeUTC: e.TimeUTC, foreignId: e.ForeignID); Log.Debug("Tools at machine cycle start for machine {machine}: {@tools}", e.StationNumber, _mazakSchedules.Tools.ToList()); break; case LogCode.MachineCycleEnd: var elapsed = CalculateElapsed(e, cycle, LogType.MachineCycle, e.StationNumber); if (elapsed > TimeSpan.FromSeconds(30)) { var machineMats = GetMaterialOnPallet(e, cycle); var s = _log.RecordMachineEnd( mats: machineMats.Select(m => m.Mat), pallet: e.Pallet.ToString(), statName: "MC", statNum: e.StationNumber, program: e.Program, timeUTC: e.TimeUTC, result: "", elapsed: elapsed, active: CalculateActiveMachining(machineMats), foreignId: e.ForeignID); HandleMachiningCompleted(s); } else { //TODO: add this with a FAIL result and skip the event in Update Log? Log.Warning("Ignoring machine cycle at {time} on pallet {pallet} because it is less than 30 seconds", e.TimeUTC, e.Pallet); } Log.Debug("Tools at machine cycle end on machine {machine}: {@tools}", e.StationNumber, _mazakSchedules.Tools.ToList()); break; case LogCode.UnloadBegin: _log.RecordUnloadStart( mats: GetMaterialOnPallet(e, cycle).Select(m => m.Mat), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, foreignId: e.ForeignID); break; case LogCode.UnloadEnd: //TODO: test for rework var loadElapsed = CalculateElapsed(e, cycle, LogType.LoadUnloadCycle, e.StationNumber); var mats = GetMaterialOnPallet(e, cycle); var queues = FindUnloadQueues(mats); sendToExternal.AddRange(FindSendToExternalQueue(mats)); _log.RecordUnloadEnd( mats: mats.Select(m => m.Mat), pallet: e.Pallet.ToString(), lulNum: e.StationNumber, timeUTC: e.TimeUTC, elapsed: loadElapsed, active: CalculateActiveUnloadTime(mats), foreignId: e.ForeignID, unloadIntoQueues: queues); break; case LogCode.PalletMoving: if (e.FromPosition != null && e.FromPosition.StartsWith("LS")) { CheckPendingLoads(e.Pallet, e.TimeUTC, e.ForeignID, true, cycle); } break; } _onMazakLog(e); return(sendToExternal); }