{
  "spec_version": 1,
  "slug": "advantech-adam-6060",
  "manufacturer": "Advantech",
  "model": "ADAM-6060",
  "category": "Remote I/O",
  "supplier_url": "https://www.advantech.com/en/products/a67f7853-013a-4b50-9b20-01798c56b090/adam-6060/mod_c3b0fabb-dce7-4a64-bcb7-7e0cbfda0364",
  "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": "Digital input 0 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Digital input 1 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Digital input 2 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Digital input 3 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Digital input 4 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Digital input 5 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (read through the coil area, function code 01)."
    },
    {
      "address": 16,
      "count": 1,
      "name": "Relay output 0 value",
      "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": 17,
      "count": 1,
      "name": "Relay output 1 value",
      "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": 18,
      "count": 1,
      "name": "Relay output 2 value",
      "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": 19,
      "count": 1,
      "name": "Relay output 3 value",
      "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": 20,
      "count": 1,
      "name": "Relay output 4 value",
      "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": 21,
      "count": 1,
      "name": "Relay output 5 value",
      "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": 32,
      "count": 1,
      "name": "Digital input 0 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 34,
      "count": 1,
      "name": "Digital input 0 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 35,
      "count": 1,
      "name": "Digital input 0 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    },
    {
      "address": 36,
      "count": 1,
      "name": "Digital input 1 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 38,
      "count": 1,
      "name": "Digital input 1 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 39,
      "count": 1,
      "name": "Digital input 1 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    },
    {
      "address": 40,
      "count": 1,
      "name": "Digital input 2 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 42,
      "count": 1,
      "name": "Digital input 2 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 43,
      "count": 1,
      "name": "Digital input 2 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    },
    {
      "address": 44,
      "count": 1,
      "name": "Digital input 3 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 46,
      "count": 1,
      "name": "Digital input 3 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 47,
      "count": 1,
      "name": "Digital input 3 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    },
    {
      "address": 48,
      "count": 1,
      "name": "Digital input 4 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 50,
      "count": 1,
      "name": "Digital input 4 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 51,
      "count": 1,
      "name": "Digital input 4 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    },
    {
      "address": 52,
      "count": 1,
      "name": "Digital input 5 counter start/stop",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start counting, 0 = stop."
    },
    {
      "address": 54,
      "count": 1,
      "name": "Digital input 5 clear overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = clear the overflow flag."
    },
    {
      "address": 55,
      "count": 1,
      "name": "Digital input 5 latch status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 while the configured latch condition is met; write 0 to clear it."
    }
  ],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 300,
      "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 (40301)."
    },
    {
      "address": 302,
      "count": 1,
      "name": "All digital output states",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit field with the state of all 6 digital outputs (40303)."
    },
    {
      "address": 304,
      "count": 1,
      "name": "GCL internal flag value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "GCL internal flags, channels 0-15 (40305)."
    },
    {
      "address": 0,
      "count": 2,
      "name": "Digital input 0 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 2,
      "count": 2,
      "name": "Digital input 1 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 4,
      "count": 2,
      "name": "Digital input 2 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 6,
      "count": 2,
      "name": "Digital input 3 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 8,
      "count": 2,
      "name": "Digital input 4 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 10,
      "count": 2,
      "name": "Digital input 5 counter/frequency value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Counter value, high word first (2 registers per input). The manual gives counter = value(40002) x 65536 + value(40001), and the low register on its own is frequency in 0.1 Hz (value / 10 = Hz)."
    },
    {
      "address": 12,
      "count": 2,
      "name": "Relay 0 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 14,
      "count": 2,
      "name": "Relay 1 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 16,
      "count": 2,
      "name": "Relay 2 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 18,
      "count": 2,
      "name": "Relay 3 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 20,
      "count": 2,
      "name": "Relay 4 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 22,
      "count": 2,
      "name": "Relay 5 pulse low-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output low-level width, high word first (2 registers per relay)."
    },
    {
      "address": 24,
      "count": 2,
      "name": "Relay 0 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 26,
      "count": 2,
      "name": "Relay 1 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 28,
      "count": 2,
      "name": "Relay 2 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 30,
      "count": 2,
      "name": "Relay 3 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 32,
      "count": 2,
      "name": "Relay 4 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 34,
      "count": 2,
      "name": "Relay 5 pulse high-level width",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output high-level width, high word first (2 registers per relay)."
    },
    {
      "address": 36,
      "count": 2,
      "name": "Relay 0 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 38,
      "count": 2,
      "name": "Relay 1 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 40,
      "count": 2,
      "name": "Relay 2 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 42,
      "count": 2,
      "name": "Relay 3 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 44,
      "count": 2,
      "name": "Relay 4 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 46,
      "count": 2,
      "name": "Relay 5 pulse count, absolute",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of pulses to generate; writing 0 generates pulses continuously (manual remark 5)."
    },
    {
      "address": 48,
      "count": 2,
      "name": "Relay 0 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    },
    {
      "address": 50,
      "count": 2,
      "name": "Relay 1 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    },
    {
      "address": 52,
      "count": 2,
      "name": "Relay 2 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    },
    {
      "address": 54,
      "count": 2,
      "name": "Relay 3 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    },
    {
      "address": 56,
      "count": 2,
      "name": "Relay 4 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    },
    {
      "address": 58,
      "count": 2,
      "name": "Relay 5 pulse count, incremental",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Additional pulses generated while a pulse train is running (manual remark 6)."
    }
  ],
  "combined_registers": [],
  "notes": "Ethernet remote I/O with a built-in Modbus/TCP server; no gateway needed. The manual numbers its map with 1-based Modbus reference numbers (00001, 40001 ...) and states in its RTU framing example that reference 40051 is offset 50, so this seed stores the zero-based wire addresses (reference minus one). Source: Advantech ADAM-6000 Series User Manual Ed.12 (2022), appendix B.2 'ADAM-6000 I/O Modbus Mapping Tables', ADAM-6060/6066 table (manual pages 216-220). The seed covers the ADAM-6060 (6 digital inputs, 6 relay outputs); the ADAM-6066 shares the same register map, so this seed is named for the ADAM-6060 only. Counter and frequency share the same 32-bit pair, as in the table’s first remark. The per-input 'Clear counter (1)' coils (00034, 00038, ... one per input) are typed Write in the manual, and the GCL counter-clear block 00301-00308 is write-only as well; the coils area here only carries read or read/write entries, so both blocks are left out of this seed. The module-name registers 40211-40212 are left out too, because the manual does not state their encoding and a data type would have to be guessed. Unit identifier 1: the manual's ASCII command section states the module's slave address is always 01, so unit_id 1 is used."
}
