private FunctionServiceResult ProcessWriteRegisters(Sample[] samples)
        {
            // http://www.simplymodbus.ca/FC16.htm

            //Get the raw bytes
            var messageBytes = samples
                .Select(s => s.Value)
                .ToArray();

            var dataAddress = EndianBitConverter.Big.ToUInt16(messageBytes, 2);
            var numberOfRegisters = EndianBitConverter.Big.ToUInt16(messageBytes, 4);

            var bytesToFollow = messageBytes[6];

            if (bytesToFollow != numberOfRegisters*2)
            {
                return
                    new FunctionServiceResult(
                        $"The bytes to follow {bytesToFollow} does not match the number of registers {numberOfRegisters}.");
            }

            var registers = GetRegisters(messageBytes, numberOfRegisters, 7);

            Func<Visual> visualFactory = () =>
            {
                var viewModel = new RegistersViewModel(registers.ToArray(), dataAddress);

                return new RegistersView()
                {
                    DataContext = viewModel
                };
            };

            var summary = $"Write {numberOfRegisters} registers starting at register {dataAddress}";

            return new FunctionServiceResult(summary, visualFactory, PacketType.Request);
        }
        protected FunctionServiceResult ProcessReadRegisters(Sample[] samples, PacketType? packetType)
        {
            //Get the raw bytes
            var messageBytes = samples
                .Select(s => s.Value)
                .ToArray();

            //We'll assume that this is a response
            byte numberOfBytes = messageBytes[2];

            //Get the number of registers
            var numberOfRegisters = numberOfBytes / 2;

            //Get the registers themselves
            var registers = GetRegisters(messageBytes, numberOfRegisters, 3);

            //Create the visual factory
            Func<Visual> visualFactory = () =>
            {
                var viewModel = new RegistersViewModel(registers);

                return new RegistersView()
                {
                    DataContext = viewModel
                };
            };

            var summary = $"{numberOfRegisters} registers.";

            return new FunctionServiceResult(summary, visualFactory, packetType);
        }