示例#1
0
        public async Task AgentSimulatioAsync(int simulationConfigurationId)
        {
            // In-memory database only exists while the connection is open
            var connectionStringBuilder = new SqliteConnectionStringBuilder {
                DataSource = ":memory:"
            };
            var connection = new SqliteConnection(connectionStringBuilder.ToString());

            // create OptionsBuilder with InMemmory Context
            var builder = new DbContextOptionsBuilder <MasterDBContext>();

            builder.UseSqlite(connection);
            var simNumber = _evaluationContext.GetSimulationNumber(simulationConfigurationId, SimulationType.Decentral);

            using (var c = new InMemoryContext(builder.Options))
            {
                c.Database.OpenConnection();
                c.Database.EnsureCreated();
                InMemoryContext.LoadData(_evaluationContext, c);

                var sim = new AgentSimulation(c, _messageHub);
                await sim.RunSim(simulationConfigurationId, simNumber);

                CopyResults.Copy(c, _evaluationContext, simulationConfigurationId, simNumber, SimulationType.Decentral);
                CalculateKpis.MachineSattleTime(_evaluationContext, simulationConfigurationId, SimulationType.Decentral, simNumber);

                CalculateKpis.CalculateAllKpis(_evaluationContext, simulationConfigurationId, SimulationType.Decentral, simNumber, true);
            }
            connection.Close();
            _messageHub.EndSimulation("Simulation with Id:" + simulationConfigurationId + " Completed."
                                      , simulationConfigurationId.ToString()
                                      , simNumber.ToString());
        }
示例#2
0
        private void FinishSimulation(TimeTable <ISimulationItem> timeTable, int simulationId, int simNumber, SimulationConfiguration simConfig)
        {
            //copy workschedules to the simulationworkschedules which get written back to the local-db
            //FillSimulationWorkSchedules(timeTable.Items.OfType<PowsSimulationItem>().ToList(), simulationId, simNumber, 0);
            _messageHub.SendToAllClients("last Item produced at: " + _context.SimulationWorkschedules.Max(a => a.End));
            //calculate kpis
            CalculateKpis.MachineSattleTime(_context, simulationId, SimulationType.Central, simNumber);
            CalculateKpis.CalculateAllKpis(_context, simulationId, SimulationType.Central, simNumber, true, simConfig.Time);
            RemoveSimulationWorkschedules();
            //copy the relevant tables from the in-memory db to the local-db
            CopyResults.Copy(_context, _evaluationContext, simulationId, simNumber, SimulationType.Central);

            _messageHub.EndScheduler();
            _context.Database.CloseConnection();
            _evaluationContext.Database.CloseConnection();
        }
示例#3
0
        //[InlineData(SimulationType.Decentral, 2)]
        //[InlineData(SimulationType.Decentral, 3)]
        //[InlineData(SimulationType.Central, 6)]
        // [InlineData(SimulationType.Central, 4)]
        // [InlineData(SimulationType.Central, 5)]
        // [InlineData(SimulationType.Central, 6)]
        // [InlineData(SimulationType.Central, 7)]
        public async Task TestKpiCalculation(SimulationType simType, int simId)
        {
            var toRemove = await _productionDomainContext.Kpis.Where(x => x.SimulationType == simType &&
                                                                     x.SimulationConfigurationId == 1 &&
                                                                     x.KpiType == KpiType.MeanTimeToStart)
                           .ToListAsync();

            _productionDomainContext.Kpis.RemoveRange(toRemove);
            _productionDomainContext.SaveChanges();
            //var simConfig = _productionDomainContext.SimulationConfigurations.Where(x => x.Id == 1);
            CalculateKpis.CalculateMeanStartTime(_productionDomainContext
                                                 , 1
                                                 , simType
                                                 , 1
                                                 , true
                                                 , 20160);

            //  var toRemove2 = await _productionDomainContext.Kpis.Where(x => x.SimulationType == simType
            //                                                                && x.SimulationConfigurationId == simId
            //                                                                && x.KpiType == KpiType.StockEvolution)
            //      .ToListAsync();
            //  _productionDomainContext.Kpis.RemoveRange(toRemove2);
            //  _productionDomainContext.SaveChanges();
            //
            //  CalculateKpis.ArticleStockEvolution(_productionDomainContext
            //      , simId
            //      , simType
            //      , 1
            //      , true
            //      , 20160);
            //


            //            CalculateKpis.CalculateAllKpis(
            //CalculateKpis.CalculateMachineUtilization(
            //context: _productionDomainContext,
            //    simulationId: 1,
            //    simulationType: simType,
            //    simulationNumber: 1,
            //    final: true,
            //    time: 20000);
        }