示例#1
0
        private void addRobotToStorage()
        {
            StatusChangedEventArgs s = new StatusChangedEventArgs();

            s.NewStatus = "Robot start creation";
            FactoryProgress(this, s);

            FactoryQueueElement first   = _queue.First();
            ITestingUnit        toStore = ( ITestingUnit )Activator.CreateInstance(first.Model);

            toStore.WorkingPos = first.WorkingPos;
            toStore.ParkingPos = first.ParkingPos;
            toStore.Name       = first.Name;

            Thread.Sleep(((int)toStore.BuildTime * 1000));
            _storage.Add(toStore);
            StorageFreeSlots = StorageCapacity - _storage.Count();
            _queue.Remove(first);
            QueueFreeSlots = QueueCapacity - _queue.Count();

            TimeSpan sp = TimeSpan.FromSeconds(toStore.BuildTime);

            QueueTime   = QueueTime.Subtract(sp);
            s.NewStatus = "Robot created";
            FactoryProgress(this, s);
        }
示例#2
0
        /* public static UnitFactory Instance
         * {
         *   get
         *   {
         *       if( instance == null )
         *       {
         *           Console.WriteLine("First instance of UnitFactory");
         *           instance = new UnitFactory(7, 7);
         *           instance.Queue = new List<Factory_queueElement>();
         *           instance.Storage = new List<ITestingUnit>();
         *       }
         *       return instance;
         *   }
         * }*/
        public bool AddWorkableUnitToQueue(Type model, string name, Coordinates parkPosition, Coordinates workPosition)
        {
            if (Monitor.TryEnter(lockObj2))
            {
                if (_queue.Count < QueueCapacity)
                {
                    _queue.Add(new FactoryQueueElement(name, model, parkPosition, workPosition));
                    QueueFreeSlots = QueueCapacity - _queue.Count();

                    TimeSpan sp = TimeSpan.FromSeconds(( int )(( ITestingUnit )Activator.CreateInstance(_queue.First().Model)).BuildTime);
                    QueueTime = QueueTime.Add(sp);
                    Monitor.Exit(lockObj2);

                    if (Monitor.TryEnter(lockObj))
                    {
                        if (_storage.Count() < StorageCapacity)
                        {
                            canCreate = true;
                            Monitor.Pulse(lockObj);
                            Monitor.Exit(lockObj);
                        }
                    }
                    return(true);
                }
            }
            return(false);
        }
示例#3
0
 /// <summary>
 /// Construction d'un robot
 /// </summary>
 /// <param name="newUnit">Le robot à construire</param>
 private void BuildingUnit(ITestingUnit newUnit)
 {
     OnStatusChangedFactory(new StatusChangedEventArgs(string.Format("Start build unit {0} : {1}", newUnit.Model, newUnit.Name)));
     Thread.Sleep(Convert.ToInt32(newUnit.BuildTime) * 1000);
     _storage.Add(newUnit);
     _queue.Dequeue();
     QueueTime = QueueTime.Add(new TimeSpan(0, 0, Convert.ToInt32(-newUnit.BuildTime)));
     OnStatusChangedFactory(new StatusChangedEventArgs(string.Format("End build unit {0} : {1}", newUnit.Model, newUnit.Name)));
 }
示例#4
0
        /// <summary>
        /// On ajoute une nouveau robot dans la file d'attente
        /// </summary>
        /// <param name="modeleName">Le modèle du robot à ajouter</param>
        /// <param name="unitName">Le nom du robot</param>
        /// <param name="parkingPos">La position de station du robot</param>
        /// <param name="workingPos">La position de travail du robot</param>
        public void AddWorkableUnitToQueue(Type modeleName, string unitName, Coordinates parkingPos, Coordinates workingPos)
        {
            // On vérifie si il reste de la place dans la file d'attente et dans l'entrepot
            if ((_queue.Count() < QueueCapacity) && (_storage.Count() + _queue.Count < StorageCapacity))
            {
                // On ajoute un élément dans la file d'attente
                FactoryQueueElement queueElement = new FactoryQueueElement(modeleName, unitName, parkingPos, workingPos);
                _queue.Enqueue(queueElement);



                //On ajoute du temps dans la file d'attente
                ITestingUnit recupTime = Activator.CreateInstance(queueElement.Model, new object[] { }) as ITestingUnit;
                QueueTime = QueueTime.Add(new TimeSpan(0, 0, Convert.ToInt32(recupTime.BuildTime)));

                //Création d'un thread permettant de construire un robot (un seul robot est créé à la fois)
                Thread threadBuildUnit = new Thread(() =>
                {
                    lock (_lockBuildingUnit)
                    {
                        FactoryQueueElement nextQueueElement = (FactoryQueueElement)_queue.Peek();
                        // On récupére par reflexion les informations sur un robot
                        ITestingUnit newUnit = Activator.CreateInstance(nextQueueElement.Model, new object[] { }) as ITestingUnit;
                        newUnit.Model        = nextQueueElement.Name;
                        newUnit.ParkingPos   = nextQueueElement.ParkingPos;
                        newUnit.WorkingPos   = nextQueueElement.WorkingPos;
                        BuildingUnit(newUnit);
                    }
                });

                threadBuildUnit.Start();
            }
            else
            {
                if (_queue.Count() >= QueueCapacity)
                {
                    MessageBox.Show("Max unit in queue");
                }
                else
                {
                    MessageBox.Show("Max unit in factory");
                }
            }
        }
示例#5
0
        public string FormatforQAD()
        {
            const char MFLD = '\u0001';
            string     mstr = RoutingCode + "\v" + "S" + MFLD;

            mstr = mstr + Operation.ToString() + "\v" + "I" + MFLD;
            mstr = mstr + StartDate.ToString() + "\v" + "D" + MFLD;
            mstr = mstr + EndDate.ToString() + "\v" + "D" + MFLD;
            mstr = mstr + StandOp + "\v" + "S" + MFLD;
            mstr = mstr + WorkCenter + "\v" + "S" + MFLD;
            mstr = mstr + Machine + "\v" + "S" + MFLD;
            mstr = mstr + Description + "\v" + "S" + MFLD;
            mstr = mstr + MachPerOp.ToString() + "\v" + "I" + MFLD;
            mstr = mstr + OverlapUnits.ToString() + "\v" + "I" + MFLD;
            mstr = mstr + QueueTime.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + WaitTime.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + "yes" + "\v" + "L" + MFLD;
            mstr = mstr + SubcontractLT.ToString() + "\v" + "I" + MFLD;
            mstr = mstr + SetupCrew.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + RunCrew.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + SetupTime.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + RunTime.ToString() + "\v" + "F" + MFLD;
            mstr = mstr + MoveTime.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + YieldPerc.ToString("000") + "\v" + "E" + MFLD;
            mstr = mstr + ToolCode + "\v" + "S" + MFLD;
            mstr = mstr + Supplier + "\v" + "S" + MFLD;
            mstr = mstr + InvValue.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + SubCost.ToString() + "\v" + "G" + MFLD;
            mstr = mstr + Comments + "\v" + "X" + MFLD;
            mstr = mstr + WIP + "\v" + "S" + MFLD;
            mstr = mstr + PurchaseOrder + "\v" + "S" + MFLD;
            mstr = mstr + Line.ToString() + "\v" + "I" + MFLD;
            mstr = mstr + "yes" + "\v" + "L" + MFLD;
            mstr = mstr + "no" + "\v" + "L" + MFLD;
            mstr = mstr + OrigStartDate.ToString() + "\v" + "D" + MFLD;
            mstr = mstr + '\u0014';
            return(mstr);
        }