public long InsertSimulationRecord(SimulationRecord sr)
        {
            long identity;

            using (var conn = new SqlConnection(conStr))
            {
                conn.Open();
                identity = conn.Insert(sr);
                conn.Close();
            }
            return(identity);
        }
Exemple #2
0
        private static void MakeSimulation()
        {
            SimulationRecordsData simulationRecordsData = new SimulationRecordsData();
            SimulationRecord      sr;
            DateTime start = new DateTime();
            DateTime end   = new DateTime();
            int      accelerationSeconds = lstTimeParameters.First(x => x.MachineType == "ASRS" && x.MovementType == "ACCELERATION").TimeInSeconds;
            int      decelerationSeconds = lstTimeParameters.First(x => x.MachineType == "ASRS" && x.MovementType == "DECELERATION").TimeInSeconds;

            foreach (var task in lstMachineTask)
            {
                //task batche göre düzenlenecek current batchno değişkeniyle düzenleme yapılabilir bi düşün
                //task assing time starttan küçük olamaz
                start = lstMachineTask.IndexOf(task) == 0 || task.AssignTime > end ? task.AssignTime : end;//son tasktan gelsin.

                if (task.TargetAddress == "ASRS_WH_IN")
                {
                    end = start.AddSeconds(15);
                }
                else
                {
                    end = start
                          .AddSeconds(accelerationSeconds)  //hızlanma
                          .Add(CalculateTime(task))         //hareket metreyle orantılı çarpılıp hesaplanacak
                          .AddSeconds(decelerationSeconds); //yavaşlama
                }



                if (task.Sequence == 3)
                {
                    bool        firstRowIsEmpty;
                    AddressData addressData = new AddressData();
                    firstRowIsEmpty = addressData.GetFirstRowIsEmpty(task.TargetAddress).LastLoadTime <= start.AddMinutes(-7);
                    if (!firstRowIsEmpty)
                    {
                        var bfr = SelectBufferAddress();
                        task.TargetType    = "BUFFER";
                        task.TargetAddress = bfr.Code;          //isnullllll  bufferda yoksa yeni tüp seç
                        end = start
                              .AddSeconds(accelerationSeconds)  //hızlanma
                              .AddSeconds(20)                   //hesaplanacak
                              .AddSeconds(decelerationSeconds); //yavaşlama

                        Console.WriteLine("Buffera taşındı...");
                    }
                }

                //adresi güncelle
                //doluysa buffera

                task.StartTime   = start;
                task.EndTime     = end;
                task.IsCompleted = true;
                UpdateTaskData(task);

                UpdateAddressData(task);

                sr = new SimulationRecord
                {
                    ProductNotificationId      = task.TaskBatch,
                    DependedTaskBatchNo        = task.TaskBatch,
                    MachineCode                = task.MachineCode,
                    WaitingPaletteBufferCount  = 0,                                //çekilecek
                    WaitingPaletteConveyorQuee = SelectWaitingPaletteCount(start), //task başladığı anda üretim bildiriminde bekleyen (conveyor yada buffer) çekilecek
                    ExecutionDurationInSeconds = Convert.ToInt32((end - start).TotalSeconds),
                    ExecutionCompleteDateTime  = end
                };

                long id = simulationRecordsData.InsertSimulationRecord(sr);
                Console.WriteLine("Simulasyon Oluştu... " + id.ToString());
            }
        }