Skip to content

Modbus Slave Register Scanner

rquackenbush edited this page May 24, 2017 · 1 revision

Here is a simple command line application that looks at every holding register on a given device.

using System;
using System.Diagnostics;
using System.IO.Ports;
using System.Linq;
using NModbus;
using NModbus.Serial;

namespace ModbusRegisterScanner
{
    class Program
    {
        static void Main(string[] args)
        {
            string serialPortName = SerialPort.GetPortNames().First();

            var modbusFactory = new ModbusFactory();

            using (var serialPort = new SerialPort(serialPortName, 19200, Parity.Even, 8, StopBits.One))
            {
                serialPort.Open();

                using (var adapter = new SerialPortAdapter(serialPort))
                {
                    adapter.ReadTimeout = 500;
                    adapter.WriteTimeout = 500;

                    using (var master = modbusFactory.CreateRtuMaster(adapter))
                    {
                        for (ushort address = 0; address < ushort.MaxValue; address++)
                        {
                            try
                            {
                                master.ReadHoldingRegisters(11, address, 1);

                                Console.WriteLine($"Register found at: {address}");
                            }
                            catch (Exception e)
                            {
                                Debug.WriteLine(e);
                            }
                        }

                    }
                }
            }
        }
    }
}

Clone this wiki locally