Exemplo n.º 1
0
        public void TcpTest()
        {
            var model    = new ModbusModel();
            var protocol = new ModbusTCPProtocol();
            var stream   = new StreamModel(model, new ModbusTCPScanner());
            var master   = new ModbusMaster(stream, protocol);

            Assert.AreEqual(0, protocol.TransactionId);
            master.WriteCoil(0, 0, false);
            Assert.AreEqual(1, protocol.TransactionId);
            H.SharedSlaveTest(model, master);
        }
        void ButtonOpenSocketClick(object sender, EventArgs e)
        {
            var host = textBoxTcpIP.Text;
            var port = (int)numericUpDownTcpPort.Value;

            EnableControls(false);
            ior.Run(() => {
                //standalone app maybe closed anytime so default timeout
                var socket   = Sockets.ConnectWithTimeout(host, port, 400);
                var stream   = new ModbusSocketStream(socket, 400, IoLog);
                var protocol = new ModbusTCPProtocol();
                IoSetMaster(new ModbusMaster(stream, protocol));
                uir.Run(() => Log("success", "Socket {0}:{1} open", host, port));
            });
        }
Exemplo n.º 3
0
        public void DefaultTest()
        {
            var socket   = Tools.ConnectWithTimeout("127.0.0.1", 9005, 400);
            var stream   = new ModbusSocketStream(socket, 400, StreamLog);
            var protocol = new ModbusTCPProtocol();

            protocol.TransactionId = 0xFA;
            using (var master = new ModbusMaster(stream, protocol))
            {
                var count = 10;
                while (--count > 0)
                {
                    master.ReadCoil(1, 4096);
                }
            }
        }
Exemplo n.º 4
0
        public void TransactionIdWrapTest()
        {
            var model    = new ModbusModel();
            var protocol = new ModbusTCPProtocol();
            var stream   = new StreamModel(model, new ModbusTCPScanner());
            var master   = new ModbusMaster(stream, protocol);

            Assert.AreEqual(0, protocol.TransactionId);
            master.WriteCoil(0, 0, false);
            Assert.AreEqual(1, protocol.TransactionId);
            //ensure TransactionId wraps around 0xFFFF
            protocol.TransactionId = 0xFFFF;
            master.WriteCoil(0, 0, false);
            Assert.AreEqual(0, protocol.TransactionId);
            master.WriteCoil(0, 0, false);
            Assert.AreEqual(1, protocol.TransactionId);
        }
Exemplo n.º 5
0
        public void RackSweepTest()
        {
            //http://www.opto22.com/documents/1678_Modbus_TCP_Protocol_Guide.pdf
            // required otg included in SharpOpto22
            // m0.0 = 24V
            // m0.1 = 0V
            // m0.2 = m1.2
            // m0.3 = m1.3
            // m2.1 = m3.1
            // m2.2 = m3.2
            var socket   = new TcpClient("10.77.0.2", 502);
            var stream   = new ModbusSocketStream(socket, 400);
            var protocol = new ModbusTCPProtocol();
            var master   = new ModbusMaster(stream, protocol);

            master.WriteCoils(1, 4, Bools(4, false));             //clear module
            Thread.Sleep(50);
            master.WriteCoils(1, 64, Bools(4, true));             //clear on latches
            master.WriteCoils(1, 128, Bools(4, true));            //clear off latches

            Assert.AreEqual(true, master.ReadCoil(1, 0));
            Assert.AreEqual(false, master.ReadCoil(1, 1));
            Assert.AreEqual(false, master.ReadCoil(1, 2));
            Assert.AreEqual(false, master.ReadCoil(1, 3));

            master.WriteCoil(1, 6, false);
            master.WriteCoil(1, 7, false);
            Thread.Sleep(50);
            Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 64 + 2, 2));
            Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2));
            Assert.AreEqual(new bool[] { false, false }, master.ReadCoils(1, 6, 2));
            Assert.AreEqual(new bool[] { true, false, false, false }, master.ReadCoils(1, 0, 4));

            master.WriteCoil(1, 6, true);
            master.WriteCoil(1, 7, false);
            Thread.Sleep(50);
            Assert.AreEqual(true, master.ReadCoil(1, 0));
            Assert.AreEqual(false, master.ReadCoil(1, 1));
            Assert.AreEqual(true, master.ReadCoil(1, 2));
            Assert.AreEqual(false, master.ReadCoil(1, 3));
            Assert.AreEqual(new bool[] { true, false }, master.ReadInputs(1, 64 + 2, 2));
            Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2));
            Assert.AreEqual(new bool[] { true, false }, master.ReadCoils(1, 6, 2));
            Assert.AreEqual(new bool[] { true, false, true, false }, master.ReadCoils(1, 0, 4));

            master.WriteCoil(1, 6, false);
            master.WriteCoil(1, 7, true);
            Thread.Sleep(50);
            Assert.AreEqual(true, master.ReadCoil(1, 0));
            Assert.AreEqual(false, master.ReadCoil(1, 1));
            Assert.AreEqual(false, master.ReadCoil(1, 2));
            Assert.AreEqual(true, master.ReadCoil(1, 3));
            Assert.AreEqual(new bool[] { true, true }, master.ReadInputs(1, 64 + 2, 2));
            Assert.AreEqual(new bool[] { true, false }, master.ReadInputs(1, 128 + 2, 2));
            Assert.AreEqual(new bool[] { false, true }, master.ReadCoils(1, 6, 2));
            Assert.AreEqual(new bool[] { true, false, false, true }, master.ReadCoils(1, 0, 4));

            master.WriteCoils(1, 64, Bools(4, true));             //clear on latches
            master.WriteCoils(1, 128, Bools(4, true));            //clear off latches
            Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 64 + 2, 2));
            Assert.AreEqual(new bool[] { false, false }, master.ReadInputs(1, 128 + 2, 2));


            //analog
            SetAnalog(master, 12, 0);
            SetAnalog(master, 13, 0);
            Assert.AreEqual(0, GetAnalog(master, 12));
            Assert.AreEqual(0, GetAnalog(master, 13));
            Thread.Sleep(50);
            Assert.That(0f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1));
            Assert.That(0f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1));

            SetAnalog(master, 12, 5);
            SetAnalog(master, 13, 10);
            Assert.AreEqual(5, GetAnalog(master, 12));
            Assert.AreEqual(10, GetAnalog(master, 13));
            Thread.Sleep(50);
            Assert.That(5f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1));
            Assert.That(10f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1));

            SetAnalog2(master, 12, -5);
            SetAnalog2(master, 13, -10);
            Assert.AreEqual(-5, GetAnalog(master, 12));
            Assert.AreEqual(-10, GetAnalog(master, 13));
            Thread.Sleep(50);
            Assert.That(-5f, Is.EqualTo(GetAnalog2(master, 8)).Within(0.1));
            Assert.That(-10f, Is.EqualTo(GetAnalog2(master, 9)).Within(0.1));
        }