public void MasterShouldReadCoilsFromSlave() { var clientMemory = new ModbusMemoryMap(); var client = new ModbusClient(new ModbusRTUTransport(_clientStream)); var clientDevice = new ModbusDevice(clientMemory, 4); var serverMemory = new ModbusMemoryMap(); var server = new ModbusServer(new ModbusRTUTransport(_serverStream)); var serverDevice = new ModbusDevice(serverMemory, 4); serverMemory.OutputCoils[10] = true; serverMemory.OutputCoils[15] = true; clientMemory.OutputCoils[10].ShouldBeFalse(); clientMemory.OutputCoils[15].ShouldBeFalse(); Task.Run(() => server.HandleRequest(serverDevice)); client.ReadCoils(clientDevice, 10, 13); //slave memory not touched serverMemory.OutputCoils[10].ShouldBeTrue(); serverMemory.OutputCoils[15].ShouldBeTrue(); //master memory is synched clientMemory.OutputCoils[10].ShouldBeTrue(); clientMemory.OutputCoils[15].ShouldBeTrue(); }
private static async void RunAsTcpMaster(MasterOptions options, CancellationToken cancellationToken) { var memoryMap = new ModbusMemoryMap(); using var tcpClient = new TcpClient(); await tcpClient.ConnectAsync(options.Host, options.Port); var master = new ModbusTCPMaster(memoryMap, tcpClient.GetStream(), options.DeviceId); while (!cancellationToken.IsCancellationRequested) { if (options.CoilsCount > 0) { } } }
private static async Task ConnecionLoop(NetworkStream connectedStream, Options options, IConsole diWindow, IConsole doWindow, IConsole inputRegistersWindow, IConsole holdingRegistersWindow) { var masterMemory = new ModbusMemoryMap(); var client = new ModbusClient(new ModbusTCPTransport(connectedStream)); var device = new ModbusDevice(masterMemory, options.SlaveId); while (!Console.KeyAvailable) { if (options.InputCount > 0) { await client.ReadDiscreteInputsAsync(device, options.InputAddress, options.InputCount, CancellationToken.None); diWindow.PrintAt(0, 0, masterMemory.InputCoils.ToString(options.InputAddress, options.InputCount)); } if (options.CoilsCount > 0) { await client.ReadCoilsAsync(device, options.CoilsAddress, options.CoilsCount, CancellationToken.None); doWindow.PrintAt(0, 0, masterMemory.OutputCoils.ToString(options.CoilsAddress, options.CoilsCount)); } if (options.RegisterCount > 0) { await client.ReadInputRegistersAsync(device, options.RegisterAddress, options.RegisterCount, CancellationToken.None); inputRegistersWindow.PrintAt(0, 0, masterMemory.InputRegisters.ToString(options.RegisterAddress, options.RegisterCount)); } if (options.HoldingRegisterCount > 0) { await client.ReadHoldingRegistersAsync(device, options.HoldingRegisterAddress, options.HoldingRegisterCount, CancellationToken.None); holdingRegistersWindow.PrintAt(0, 0, masterMemory.OutputRegisters.ToString(options.HoldingRegisterAddress, options.HoldingRegisterCount)); } await Task.Delay(options.ScanRate); } }