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); }
/* 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); }
/// <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))); }
/// <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"); } } }
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); }