예제 #1
0
        // 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();
        }
예제 #2
0
        // 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));
        }