public void Takt() { if (_module == null || !_module.IsActive || !IsActive) { return; } ItemPassedCount++; if (++_taktCount >= NumberOfTaktsBeforeCreateItem) { _taktCount = 0; var item = new SimulatedItem(); item.Metadata.Add("barcode", "123-456-" + CreatedItemCount); item.AddLog("item was created by an RandomItemCreatorEquipment after " + NumberOfTaktsBeforeCreateItem + " takts", _module.Name); _module.AddItem(item, Position); CreatedItemCount++; if (ItemCreated != null) { ItemCreated(this, new ItemCreatorEventArgs(item)); } } }
public void Initialize(IModuleSimulatorRepository moduleSimulatorRepository, SimulationAlarmHandler simulationAlarmHandler) { if (_mosaicModule == null) { return; } var moduleSimulator = moduleSimulatorRepository.GetModule("BRC"); moduleSimulator.Initialize(10, _mosaicModule.Name); SimulatedJunction mosaicControlledJunction = _mosaicModule.Equipments.OfType <SimulatedJunction>().FirstOrDefault(); var junctionEquipment = _container.GetExportedValue <JunctionEquipment>(); junctionEquipment.Initialize(9, moduleSimulator, mosaicControlledJunction, moduleSimulatorRepository.GetModule("SimA"), moduleSimulatorRepository.GetModule("SimB")); moduleSimulator.AddEquipment(junctionEquipment); moduleSimulator.ReactOnPlatformModuleState(_mosaicModule); _mosaicModule.BarcodeEventHandler += (sender, args) => { var simItem = new SimulatedItem(); simItem.ItemId = (ulong)HashHelper.ConvertStringToLong(args.Barcode); simItem.Metadata.Add("barcode", args.Barcode); moduleSimulator.AddItem(simItem); }; }
public void GivenItem_WhenSearchForPosition_ShouldReturn() { var item = new SimulatedItem { ItemId = 1 }; _testee.AddItem(item, 3); _testee.GetPositionOfItem(item.ItemId).Should().Be(3); }
public void WhenItemMovesToNextModule_ShouldAddLogHistory() { var item = new SimulatedItem { ItemId = 1 }; _moduleA.AddItem(item, 9); _moduleA.Takt(); item.LogHistory.Should().Contain("Moved item from " + _moduleA.Name + " to " + _moduleB.Name); }
public void GivenItemFrozen_WhenTakt_ShouldNotMove() { var item = new SimulatedItem { ItemId = 1 }; item.IsFrozen = true; _testee.AddItem(item); _testee.Takt(); _testee.GetItemByPosition(0).Should().NotBeNull("item is still on first slot because module is not active"); }
public void GivenModuleStopped_WhenTakt_ShouldNotMoveItems() { var item = new SimulatedItem { ItemId = 1 }; _testee.AddItem(item); _testee.IsActive = false; _testee.Takt(); _testee.GetItemByPosition(0).Should().NotBeNull("item is still on first slot because module is not active"); }
public void WhenItemPassesEquipment_ShouldAddLogHistory() { var item = new SimulatedItem(); _testee.AddItem(item); var customActionEquipment = new CustomActionEquipment(); customActionEquipment.Initialize(1, i => {}); _testee.AddEquipment(customActionEquipment); _testee.Takt(); item.LogHistory.Should().Contain("passed equipment CustomActionEquipment"); }
public void CollisionWatcherTest() { var item = new SimulatedItem(); var testee = new CollisionWatcherEquipment(); Alarm alarm = null; testee.Alarms.Subscribe(a => alarm = a); testee.ItemPassed(item); testee.ItemPassedCount.Should().Be(1); alarm.Should().NotBeNull("each collision must raise an alarm"); testee.DetectedItems.Should().Contain(item); item.LogHistory.Should().Contain("collision detected"); }
public void WhenItemPositionExceedsModuleLength_ShouldMoveToNextModule() { var item = new SimulatedItem { ItemId = 1 }; _moduleA.AddItem(item); for (int i = 0; i <= 10; i++) { _taktManager.SingleStep(); } _moduleA.ItemCount.Should().Be(0); _moduleB.ItemCount.Should().Be(1); }
public void MosaicBarcodeReaderEquipmentTests() { int barcodeReadCount = 0; var item = new SimulatedItem(); var mosaicBarcodeReader = new SimulatedBarcodeReader(new Mock <ILogger>().Object); mosaicBarcodeReader.BarcodeReceivedEvent += (sender, args) => barcodeReadCount++; var testee = new BarcodeReaderEquipment(); testee.Initialize(0, mosaicBarcodeReader); testee.ItemPassed(item); testee.ItemPassedCount.Should().Be(1); barcodeReadCount.Should().Be(1); }
public void WhenAddItem_ShouldBeAccessible() { var item1 = new SimulatedItem { ItemId = 1 }; var item2 = new SimulatedItem { ItemId = 2 }; _testee.AddItem(item1); _testee.AddItem(item2); _testee.GetItemById(1).Should().Be(item1); _testee.GetItemById(2).Should().Be(item2); _testee.GetItemById(99).Should().BeNull("item does not exist"); }
public void GivenItemAndItemFrozen_WhenTakt_ShouldNotMoveFrozenItemOnly() { var item1 = new SimulatedItem { ItemId = 1 }; var item2 = new SimulatedItem { ItemId = 2 }; item1.IsFrozen = true; _testee.AddItem(item1, 0); _testee.AddItem(item2, 1); _testee.Takt(); _testee.GetPositionOfItem(item1.ItemId).Should().Be(0, "this item must not move because it's frozen"); _testee.GetPositionOfItem(item2.ItemId).Should().Be(2, "this item must move because it's not frozen"); }
public void QueueEquipmentTests() { var testee = new QueueEquipment(); testee.Initialize(0, _module); testee.Capacity = 5; _module.AddEquipment(testee); var item1 = new SimulatedItem { ItemId = 1 }; var item2 = new SimulatedItem { ItemId = 2 }; var item3 = new SimulatedItem { ItemId = 3 }; // add 3 items to slot 0 _module.AddItem(item1); _module.AddItem(item2); _module.AddItem(item3); testee.ItemPassedCount.Should().Be(3); testee.QueueList.Items.Should().HaveCount(3); _module.GetItemByPosition(0).Should().BeOfType(typeof(SimulatedItemList)); // release 1 item (move to slot 1) testee.ReleaseItem(); testee.QueueList.Items.Should().HaveCount(2); _module.GetItemByPosition(1).Should().Be(item1, "item1 was added to the queue first and now released"); // relase all other items (slot 0 is empty now) testee.ReleaseItem(); testee.ReleaseItem(); testee.QueueList.Items.Should().HaveCount(0); _module.GetItemByPosition(0).Should().BeNull("there is not item in the queue anymore"); // further release must do nothing var action = new Action(testee.ReleaseItem); action.ShouldNotThrow("there is no more item to release"); }
public void GivenAddedNewItem_WhenItemPositionExceedsModuleLength_ShouldRaiseCorrectRxEvent() { var item = new SimulatedItem { ItemId = 1 }; _moduleA.AddItem(item); SimulatedItemLeftModuleData itemLeftData = null; _moduleA.ItemLeft.Subscribe(data => itemLeftData = data); for (int i = 0; i <= 10; i++) { _taktManager.SingleStep(); } itemLeftData.Should().NotBeNull(); itemLeftData.Item.Should().Be(item); itemLeftData.OriginModuleSimulator.Should().Be(_moduleA, "the origin module of the test item was ModuleA"); }
public void StackerEquipmentTests() { var testee = new StackerEquipment(); testee.Initialize(0, _module); testee.Capacity = 5; _module.AddEquipment(testee); var item1 = new SimulatedItem { ItemId = 1 }; var item2 = new SimulatedItem { ItemId = 2 }; // add 2 items to slot 0 _module.AddItem(item1); _module.AddItem(item2); testee.ItemPassedCount.Should().Be(2); testee.StackList.Items.Should().HaveCount(2); // release full stack (move to slot 1) testee.ReleaseStack(); testee.StackList.Items.Should().HaveCount(0, "stack was released"); _module.GetItemByPosition(0).Should().BeNull("there is no item in the stacker anymore"); var stack = _module.GetItemByPosition(1); stack.Should().BeOfType <SimulatedItemList>("the stack is not on slot 1"); stack.ItemId.Should().Be(item2.ItemId, "item2 was added last on top of the stack"); ((SimulatedItemList)stack).Items.Should().HaveCount(2); ((SimulatedItemList)stack).Items.Should().Contain(item1); ((SimulatedItemList)stack).Items.Should().Contain(item2); // further release must do nothing var action = new Action(testee.ReleaseStack); action.ShouldNotThrow("there is no more item to release"); }
public void GivenEquipmentOnPosition1_WhenItemPassed_ShouldCallCustomAction() { var item = new SimulatedItem { ItemId = 1 }; _testee.AddItem(item); bool customActionWasCalled = false; var customActionEquipment = new CustomActionEquipment(); customActionEquipment.Initialize(1, i => { customActionWasCalled = true; }); _testee.AddEquipment(customActionEquipment); customActionWasCalled.Should().BeFalse("item is still on position 0"); _testee.Takt(); customActionWasCalled.Should().BeTrue("item just passed equipment on position 1"); }