Esempio n. 1
0
        internal static void WriteDataTable(LadderDataTable dataTable, XmlWriter writer)
        {
            Trace.WriteLine("Data Table Started", "DiagramWriter");
            Trace.Indent();
            writer.WriteStartElement("DataTable");
            writer.WriteStartAttribute("Count");
            writer.WriteValue(dataTable.Count);
            writer.WriteEndAttribute();

            #region Variable Loop
            //Write every variable in table to file.
            //Tag name is the variable type without the "System." prefix
            foreach (var variable in dataTable.ListAllData())
            {
                string type = variable.Item2.ToString().Replace("System.", string.Empty);

                writer.WriteStartElement(type);

                writer.WriteStartAttribute("Name");
                writer.WriteValue(variable.Item1);
                writer.WriteEndAttribute();

                //So far not needed
                //writer.WriteStartAttribute("Class");
                //writer.WriteValue(variable.Item3.ToString());
                //writer.WriteEndAttribute();

                if (variable.Item3 != LDVarClass.OutFunction && variable.Item3 != LDVarClass.OutFunction)
                {
                    writer.WriteStartAttribute("Value");
                    writer.WriteValue(variable.Item4);
                    writer.WriteEndAttribute();
                }
                else
                {
                    writer.WriteString((string)variable.Item4);
                }

                writer.WriteEndElement();

                Trace.WriteLine("Written: " + type + ", Name=" + variable.Item1 + ", Value=" + variable.Item4, "DataTable");
            }
            #endregion Variable Loop

            writer.WriteEndElement();//Data table end
            Trace.Unindent();
            Trace.WriteLine("Data Table Ended", "DiagramWriter");
        }
Esempio n. 2
0
        public void Analog()
        {
            #region Startup
            var  TestTable = new LadderDataTable();
            Node PowerRail = new Node();
            PowerRail.LogicLevel = false;

            PWM pwm = new PWM("1", PowerRail);
            pwm.DataTable = TestTable;
            ADC adc = new ADC("1", PowerRail);
            adc.DataTable = TestTable;
            #endregion Startup

            #region PWM
            pwm.DudyCycle = "255";
            pwm.Execute();
            Assert.IsFalse(pwm.InternalState);

            PowerRail.LogicLevel = true;
            pwm.Execute();
            Assert.IsTrue(pwm.InternalState);

            PowerRail.LogicLevel = false;
            pwm.DudyCycle        = "DudyCycle";
            pwm.DudyCycleValue   = (byte)128;
            pwm.Execute();
            Assert.IsFalse(pwm.InternalState);

            PowerRail.LogicLevel = true;
            pwm.Execute();
            Assert.IsTrue(pwm.InternalState);
            #endregion PWM

            #region ADC
            PowerRail.LogicLevel = false;
            adc.Execute();
            Assert.IsFalse(adc.InternalState);
            adc.InputValue = (short)1023;
            adc.Execute();
            Assert.IsFalse(adc.InternalState);

            PowerRail.LogicLevel = true;
            adc.Execute();
            Assert.IsTrue(adc.InternalState);
            #endregion ADC
        }
Esempio n. 3
0
        public void BasicTests()
        {
            LadderDataTable TestTable = new LadderDataTable();

            TestTable.Add("Var1", typeof(int));
            TestTable.Add("Var1", typeof(int), LDVarClass.Data, 10);
            TestTable.Add("Var2", typeof(bool));
            TestTable.Add("Var3", typeof(byte));
            TestTable.Add("Var4", typeof(short));
            TestTable.Add("Var5", typeof(int));

            Assert.AreEqual(5, TestTable.Count, "Stored Variable number incorrect");

            TestTable.Rename("Var1", "Var6");
            TestTable.Rename("Var6", "Var5");
            TestTable.Remove("Var1");

            TestTable.SetValue(0, true);
            TestTable.SetValue("Var3", (byte)255);
            TestTable.SetValue(TestTable.GetIndexOf("Var4"), (short)777);

            Assert.AreEqual(4, TestTable.Count, "Stored Variable number incorrect");
        }
Esempio n. 4
0
        /// <summary>
        /// Generate code from data table variables
        /// </summary>
        /// <param name="table"></param>
        /// <param name="codeBuffer"></param>
        internal static void CompileDataTable(LadderDataTable table, CompilerBuffer codeBuffer)
        {
            List <Tuple <string, Type, LDVarClass, object> > tuples = table.ListAllData().OrderBy(x => x.Item1).ToList();

            codeBuffer.Globals.Add("//Inputs");
            StringBuilder inputList = new StringBuilder();

            foreach (var tuple in tuples.Where(x => x.Item3 == LDVarClass.Input))
            {
                codeBuffer.Globals.Add("boolean " + tuple.Item1 + ";");
            }

            codeBuffer.Globals.Add(string.Empty);
            codeBuffer.Globals.Add("//Outputs");
            foreach (var tuple in tuples.Where(x => x.Item3 == LDVarClass.Output))
            {
                codeBuffer.Globals.Add("boolean " + tuple.Item1 + ";");
            }

            codeBuffer.Globals.Add(string.Empty);
            codeBuffer.Globals.Add("//Data");
            foreach (var tuple in tuples.Where(x => x.Item3 == LDVarClass.Data))
            {
                switch (tuple.Item2.ToString().Replace("System.", string.Empty))
                {
                case "Boolean":
                    codeBuffer.Globals.Add("boolean " + tuple.Item1 + " = " + (((bool)tuple.Item4) ? "true;" : "false;"));
                    break;

                case "Int16":
                    codeBuffer.Globals.Add("int " + tuple.Item1 + " = " + tuple.Item4.ToString() + ";");
                    break;

                case "Byte":
                    codeBuffer.Globals.Add("byte " + tuple.Item1 + " = " + tuple.Item4.ToString() + ";");
                    break;

                default:
                    throw new FormatException("Unrecognized variable type in data table");
                }
            }


            foreach (var tuple in tuples.Where(x => x.Item3 == LDVarClass.InFunction))
            {
                List <string> buffer = new List <string>();
                buffer.Add("boolean " + tuple.Item1 + "(boolean input)");
                buffer.Add("{");
                foreach (string line in tuple.Item4.ToString().Split('\n'))
                {
                    buffer.Add(INDENT + line);
                }
                buffer.Add("}");
                codeBuffer.Functions.Add(buffer);
            }

            foreach (var tuple in tuples.Where(x => x.Item3 == LDVarClass.OutFunction))
            {
                List <string> buffer = new List <string>();
                buffer.Add("void " + tuple.Item1 + "()");
                buffer.Add("{");
                foreach (string line in tuple.Item4.ToString().Split('\n'))
                {
                    buffer.Add(INDENT + line);
                }
                buffer.Add("}");
                codeBuffer.Functions.Add(buffer);
            }
        }
Esempio n. 5
0
        public void WrongArgsTests()
        {
            LadderDataTable TestTable = new LadderDataTable();

            TestTable.Add("Var1", typeof(int));

            try
            {
                TestTable.Add("", typeof(int));
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
            }

            try
            {
                TestTable.Add("Var2", null);
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "type");
            }

            try
            {
                TestTable.Add("", typeof(int), LDVarClass.Data, 10);
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
            }

            try
            {
                TestTable.Add("Var2", null, LDVarClass.Data, 10);
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "type");
            }

            try
            {
                TestTable.Remove("");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
            }

            try
            {
                TestTable.Remove("Var3");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
            }

            try
            {
                TestTable.Rename("", "Var4");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "oldName");
            }

            try
            {
                TestTable.Rename("Var3", "");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Equals(ex.ParamName, "newName");
            }

            try
            {
                TestTable.Rename("Var3", "Var4");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.Message, "Variable not found");
                StringAssert.Equals(ex.ParamName, "oldName");
            }

            try
            {
                TestTable.GetIndexOf("Var3");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.Message, "Variable not found");
                StringAssert.Equals(ex.ParamName, "name");
            }

            try
            {
                TestTable.GetValue("Var3");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.Message, "Variable not found");
                StringAssert.Equals(ex.ParamName, "name");
            }
        }
Esempio n. 6
0
        public void IndexOfRangeTest()
        {
            LadderDataTable TestTable = new LadderDataTable();

            TestTable.GetValue(1);
        }
Esempio n. 7
0
        public void TypeSafetyTests()
        {
            LadderDataTable TestTable = new LadderDataTable();

            TestTable.Add("Var1", typeof(int));
            TestTable.Add("Var2", typeof(bool));

            try
            {
                TestTable.Add("Var1", typeof(bool));
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
                Assert.IsInstanceOfType(ex.InnerException, typeof(FormatException));
            }

            try
            {
                TestTable.Add("Var1", typeof(bool), LDVarClass.Data, false);
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.ParamName, "name");
                Assert.IsInstanceOfType(ex.InnerException, typeof(FormatException));
            }

            try
            {
                TestTable.Add("Var3", typeof(int), LDVarClass.Data, null);
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentNullException ex)
            {
                StringAssert.Contains(ex.Message, "non-nullable");
                StringAssert.Equals(ex.ParamName, "value");
            }

            try
            {
                TestTable.Rename("Var2", "Var1");
                throw new AssertFailedException("Exception expected");
            }
            catch (ArgumentException ex)
            {
                StringAssert.Equals(ex.ParamName, "newName");
                Assert.IsInstanceOfType(ex.InnerException, typeof(FormatException));
            }

            try
            {
                TestTable.SetValue("Var1", "Var1");
                throw new AssertFailedException("Exception expected");
            }
            catch (FormatException ex)
            {
                StringAssert.Equals(ex.Message, "Value Type Mismatch");
            }

            try
            {
                TestTable.SetValue(0, "Var1");
                throw new AssertFailedException("Exception expected");
            }
            catch (FormatException ex)
            {
                StringAssert.Equals(ex.Message, "Value Type Mismatch");
            }
        }
Esempio n. 8
0
        public void Constants()
        {
            var  TestTable = new LadderDataTable();
            Node PowerRail = new Node();

            PowerRail.LogicLevel = true;

            Trace.WriteLine("Math", "Unit Test");
            Trace.Indent();
            Trace.WriteLine("StartUP", "ADD");
            Trace.Indent();
            ADD add = new ADD();

            add.DataTable   = TestTable;
            add.LeftLide    = PowerRail;
            add.Destination = "Dest";
            add.VarA        = "1";
            add.ValueA      = 3;
            add.VarB        = "2";
            add.ValueB      = 1;
            add.Execute();
            Trace.Unindent();

            Trace.WriteLine("StartUP", "MOV");
            Trace.Indent();
            MOV mov = new MOV();

            mov.DataTable   = TestTable;
            mov.LeftLide    = PowerRail;
            mov.Destination = "Dest";
            mov.VarA        = "0";
            mov.ValueA      = 1;
            mov.Execute();
            Trace.Unindent();
            Trace.Unindent();

            Trace.WriteLine("Counter", "Unit Test");
            Trace.Indent();
            Trace.WriteLine("StartUP", "CTC");
            Trace.Indent();
            CTC ctc = new CTC();

            ctc.DataTable  = TestTable;
            ctc.Name       = "1";
            ctc.Limit      = "2";
            ctc.LimitValue = 3;
            ctc.LeftLide   = PowerRail;
            ctc.Execute();
            Trace.Unindent();

            Trace.WriteLine("StartUP", "CTU");
            Trace.Indent();
            CTU ctu = new CTU();

            ctu.DataTable  = TestTable;
            ctu.Name       = "1";
            ctu.Limit      = "3";
            ctu.LimitValue = 4;
            ctu.LeftLide   = PowerRail;
            ctu.Execute();
            Trace.Unindent();
            Trace.Unindent();

            Trace.WriteLine("Compare", "Unit Test");
            Trace.Indent();
            EQU equ = new EQU();

            equ.DataTable = TestTable;
            equ.LeftLide  = PowerRail;
            equ.VarA      = "3";
            equ.ValueA    = 4;
            equ.VarB      = "4";
            equ.ValueB    = 5;
            equ.Execute();
            Trace.Unindent();

            Assert.AreEqual(2, TestTable.Count);
        }
Esempio n. 9
0
        public void Math()
        {
            #region Startup
            var  TestTable = new LadderDataTable();
            Node PowerRail = new Node();

            ADD add = new ADD();
            add.LeftLide    = PowerRail;
            add.Destination = "Dest";
            add.VarA        = "VarA";
            add.VarB        = "VarB";
            add.DataTable   = TestTable;

            DIV div = new DIV();
            div.LeftLide    = PowerRail;
            div.Destination = "Dest";
            div.VarA        = "VarA";
            div.VarB        = "VarB";
            div.DataTable   = TestTable;

            MOV mov = new MOV();
            mov.LeftLide    = PowerRail;
            mov.Destination = "Dest";
            mov.VarA        = "VarA";
            mov.DataTable   = TestTable;

            MUL mul = new MUL();
            mul.LeftLide    = PowerRail;
            mul.Destination = "Dest";
            mul.VarA        = "VarA";
            mul.VarB        = "VarB";
            mul.DataTable   = TestTable;

            SUB sub = new SUB();
            sub.LeftLide    = PowerRail;
            sub.Destination = "Dest";
            sub.VarA        = "VarA";
            sub.VarB        = "VarB";
            sub.DataTable   = TestTable;
            #endregion Startup

            #region ADD
            Trace.WriteLine("ADD", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "ADD");
            Trace.Indent();
            TestTable.SetValue("Dest", (short)0);
            add.ValueA = 1;
            add.ValueB = 2;
            Trace.Unindent();

            Trace.WriteLine("Input False", "ADD");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            add.Execute();
            Assert.IsFalse(add.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)0);
            Trace.Unindent();

            Trace.WriteLine("Input True", "ADD");
            Trace.Indent();

            PowerRail.LogicLevel = true;
            add.Execute();
            Assert.IsTrue(add.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)3);

            Trace.Unindent();
            Trace.Unindent();
            #endregion ADD

            #region DIV
            Trace.WriteLine("DIV", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "DIV");
            Trace.Indent();
            TestTable.SetValue("Dest", (short)0);
            div.ValueA = 10;
            div.ValueB = 2;
            Trace.Unindent();

            Trace.WriteLine("Input False", "DIV");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            div.Execute();
            Assert.IsFalse(div.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)0);
            Trace.Unindent();

            Trace.WriteLine("Input True", "DIV");
            Trace.Indent();

            PowerRail.LogicLevel = true;
            div.Execute();
            Assert.IsTrue(div.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)5);

            Trace.Unindent();
            Trace.Unindent();
            #endregion DIV

            #region MOV
            Trace.WriteLine("MOV", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "MOV");
            Trace.Indent();
            TestTable.SetValue("Dest", (short)0);
            mov.ValueA = 10;
            Trace.Unindent();

            Trace.WriteLine("Input False", "MOV");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            mov.Execute();
            Assert.IsFalse(mov.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)0);
            Trace.Unindent();

            Trace.WriteLine("Input True", "MOV");
            Trace.Indent();

            PowerRail.LogicLevel = true;
            mov.Execute();
            Assert.IsTrue(mov.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)10);

            Trace.Unindent();
            Trace.Unindent();
            #endregion MOV

            #region MUL
            Trace.WriteLine("MUL", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "MUL");
            Trace.Indent();
            TestTable.SetValue("Dest", (short)0);
            mul.ValueA = 3;
            mul.ValueB = 6;
            Trace.Unindent();

            Trace.WriteLine("Input False", "MUL");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            mul.Execute();
            Assert.IsFalse(mul.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)0);
            Trace.Unindent();

            Trace.WriteLine("Input True", "MUL");
            Trace.Indent();

            PowerRail.LogicLevel = true;
            mul.Execute();
            Assert.IsTrue(mul.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)18);

            Trace.Unindent();
            Trace.Unindent();
            #endregion MUL

            #region SUB
            Trace.WriteLine("SUB", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "SUB");
            Trace.Indent();
            TestTable.SetValue("Dest", (short)0);
            sub.ValueA = 4;
            sub.ValueB = 6;
            Trace.Unindent();

            Trace.WriteLine("Input False", "SUB");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            sub.Execute();
            Assert.IsFalse(sub.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)0);
            Trace.Unindent();

            Trace.WriteLine("Input True", "SUB");
            Trace.Indent();

            PowerRail.LogicLevel = true;
            sub.Execute();
            Assert.IsTrue(sub.InternalState);
            Assert.AreEqual(TestTable.GetValue("Dest"), (short)-2);

            Trace.Unindent();
            Trace.Unindent();
            #endregion SUB
        }
Esempio n. 10
0
        public void Counter()
        {
            #region Startup
            var  TestTable = new LadderDataTable();
            Node PowerRail = new Node();

            CTC ctc = new CTC();
            ctc.Name      = "1";
            ctc.Limit     = "Limit";
            ctc.LeftLide  = PowerRail;
            ctc.DataTable = TestTable;

            CTD ctd = new CTD();
            ctd.Name      = "1";
            ctd.Limit     = "Limit";
            ctd.LeftLide  = PowerRail;
            ctd.DataTable = TestTable;

            CTU ctu = new CTU();
            ctu.Name      = "1";
            ctu.Limit     = "Limit";
            ctu.LeftLide  = PowerRail;
            ctu.DataTable = TestTable;

            RES res = new RES();
            res.Name      = "1";
            res.LeftLide  = PowerRail;
            res.DataTable = TestTable;
            #endregion Startup

            #region CTC
            Trace.WriteLine("CTC", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "CTC");
            Trace.Indent();
            PowerRail.LogicLevel = true;
            ctc.CurrentValue     = 1;
            ctc.LimitValue       = 2;
            res.Execute();
            Trace.Unindent();

            Trace.WriteLine("Input False", "CTC");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            ctc.Execute();
            ctc.Execute();
            ctc.Execute();
            Assert.IsFalse(ctc.InternalState);
            Trace.Unindent();

            Trace.WriteLine("Input True", "CTC");
            Trace.Indent();

            PowerRail.LogicLevel = false;
            ctc.Execute();
            PowerRail.LogicLevel = true;
            ctc.Execute();
            Assert.IsFalse(ctc.InternalState, "Fail First Cycle");

            PowerRail.LogicLevel = false;
            ctc.Execute();
            PowerRail.LogicLevel = true;
            ctc.Execute();
            Assert.IsTrue(ctc.InternalState, "Fail Second Cycle");

            PowerRail.LogicLevel = false;
            ctc.Execute();
            PowerRail.LogicLevel = true;
            ctc.Execute();
            Assert.IsFalse(ctc.InternalState, "Fail Third Cycle");

            PowerRail.LogicLevel = false;
            ctc.Execute();
            PowerRail.LogicLevel = true;
            ctc.Execute();
            Assert.IsFalse(ctc.InternalState, "Fail Fourth Cycle");

            Trace.Unindent();
            Trace.Unindent();
            #endregion CTC

            #region CTD
            Trace.WriteLine("CTD", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "CTD");
            Trace.Indent();
            PowerRail.LogicLevel = true;
            ctc.CurrentValue     = 3;
            ctc.LimitValue       = 1;
            Trace.Unindent();

            Trace.WriteLine("Input False", "CTD");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            ctd.Execute();
            ctd.Execute();
            ctd.Execute();
            Assert.IsFalse(ctc.InternalState);
            Trace.Unindent();

            Trace.WriteLine("Input True", "CTD");
            Trace.Indent();

            PowerRail.LogicLevel = false;
            ctd.Execute();
            PowerRail.LogicLevel = true;
            ctd.Execute();
            Assert.IsTrue(ctd.InternalState, "Fail First Cycle");

            PowerRail.LogicLevel = false;
            ctd.Execute();
            PowerRail.LogicLevel = true;
            ctd.Execute();
            Assert.IsTrue(ctd.InternalState, "Fail Second Cycle");

            PowerRail.LogicLevel = false;
            ctd.Execute();
            PowerRail.LogicLevel = true;
            ctd.Execute();
            Assert.IsFalse(ctd.InternalState, "Fail Third Cycle");

            PowerRail.LogicLevel = false;
            ctd.Execute();
            PowerRail.LogicLevel = true;
            ctd.Execute();
            Assert.IsFalse(ctd.InternalState, "Fail Fourth Cycle");

            Trace.Unindent();
            Trace.Unindent();
            #endregion CTD

            #region CTU
            Trace.WriteLine("CTU", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("StartUP", "CTU");
            Trace.Indent();
            PowerRail.LogicLevel = true;
            ctu.CurrentValue     = 1;
            ctu.LimitValue       = 3;
            res.Execute();
            Trace.Unindent();

            Trace.WriteLine("Input False", "CTU");
            Trace.Indent();
            PowerRail.LogicLevel = false;
            ctu.Execute();
            ctu.Execute();
            ctu.Execute();
            Assert.IsFalse(ctu.InternalState);
            Trace.Unindent();

            Trace.WriteLine("Input True", "CTU");
            Trace.Indent();

            PowerRail.LogicLevel = false;
            ctu.Execute();
            PowerRail.LogicLevel = true;
            ctu.Execute();
            Assert.IsFalse(ctu.InternalState, "Fail First Cycle");

            PowerRail.LogicLevel = false;
            ctu.Execute();
            PowerRail.LogicLevel = true;
            ctu.Execute();
            Assert.IsFalse(ctu.InternalState, "Fail Second Cycle");

            PowerRail.LogicLevel = false;
            ctu.Execute();
            PowerRail.LogicLevel = true;
            ctu.Execute();
            Assert.IsTrue(ctu.InternalState, "Fail Third Cycle");

            PowerRail.LogicLevel = false;
            ctu.Execute();
            Assert.IsFalse(ctu.InternalState, "Fail Fourth Cycle");
            PowerRail.LogicLevel = true;
            ctu.Execute();
            Assert.IsTrue(ctu.InternalState, "Fail Fourth Cycle");

            Trace.Unindent();
            Trace.Unindent();
            #endregion CTU
        }
Esempio n. 11
0
        public void Compare()
        {
            #region Startup
            var  TestTable = new LadderDataTable();
            Node PowerRail = new Node();

            EQU equ = new EQU();
            equ.LeftLide  = PowerRail;
            equ.VarA      = "VarA";
            equ.VarB      = "VarB";
            equ.DataTable = TestTable;

            GEQ geq = new GEQ();
            geq.LeftLide  = PowerRail;
            geq.VarA      = "VarA";
            geq.VarB      = "VarB";
            geq.DataTable = TestTable;

            GRT grt = new GRT();
            grt.LeftLide  = PowerRail;
            grt.VarA      = "VarA";
            grt.VarB      = "VarB";
            grt.DataTable = TestTable;

            LEG leg = new LEG();
            leg.LeftLide  = PowerRail;
            leg.VarA      = "VarA";
            leg.VarB      = "VarB";
            leg.DataTable = TestTable;

            LES les = new LES();
            les.LeftLide  = PowerRail;
            les.VarA      = "VarA";
            les.VarB      = "VarB";
            les.DataTable = TestTable;

            NEQ neq = new NEQ();
            neq.LeftLide  = PowerRail;
            neq.VarA      = "VarA";
            neq.VarB      = "VarB";
            neq.DataTable = TestTable;
            #endregion Startup

            #region EQU
            Trace.WriteLine("EQU", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "EQU");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(equ.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(equ.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(equ.Execute());
            Trace.Unindent();

            Trace.WriteLine("Input True", "EQU");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsTrue(equ.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(equ.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(equ.Execute());
            Trace.Unindent();
            Trace.Unindent();
            #endregion EQU

            #region GEQ
            Trace.WriteLine("GEQ", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "GEQ");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(geq.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(geq.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(geq.Execute());
            Trace.Unindent();

            Trace.WriteLine("Input True", "GEQ");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsTrue(geq.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(geq.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsTrue(geq.Execute());
            Trace.Unindent();
            Trace.Unindent();
            #endregion GEQ

            #region GRT
            Trace.WriteLine("GRT", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "GRT");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            grt.Execute();
            Assert.IsFalse(grt.InternalState);

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            grt.Execute();
            Assert.IsFalse(grt.InternalState);

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            grt.Execute();
            Assert.IsFalse(grt.InternalState);
            Trace.Unindent();

            Trace.WriteLine("Input True", "GRT");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            grt.Execute();
            Assert.IsFalse(grt.InternalState);

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            grt.Execute();
            Assert.IsFalse(grt.InternalState);

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            grt.Execute();
            Assert.IsTrue(grt.InternalState);
            Trace.Unindent();
            Trace.Unindent();
            #endregion GRT

            #region LEG
            Trace.WriteLine("LEG", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "LEG");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            leg.Execute();
            Assert.IsFalse(leg.InternalState);

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            leg.Execute();
            Assert.IsFalse(leg.InternalState);

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            leg.Execute();
            Assert.IsFalse(leg.InternalState);
            Trace.Unindent();

            Trace.WriteLine("Input True", "LEG");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            leg.Execute();
            Assert.IsTrue(leg.InternalState);

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            leg.Execute();
            Assert.IsTrue(leg.InternalState);

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            leg.Execute();
            Assert.IsFalse(leg.InternalState);
            Trace.Unindent();
            Trace.Unindent();
            #endregion LEG

            #region LES
            Trace.WriteLine("LES", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "LES");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(les.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(les.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(les.Execute());
            Trace.Unindent();

            Trace.WriteLine("Input True", "LES");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(les.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsTrue(les.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(les.Execute());
            Trace.Unindent();
            Trace.Unindent();
            #endregion LES

            #region NEQ
            Trace.WriteLine("NEQ", "Unit Test");
            Trace.Indent();

            Trace.WriteLine("Input False", "NEQ");
            Trace.Indent();
            PowerRail.LogicLevel = false;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(neq.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(neq.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsFalse(neq.Execute());
            Trace.Unindent();

            Trace.WriteLine("Input True", "NEQ");
            Trace.Indent();
            PowerRail.LogicLevel = true;

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)1);
            Assert.IsFalse(neq.Execute());

            TestTable.SetValue(0, (short)0);
            TestTable.SetValue(1, (short)1);
            Assert.IsTrue(neq.Execute());

            TestTable.SetValue(0, (short)1);
            TestTable.SetValue(1, (short)0);
            Assert.IsTrue(neq.Execute());
            Trace.Unindent();
            Trace.Unindent();
            #endregion NEQ
        }