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)); }); }
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); } }
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); }); }); }
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); } } }
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)); }