Exemplo n.º 1
0
        public void RtuOverSocketTest()
        {
            var model   = new ModbusModel();
            var scanner = new ModbusRTUScanner();

            using (var server = new TcpServerModel(model, scanner))
                using (var client = new TcpClient())
                {
                    client.Connect(IPAddress.Loopback, server.Port);
                    var stream = new ModbusSocketStream(client, 400);
                    var master = new ModbusMaster(stream, new ModbusRTUProtocol());
                    //race condition avoided by access order
                    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 RtuExceptionOverSocketTest()
        {
            var model   = new ModbusModel();
            var scanner = new ModbusRTUScanner();

            using (var server = new TcpServerModel(model, scanner))
                using (var client = new TcpClient())
                {
                    client.Connect(IPAddress.Loopback, server.Port);
                    var stream = new ModbusSocketStream(client, 400);
                    var master = new ModbusMaster(stream, new ModbusRTUProtocol());
                    var ex     = Assert.Throws <ModbusException>(() => H.SharedExceptionTest(master));
                    Assert.AreEqual("Modbus exception 2", ex.Message);
                    Assert.AreEqual(2, ex.Code);
                }
        }
Exemplo n.º 4
0
 public void OpenSocket(string host, int port)
 {
     Io(() => {
         if (uir == null)
         {
             return;              //disposed
         }
         var socket = Sockets.ConnectWithTimeout(host, port, Config.FixedConnect());
         var stream = new ModbusSocketStream(socket, Config.FixedTimeout(), StreamLog);
         master     = new ModbusMaster(stream, SocketProtocol());
         start      = DateTime.Now;
         last       = DateTime.Now;
         Log("success", "Socket {0}:{1} open", host, port);
         Ui(() => { connected(true, false); });
     });
 }
Exemplo n.º 5
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.º 6
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));
        }