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);
            };
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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");
        }
Esempio n. 6
0
        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");
        }
Esempio n. 7
0
        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");
        }
Esempio n. 8
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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");
        }
Esempio n. 12
0
        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");
        }
Esempio n. 13
0
        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");
        }
Esempio n. 15
0
        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");
        }
Esempio n. 16
0
        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");
        }