{
  "spec_version": 1,
  "slug": "advantech-adam-6017",
  "manufacturer": "Advantech",
  "model": "ADAM-6017",
  "category": "Remote I/O",
  "supplier_url": "https://www.advantech.com/en/products/a67f7853-013a-4b50-9b20-01798c56b090/adam-6017/mod_426ac8aa-4c77-4e4e-aed7-b41b9b387cf9",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [
    {
      "address": 16,
      "count": 1,
      "name": "Digital 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": "Digital 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": 100,
      "count": 1,
      "name": "Analog input 0 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Analog input 1 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 102,
      "count": 1,
      "name": "Analog input 2 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 103,
      "count": 1,
      "name": "Analog input 3 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 104,
      "count": 1,
      "name": "Analog input 4 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 105,
      "count": 1,
      "name": "Analog input 5 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 106,
      "count": 1,
      "name": "Analog input 6 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 107,
      "count": 1,
      "name": "Analog input 7 reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical maximum (00101-00108)."
    },
    {
      "address": 108,
      "count": 1,
      "name": "Analog input average reset historical maximum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the historical maximum of the channel average (00109)."
    },
    {
      "address": 110,
      "count": 1,
      "name": "Analog input 0 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 111,
      "count": 1,
      "name": "Analog input 1 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 112,
      "count": 1,
      "name": "Analog input 2 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 113,
      "count": 1,
      "name": "Analog input 3 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 114,
      "count": 1,
      "name": "Analog input 4 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 115,
      "count": 1,
      "name": "Analog input 5 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 116,
      "count": 1,
      "name": "Analog input 6 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 117,
      "count": 1,
      "name": "Analog input 7 reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the channel historical minimum (00111-00118)."
    },
    {
      "address": 118,
      "count": 1,
      "name": "Analog input average reset historical minimum",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the historical minimum of the channel average (00119)."
    },
    {
      "address": 120,
      "count": 1,
      "name": "Analog input 0 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 121,
      "count": 1,
      "name": "Analog input 1 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 122,
      "count": 1,
      "name": "Analog input 2 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 123,
      "count": 1,
      "name": "Analog input 3 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 124,
      "count": 1,
      "name": "Analog input 4 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 125,
      "count": 1,
      "name": "Analog input 5 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 126,
      "count": 1,
      "name": "Analog input 6 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 127,
      "count": 1,
      "name": "Analog input 7 open-circuit (burnout) flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the channel cannot detect the 4-20 mA input signal (00121-00128)."
    },
    {
      "address": 130,
      "count": 1,
      "name": "Analog input 0 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 131,
      "count": 1,
      "name": "Analog input 1 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 132,
      "count": 1,
      "name": "Analog input 2 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 133,
      "count": 1,
      "name": "Analog input 3 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 134,
      "count": 1,
      "name": "Analog input 4 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 135,
      "count": 1,
      "name": "Analog input 5 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 136,
      "count": 1,
      "name": "Analog input 6 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 137,
      "count": 1,
      "name": "Analog input 7 high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is above the channel high alarm limit (00131-00138)."
    },
    {
      "address": 138,
      "count": 1,
      "name": "Analog input average high alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the average reading is above the high alarm limit (00139)."
    },
    {
      "address": 140,
      "count": 1,
      "name": "Analog input 0 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 141,
      "count": 1,
      "name": "Analog input 1 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 142,
      "count": 1,
      "name": "Analog input 2 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 143,
      "count": 1,
      "name": "Analog input 3 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 144,
      "count": 1,
      "name": "Analog input 4 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 145,
      "count": 1,
      "name": "Analog input 5 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 146,
      "count": 1,
      "name": "Analog input 6 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 147,
      "count": 1,
      "name": "Analog input 7 low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the reading is below the channel low alarm limit (00141-00148)."
    },
    {
      "address": 148,
      "count": 1,
      "name": "Analog input average low alarm flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 when the average reading is below the low alarm limit (00149)."
    }
  ],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Analog input 0 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Analog input 1 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Analog input 2 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Analog input 3 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Analog input 4 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Analog input 5 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Analog input 6 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Analog input 7 value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value in engineering units (mV, V or mA) for the configured type code."
    },
    {
      "address": 8,
      "count": 1,
      "name": "Analog input average value",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average of the eight analog input values (40009)."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Analog input 0 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 11,
      "count": 1,
      "name": "Analog input 1 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 12,
      "count": 1,
      "name": "Analog input 2 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 13,
      "count": 1,
      "name": "Analog input 3 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 14,
      "count": 1,
      "name": "Analog input 4 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 15,
      "count": 1,
      "name": "Analog input 5 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 16,
      "count": 1,
      "name": "Analog input 6 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 17,
      "count": 1,
      "name": "Analog input 7 historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset (40011-40018)."
    },
    {
      "address": 18,
      "count": 1,
      "name": "Analog input average historical maximum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest average value since the last reset (40019)."
    },
    {
      "address": 20,
      "count": 1,
      "name": "Analog input 0 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 21,
      "count": 1,
      "name": "Analog input 1 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 22,
      "count": 1,
      "name": "Analog input 2 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 23,
      "count": 1,
      "name": "Analog input 3 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 24,
      "count": 1,
      "name": "Analog input 4 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 25,
      "count": 1,
      "name": "Analog input 5 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 26,
      "count": 1,
      "name": "Analog input 6 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 27,
      "count": 1,
      "name": "Analog input 7 historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset (40021-40028)."
    },
    {
      "address": 28,
      "count": 1,
      "name": "Analog input average historical minimum",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest average value since the last reset (40029)."
    },
    {
      "address": 30,
      "count": 2,
      "name": "Analog input 0 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 32,
      "count": 2,
      "name": "Analog input 1 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 34,
      "count": 2,
      "name": "Analog input 2 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 36,
      "count": 2,
      "name": "Analog input 3 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 38,
      "count": 2,
      "name": "Analog input 4 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 40,
      "count": 2,
      "name": "Analog input 5 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 42,
      "count": 2,
      "name": "Analog input 6 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 44,
      "count": 2,
      "name": "Analog input 7 floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Channel value as IEEE-754 single precision, high word first (40031-40046)."
    },
    {
      "address": 46,
      "count": 2,
      "name": "Analog input average floating point value",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average value as IEEE-754 single precision (40047-40048)."
    },
    {
      "address": 50,
      "count": 2,
      "name": "Analog input 0 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 52,
      "count": 2,
      "name": "Analog input 1 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 54,
      "count": 2,
      "name": "Analog input 2 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 56,
      "count": 2,
      "name": "Analog input 3 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 58,
      "count": 2,
      "name": "Analog input 4 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 60,
      "count": 2,
      "name": "Analog input 5 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 62,
      "count": 2,
      "name": "Analog input 6 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 64,
      "count": 2,
      "name": "Analog input 7 historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest value since the last reset, IEEE-754 single precision (40051-40066)."
    },
    {
      "address": 66,
      "count": 2,
      "name": "Analog input average historical maximum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest average value since the last reset, IEEE-754 single precision (40067-40068)."
    },
    {
      "address": 70,
      "count": 2,
      "name": "Analog input 0 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 72,
      "count": 2,
      "name": "Analog input 1 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 74,
      "count": 2,
      "name": "Analog input 2 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 76,
      "count": 2,
      "name": "Analog input 3 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 78,
      "count": 2,
      "name": "Analog input 4 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 80,
      "count": 2,
      "name": "Analog input 5 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 82,
      "count": 2,
      "name": "Analog input 6 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 84,
      "count": 2,
      "name": "Analog input 7 historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest value since the last reset, IEEE-754 single precision (40071-40086)."
    },
    {
      "address": 86,
      "count": 2,
      "name": "Analog input average historical minimum, floating point",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest average value since the last reset, IEEE-754 single precision (40087-40088)."
    },
    {
      "address": 200,
      "count": 1,
      "name": "Analog input 0 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 201,
      "count": 1,
      "name": "Analog input 1 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 202,
      "count": 1,
      "name": "Analog input 2 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 203,
      "count": 1,
      "name": "Analog input 3 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 204,
      "count": 1,
      "name": "Analog input 4 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 205,
      "count": 1,
      "name": "Analog input 5 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 206,
      "count": 1,
      "name": "Analog input 6 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 207,
      "count": 1,
      "name": "Analog input 7 type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Input range type code. Type codes are R/W: the manual's table gives 0x0148 = 0-10 V, 0x0147 = 0-5 V, 0x0143 = +/-10 V, 0x0142 = +/-5 V, 0x0180 = 4-20 mA, 0x0182 = 0-20 mA and 0x0181 = +/-20 mA."
    },
    {
      "address": 208,
      "count": 1,
      "name": "Analog input average type code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Type code reported for the channel average (40209)."
    },
    {
      "address": 220,
      "count": 1,
      "name": "Analog input channel enable",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit field enabling the analog input channels (40221)."
    },
    {
      "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": 310,
      "count": 2,
      "name": "GCL internal counter 0 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 312,
      "count": 2,
      "name": "GCL internal counter 1 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 314,
      "count": 2,
      "name": "GCL internal counter 2 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 316,
      "count": 2,
      "name": "GCL internal counter 3 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 318,
      "count": 2,
      "name": "GCL internal counter 4 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 320,
      "count": 2,
      "name": "GCL internal counter 5 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 322,
      "count": 2,
      "name": "GCL internal counter 6 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    },
    {
      "address": 324,
      "count": 2,
      "name": "GCL internal counter 7 value",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GCL internal counter value, high word first (40311-40326)."
    }
  ],
  "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-6017 table (manual pages 195-199). The module has 8 differential 16-bit analog inputs and 2 digital outputs. The 16-bit value registers carry the reading in engineering units for the channel's configured type code, but the manual publishes no per-range divisor (the type code sets the range), so no scale factor is applied; the floating-point rows give the reading without that ambiguity. The AI status registers 40101-40115 are left out because the manual places them two registers apart while describing a single 16-bit bit field, so their width would have to be guessed, and the GCL counter-clear coils 00301-00308 are left out because the table types them Write while the coils area here only carries read or read/write entries. Unit identifier 1: the manual's ASCII command section states the module's slave address is always 01, so unit_id 1 is used."
}
