Beispiel #1
0
        public override void RobotInit()
        {
            absoluteTach   = new Tachometer(di);
            quadratureTach = new Tachometer(quadDI);
            quadratureTach.EdgesPerRevolution = 2048;
            quadratureCounter                     = new UpDownCounter();
            quadratureCounter.UpSource            = quadDI;
            quadratureCounter.UpEdgeConfiguration = EdgeConfiguration.kRisingEdge;

            externalDirectionCounter = new ExternalDirectionCounter(quadDI, quadDIB);

            externalDirectionCounter2x = new ExternalDirectionCounter(quadDI, quadDIB);
            externalDirectionCounter2x.EdgeConfiguration = EdgeConfiguration.kBothEdges;
            externalDirectionCounter2x.ReverseDirection  = true;

            DigitalGlitchFilter filter = new DigitalGlitchFilter();

            filter.SetPeriod(TimeSpan.FromSeconds(1));
            //filter.Add(di);

            interrupt = new AsynchronousInterrupt(di, (r, f) =>
            {
                Console.WriteLine("Interrupt Occured " + count);
                count++;
                //Thread.Sleep(20);
            });

            interrupt.SetInterruptEdges(true, false);

            interrupt.Enable();
        }
        public void TestGlitchFilterOverCreation()
        {
            List<FilterList> inputs = new List<FilterList>();

            try
            {


                for (int i = 0; i < 3; i++)
                {
                    DigitalInput input = new DigitalInput(i);
                    DigitalGlitchFilter filter = new DigitalGlitchFilter();
                    filter.Add(input);

                    FilterList list = new FilterList
                    {
                        input = input,
                        filter = filter,
                        index = i
                    };

                    inputs.Add(list);

                    Assert.That(SimData.DIO[i].FilterIndex, Is.EqualTo(i));
                }

                Assert.Throws<AllocationException>(() =>
                {
                    DigitalGlitchFilter filter = new DigitalGlitchFilter();
                });

            }
            finally
            {
                foreach (var filterList in inputs)
                {
                    filterList.filter.Remove(filterList.input);
                    filterList.filter.Dispose();
                    filterList.input.Dispose();

                    Assert.That(SimData.DIO[filterList.index].FilterIndex, Is.EqualTo(-1));
                }
            }
        }