// feeds the last machinestate history entity to the database private void FeedMachineStateHistory() { if (MachineStateHistory.Count > 0 && MachineStateHistory.Last().EndDateTime == DateTime.MinValue) // conclude last machine state.. { MachineStateHistory lastEntity = MachineStateHistory.Last(); if (LastMachineStateInMachineStateHistory == lastEntity.MachineState) { lastEntity.EndDateTime = DateTime.Now; lastEntity.Duration = lastEntity.EndDateTime - lastEntity.StartDateTime; lastEntity.DailyCycleCounter = DailyCycleCounter; lastEntity.CyclesInThisPeriod = CyclesInThisPeriod; DataAccess.DataAccess.AddDataMachineStateHistory(lastEntity); } } LastMachineStateInMachineStateHistory = CurrentMachineState; CyclesInThisPeriod = 0; int index; if (MachineStateHistory.Count() > 20) { index = MachineStateHistory.Count() - 20; } else { index = 0; } MachineStateHistory.RemoveRange(0, index); MachineStateHistory.Add(new MachineStateHistory(CurrentMachineState, MachineConfiguration.MachineId)); _gatewayHubCommunication.NewHistoryDataNotification(); }
// Constructor public Machine(IDevice device, GatewayHubHandler gatewayHubCommunication, MachineConfiguration machineConfiguration) { _device = device; _machineStateStarted = DateTime.Now; MachineConfiguration = machineConfiguration; _gatewayHubCommunication = gatewayHubCommunication; device.Inputs[machineConfiguration.CycleInputPin].InputChanged += InputInterpretation; CurrentMachineState = DataAccess.MachineStateHistory.State.Stopped; LastMachineStateInMachineStateHistory = DataAccess.MachineStateHistory.State.Stopped; MachineStateHistory = new List <MachineStateHistory>(); _timerCycleTimeOut = ThreadPoolTimer.CreatePeriodicTimer(CycleTimeOut, TimeSpan.FromMilliseconds(machineConfiguration.MachineStateTimeout)); _timerMachineDataPublish = ThreadPoolTimer.CreatePeriodicTimer(PublishActualMachineData, TimeSpan.FromMilliseconds(machineConfiguration.PublishingIntervall)); }