Exemple #1
0
        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();
        }
Exemple #2
0
        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)
                {
                }
            }
        }
Exemple #3
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);
            }
        }