{
  "spec_version": 1,
  "slug": "moxa-iologik-e1214",
  "manufacturer": "Moxa",
  "model": "ioLogik E1214",
  "category": "Remote I/O",
  "supplier_url": "https://www.moxa.com/en/products/industrial-edge-connectivity/controllers-and-ios/universal-controllers-and-i-os/iologik-e1200-series/iologik-e1214",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [
    {
      "address": 0,
      "count": 1,
      "name": "Relay output 0",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Relay output 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Relay output 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Relay output 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Relay output 4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Relay output 5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 16,
      "count": 1,
      "name": "Relay pulse output 0",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 17,
      "count": 1,
      "name": "Relay pulse output 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 18,
      "count": 1,
      "name": "Relay pulse output 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 19,
      "count": 1,
      "name": "Relay pulse output 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 20,
      "count": 1,
      "name": "Relay pulse output 4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 21,
      "count": 1,
      "name": "Relay pulse output 5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 256,
      "count": 1,
      "name": "DI counter 0 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 257,
      "count": 1,
      "name": "DI counter 1 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 258,
      "count": 1,
      "name": "DI counter 2 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 259,
      "count": 1,
      "name": "DI counter 3 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 260,
      "count": 1,
      "name": "DI counter 4 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 261,
      "count": 1,
      "name": "DI counter 5 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 272,
      "count": 1,
      "name": "DI counter 0 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 273,
      "count": 1,
      "name": "DI counter 1 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 274,
      "count": 1,
      "name": "DI counter 2 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 275,
      "count": 1,
      "name": "DI counter 3 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 276,
      "count": 1,
      "name": "DI counter 4 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 277,
      "count": 1,
      "name": "DI counter 5 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 288,
      "count": 1,
      "name": "DI counter 0 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 289,
      "count": 1,
      "name": "DI counter 1 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 290,
      "count": 1,
      "name": "DI counter 2 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 291,
      "count": 1,
      "name": "DI counter 3 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 292,
      "count": 1,
      "name": "DI counter 4 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 293,
      "count": 1,
      "name": "DI counter 5 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 4128,
      "count": 1,
      "name": "Relay 0 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4129,
      "count": 1,
      "name": "Relay 1 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4130,
      "count": 1,
      "name": "Relay 2 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4131,
      "count": 1,
      "name": "Relay 3 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4132,
      "count": 1,
      "name": "Relay 4 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4133,
      "count": 1,
      "name": "Relay 5 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4144,
      "count": 1,
      "name": "Watchdog alarm flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the watchdog alarm."
    }
  ],
  "discrete_inputs": [
    {
      "address": 0,
      "count": 1,
      "name": "Digital input 0",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Digital input 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Digital input 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Digital input 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Digital input 4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Digital input 5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 1000,
      "count": 1,
      "name": "DI counter 0 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1001,
      "count": 1,
      "name": "DI counter 1 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1002,
      "count": 1,
      "name": "DI counter 2 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1003,
      "count": 1,
      "name": "DI counter 3 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1004,
      "count": 1,
      "name": "DI counter 4 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1005,
      "count": 1,
      "name": "DI counter 5 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 4096,
      "count": 1,
      "name": "Relay 0 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4097,
      "count": 1,
      "name": "Relay 1 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4098,
      "count": 1,
      "name": "Relay 2 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4099,
      "count": 1,
      "name": "Relay 3 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4100,
      "count": 1,
      "name": "Relay 4 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4101,
      "count": 1,
      "name": "Relay 5 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4112,
      "count": 1,
      "name": "Relay 0 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4113,
      "count": 1,
      "name": "Relay 1 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4114,
      "count": 1,
      "name": "Relay 2 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4115,
      "count": 1,
      "name": "Relay 3 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4116,
      "count": 1,
      "name": "Relay 4 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4117,
      "count": 1,
      "name": "Relay 5 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    }
  ],
  "input_registers": [
    {
      "address": 16,
      "count": 2,
      "name": "DI 0 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 18,
      "count": 2,
      "name": "DI 1 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 20,
      "count": 2,
      "name": "DI 2 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 22,
      "count": 2,
      "name": "DI 3 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 24,
      "count": 2,
      "name": "DI 4 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 26,
      "count": 2,
      "name": "DI 5 counter value",
      "data_type": "UInt32",
      "units": "counts",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 48,
      "count": 1,
      "name": "All digital input states",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field with the state of all 6 digital inputs in one word (DI-00 in bit 0)."
    },
    {
      "address": 64,
      "count": 2,
      "name": "Relay 0 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 66,
      "count": 2,
      "name": "Relay 1 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 68,
      "count": 2,
      "name": "Relay 2 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 70,
      "count": 2,
      "name": "Relay 3 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 72,
      "count": 2,
      "name": "Relay 4 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 74,
      "count": 2,
      "name": "Relay 5 total pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total pulse count of relay output i, high word first."
    },
    {
      "address": 96,
      "count": 2,
      "name": "Relay 0 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 98,
      "count": 2,
      "name": "Relay 1 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 100,
      "count": 2,
      "name": "Relay 2 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 102,
      "count": 2,
      "name": "Relay 3 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 104,
      "count": 2,
      "name": "Relay 4 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 106,
      "count": 2,
      "name": "Relay 5 current pulse count",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current pulse count of relay output i, high word first."
    },
    {
      "address": 5000,
      "count": 10,
      "name": "Model name",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Model name, one ASCII character per byte (10 registers)."
    },
    {
      "address": 5020,
      "count": 2,
      "name": "Device uptime",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Device uptime in seconds, high word first."
    },
    {
      "address": 5024,
      "count": 3,
      "name": "LAN MAC address",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "MAC address, one byte per character (3 registers, 6 bytes)."
    },
    {
      "address": 5027,
      "count": 2,
      "name": "LAN IP address",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "IPv4 address, one byte per octet, first octet in the most significant byte (2 registers)."
    },
    {
      "address": 5029,
      "count": 2,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware version, one ASCII character per byte (2 registers); the manual's example V1.2.3 uses one byte per version field."
    },
    {
      "address": 5031,
      "count": 2,
      "name": "Firmware build date",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware build date, e.g. 16051718 for Build 16.05.17 18 (2 registers)."
    },
    {
      "address": 5040,
      "count": 30,
      "name": "Device name",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Device name, one ASCII character per byte (30 registers)."
    }
  ],
  "holding_registers": [
    {
      "address": 32,
      "count": 1,
      "name": "All relay output states",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit field with the state of all 6 relay outputs in one word (RLY-00 in bit 0)."
    },
    {
      "address": 36,
      "count": 2,
      "name": "Relay 0 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 38,
      "count": 2,
      "name": "Relay 1 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 40,
      "count": 2,
      "name": "Relay 2 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 42,
      "count": 2,
      "name": "Relay 3 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 44,
      "count": 2,
      "name": "Relay 4 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 46,
      "count": 2,
      "name": "Relay 5 pulse count preset",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, high word first (2 registers per relay)."
    },
    {
      "address": 52,
      "count": 1,
      "name": "Relay 0 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 53,
      "count": 1,
      "name": "Relay 1 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 54,
      "count": 1,
      "name": "Relay 2 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 55,
      "count": 1,
      "name": "Relay 3 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 56,
      "count": 1,
      "name": "Relay 4 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 57,
      "count": 1,
      "name": "Relay 5 pulse on width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1.5 s."
    },
    {
      "address": 68,
      "count": 1,
      "name": "Relay 0 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    },
    {
      "address": 69,
      "count": 1,
      "name": "Relay 1 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    },
    {
      "address": 70,
      "count": 1,
      "name": "Relay 2 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    },
    {
      "address": 71,
      "count": 1,
      "name": "Relay 3 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    },
    {
      "address": 72,
      "count": 1,
      "name": "Relay 4 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    },
    {
      "address": 73,
      "count": 1,
      "name": "Relay 5 pulse off width",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1.5,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1.5 s."
    }
  ],
  "combined_registers": [],
  "notes": "Ethernet remote I/O (6 digital inputs, 6 relay outputs) with a built-in Modbus/TCP server; no gateway needed. Addresses are the manual's decimal start addresses, which are zero-based wire addresses (the manual also prints the 1-based reference numbers: coil 0 = 00001, discrete input 0 = 10001, input register 16 = 30017, holding register 32 = 40033). Each channel occupies one address in the start-address table, so this map lists channels separately. Source: Moxa ioLogik E1200 Series User Manual v16.2, appendix A 'ioLogik E1214 Modbus Address and Register Map'. Unit identifier: the manual documents no slave-address setting for the Modbus/TCP server, so 1 is used as the default."
}
