{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Advantech",
  "model": "ADAM-6024",
  "models": ["ADAM-6024"],
  "vendor_website": "advantech.com",
  "description": "Universal I/O module: 6 AI, 2 AO, 2 DI, 2 DO, Modbus TCP",
  "revision": 2,
  "revised": "2026-10-17",
  "source": "Advantech, \"ADAM-6000 Series User Manual\", Edition 9, Appendix B.2 (I/O Modbus mapping tables)",
  "sources": [{"title": "ADAM-6000 Series User Manual", "version": "Edition 9", "url": "https://support.elmark.com.pl/advantech/ia/CDROMS/ADAM-4k6k%20Series/Manual/ADAM%206000/ADAM-6000_User_Manaul_Ed_9.pdf", "note": "Appendix B.2, ADAM-6024"}],
  "notes": [
    "Addresses are the Modicon numbers of the manual (00001 = coil 1, 40001 = holding register 1).",
    "32-bit counters and pulse settings are low word first (the manual: counter = (40002) × 65536 + (40001)).",
    "Some registers (floats, GCL, diagnostics) need the CE or D version of the module."
  ],
  "protocol": "tcp",
  "unit_id": 1,
  "port": 502,
  "byte_order": "big",
  "word_order": "little",
  "address_base": 1,
  "x_status": "official",
  "registers": [
    {"name": "DI0", "group": "Digital inputs", "area": "coil", "address": 1, "type": "bool", "access": "R"},
    {"name": "DI1", "group": "Digital inputs", "area": "coil", "address": 2, "type": "bool", "access": "R"},
    {"name": "DO0", "group": "Digital outputs", "area": "coil", "address": 17, "type": "bool", "access": "RW"},
    {"name": "DO1", "group": "Digital outputs", "area": "coil", "address": 18, "type": "bool", "access": "RW"},
    {"name": "AI0", "group": "Analog inputs", "area": "holding", "address": 1, "type": "uint16", "access": "R"},
    {"name": "AI1", "group": "Analog inputs", "area": "holding", "address": 2, "type": "uint16", "access": "R"},
    {"name": "AI2", "group": "Analog inputs", "area": "holding", "address": 3, "type": "uint16", "access": "R"},
    {"name": "AI3", "group": "Analog inputs", "area": "holding", "address": 4, "type": "uint16", "access": "R"},
    {"name": "AI4", "group": "Analog inputs", "area": "holding", "address": 5, "type": "uint16", "access": "R"},
    {"name": "AI5", "group": "Analog inputs", "area": "holding", "address": 6, "type": "uint16", "access": "R"},
    {"name": "AO0", "group": "Analog outputs", "area": "holding", "address": 11, "type": "uint16", "access": "RW"},
    {"name": "AO1", "group": "Analog outputs", "area": "holding", "address": 12, "type": "uint16", "access": "RW"},
    {"name": "AI0 status", "group": "Status", "area": "holding", "address": 21, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}},
    {"name": "AI1 status", "group": "Status", "area": "holding", "address": 22, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}},
    {"name": "AI2 status", "group": "Status", "area": "holding", "address": 23, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}},
    {"name": "AI3 status", "group": "Status", "area": "holding", "address": 24, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}},
    {"name": "AI4 status", "group": "Status", "area": "holding", "address": 25, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}},
    {"name": "AI5 status", "group": "Status", "area": "holding", "address": 26, "type": "uint16", "access": "R", "enum": {"0": "Normal", "1": "Over high", "2": "Over low"}}
  ]
}
