示例#1
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);
            }
        }