using System; using Modbus.Device; using static System.Console; namespace ProtosXdigitalDemo { internal class RegisterReader { private readonly ModbusIpMaster _master; public RegisterReader(ModbusIpMaster master) { _master = master; } public void ReadAll() { WriteLine("Reading all input registers…"); try { // Read all input registers as ushorts ushort[] registers = _master.ReadInputRegisters(0, ChannelCache.AnalogInputCount); Display(registers); // Convert to bool[] and display bool[] bits = ConvertRegistersToBools(registers); Display(bits); } catch (Exception ex) { WriteLine($"[Error] Reading input registers failed → {ex.Message}"); PromptKey("Press any key to continue…"); } } private void Display(ushort[] registers) { WriteLine("Input Registers (ushort):"); for (int i = 0; i < registers.Length; i++) { WriteLine($" Register #{i + 1}: {registers[i]}"); } } private void Display(bool[] bits) { WriteLine("Flattened Bits:"); for (int i = 0; i < bits.Length; i++) { WriteLine($" Bit #{i + 1}: {(bits[i] ? "On" : "Off")}"); } } // Map a ushort's bits to bools using AND operator private bool[] ConvertRegistersToBools(ushort[] registers) { return registers.SelectMany(r => Enumerable.Range(0, 16) .Select(bit => ((r >> bit) & 1) == 1)) .ToArray(); } private void PromptKey(string prompt) { WriteLine(prompt); ReadKey(intercept: true); } } }