{
  "spec_version": 1,
  "slug": "icp-das-et-7017",
  "manufacturer": "ICP DAS",
  "model": "ET-7017 (and PET-7017 / ET-7217 / PET-7217)",
  "category": "Remote I/O",
  "supplier_url": "https://www.icpdas.com/en/product/ET-7017",
  "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 output 0 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Drive state of output channel 0 (the same bits are also readable in the coil area)."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Digital output 1 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Drive state of output channel 1 (the same bits are also readable in the coil area)."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Digital output 2 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Drive state of output channel 2 (the same bits are also readable in the coil area)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Digital output 3 value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Drive state of output channel 3 (the same bits are also readable in the coil area)."
    },
    {
      "address": 435,
      "count": 1,
      "name": "Enable digital output 0 power-on value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored power-on value is not used, 1 = output channel 0 takes its power-on value after reset."
    },
    {
      "address": 436,
      "count": 1,
      "name": "Enable digital output 1 power-on value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored power-on value is not used, 1 = output channel 1 takes its power-on value after reset."
    },
    {
      "address": 437,
      "count": 1,
      "name": "Enable digital output 2 power-on value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored power-on value is not used, 1 = output channel 2 takes its power-on value after reset."
    },
    {
      "address": 438,
      "count": 1,
      "name": "Enable digital output 3 power-on value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored power-on value is not used, 1 = output channel 3 takes its power-on value after reset."
    },
    {
      "address": 515,
      "count": 1,
      "name": "Enable digital output 0 safe value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored safe value is not used, 1 = output channel 0 takes its safe value when communication is lost."
    },
    {
      "address": 516,
      "count": 1,
      "name": "Enable digital output 1 safe value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored safe value is not used, 1 = output channel 1 takes its safe value when communication is lost."
    },
    {
      "address": 517,
      "count": 1,
      "name": "Enable digital output 2 safe value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored safe value is not used, 1 = output channel 2 takes its safe value when communication is lost."
    },
    {
      "address": 518,
      "count": 1,
      "name": "Enable digital output 3 safe value",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = the stored safe value is not used, 1 = output channel 3 takes its safe value when communication is lost."
    },
    {
      "address": 595,
      "count": 1,
      "name": "Enable analog input 0",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 0 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 596,
      "count": 1,
      "name": "Enable analog input 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 1 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 597,
      "count": 1,
      "name": "Enable analog input 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 2 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 598,
      "count": 1,
      "name": "Enable analog input 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 3 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 599,
      "count": 1,
      "name": "Enable analog input 4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 4 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 600,
      "count": 1,
      "name": "Enable analog input 5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 5 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 601,
      "count": 1,
      "name": "Enable analog input 6",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 6 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 602,
      "count": 1,
      "name": "Enable analog input 7",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = AI channel 7 disabled, 1 = enabled. Factory default 1 for all eight channels."
    },
    {
      "address": 628,
      "count": 1,
      "name": "Analog input sampling rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = normal mode (10 samples/s total), 1 = fast mode (50 samples/s total)."
    },
    {
      "address": 629,
      "count": 1,
      "name": "Analog input noise filter",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Moving-average filter applied to the analog input readings; 0 disables the filter."
    },
    {
      "address": 631,
      "count": 1,
      "name": "Analog input data format",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = hexadecimal (two's complement raw counts), 1 = engineering unit. Decides how the AI value registers (30000-30007) are to be read; the vendor's conversion rules are in Appendix D of the user manual."
    },
    {
      "address": 636,
      "count": 1,
      "name": "Enable analog input 0 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 0."
    },
    {
      "address": 637,
      "count": 1,
      "name": "Enable analog input 1 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 1."
    },
    {
      "address": 638,
      "count": 1,
      "name": "Enable analog input 2 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 2."
    },
    {
      "address": 639,
      "count": 1,
      "name": "Enable analog input 3 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 3."
    },
    {
      "address": 640,
      "count": 1,
      "name": "Enable analog input 4 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 4."
    },
    {
      "address": 641,
      "count": 1,
      "name": "Enable analog input 5 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 5."
    },
    {
      "address": 642,
      "count": 1,
      "name": "Enable analog input 6 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 6."
    },
    {
      "address": 643,
      "count": 1,
      "name": "Enable analog input 7 high alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = high-alarm function off (factory default), 1 = on for AI channel 7."
    },
    {
      "address": 668,
      "count": 1,
      "name": "Enable analog input 0 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 0."
    },
    {
      "address": 669,
      "count": 1,
      "name": "Enable analog input 1 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 1."
    },
    {
      "address": 670,
      "count": 1,
      "name": "Enable analog input 2 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 2."
    },
    {
      "address": 671,
      "count": 1,
      "name": "Enable analog input 3 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 3."
    },
    {
      "address": 672,
      "count": 1,
      "name": "Enable analog input 4 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 4."
    },
    {
      "address": 673,
      "count": 1,
      "name": "Enable analog input 5 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 5."
    },
    {
      "address": 674,
      "count": 1,
      "name": "Enable analog input 6 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 6."
    },
    {
      "address": 675,
      "count": 1,
      "name": "Enable analog input 7 low alarm",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = low-alarm function off (factory default), 1 = on for AI channel 7."
    },
    {
      "address": 700,
      "count": 1,
      "name": "Analog input 0 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 0."
    },
    {
      "address": 701,
      "count": 1,
      "name": "Analog input 1 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 1."
    },
    {
      "address": 702,
      "count": 1,
      "name": "Analog input 2 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 2."
    },
    {
      "address": 703,
      "count": 1,
      "name": "Analog input 3 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 3."
    },
    {
      "address": 704,
      "count": 1,
      "name": "Analog input 4 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 4."
    },
    {
      "address": 705,
      "count": 1,
      "name": "Analog input 5 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 5."
    },
    {
      "address": 706,
      "count": 1,
      "name": "Analog input 6 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 6."
    },
    {
      "address": 707,
      "count": 1,
      "name": "Analog input 7 high alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the high alarm of AI channel 7."
    },
    {
      "address": 732,
      "count": 1,
      "name": "Analog input 0 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 0."
    },
    {
      "address": 733,
      "count": 1,
      "name": "Analog input 1 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 1."
    },
    {
      "address": 734,
      "count": 1,
      "name": "Analog input 2 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 2."
    },
    {
      "address": 735,
      "count": 1,
      "name": "Analog input 3 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 3."
    },
    {
      "address": 736,
      "count": 1,
      "name": "Analog input 4 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 4."
    },
    {
      "address": 737,
      "count": 1,
      "name": "Analog input 5 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 5."
    },
    {
      "address": 738,
      "count": 1,
      "name": "Analog input 6 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 6."
    },
    {
      "address": 739,
      "count": 1,
      "name": "Analog input 7 low alarm mode",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = momentary mode, 1 = latching mode, for the low alarm of AI channel 7."
    },
    {
      "address": 830,
      "count": 1,
      "name": "Enable analog input calibration",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = calibration disabled, 1 = enabled."
    }
  ],
  "discrete_inputs": [
    {
      "address": 224,
      "count": 1,
      "name": "Analog input 0 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 0 is above its high alarm value."
    },
    {
      "address": 225,
      "count": 1,
      "name": "Analog input 1 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 1 is above its high alarm value."
    },
    {
      "address": 226,
      "count": 1,
      "name": "Analog input 2 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 2 is above its high alarm value."
    },
    {
      "address": 227,
      "count": 1,
      "name": "Analog input 3 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 3 is above its high alarm value."
    },
    {
      "address": 228,
      "count": 1,
      "name": "Analog input 4 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 4 is above its high alarm value."
    },
    {
      "address": 229,
      "count": 1,
      "name": "Analog input 5 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 5 is above its high alarm value."
    },
    {
      "address": 230,
      "count": 1,
      "name": "Analog input 6 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 6 is above its high alarm value."
    },
    {
      "address": 231,
      "count": 1,
      "name": "Analog input 7 high alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 7 is above its high alarm value."
    },
    {
      "address": 256,
      "count": 1,
      "name": "Analog input 0 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 0 is below its low alarm value."
    },
    {
      "address": 257,
      "count": 1,
      "name": "Analog input 1 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 1 is below its low alarm value."
    },
    {
      "address": 258,
      "count": 1,
      "name": "Analog input 2 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 2 is below its low alarm value."
    },
    {
      "address": 259,
      "count": 1,
      "name": "Analog input 3 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 3 is below its low alarm value."
    },
    {
      "address": 260,
      "count": 1,
      "name": "Analog input 4 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 4 is below its low alarm value."
    },
    {
      "address": 261,
      "count": 1,
      "name": "Analog input 5 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 5 is below its low alarm value."
    },
    {
      "address": 262,
      "count": 1,
      "name": "Analog input 6 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 6 is below its low alarm value."
    },
    {
      "address": 263,
      "count": 1,
      "name": "Analog input 7 low alarm status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = the AI reading of channel 7 is below its low alarm value."
    }
  ],
  "input_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Analog input 0 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 0. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Analog input 1 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 1. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Analog input 2 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 2. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Analog input 3 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 3. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Analog input 4 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 4. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Analog input 5 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 5. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Analog input 6 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 6. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Analog input 7 value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "16-bit reading of AI channel 7. In hexadecimal format it is the two's complement ADC value (-32768 to 32767); in engineering-unit format the module multiplies the physical value by the scale constant of the configured range. The range of this channel is set in holding register 40427 + channel."
    },
    {
      "address": 236,
      "count": 1,
      "name": "Analog input 0 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 0 since the last clear."
    },
    {
      "address": 237,
      "count": 1,
      "name": "Analog input 1 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 1 since the last clear."
    },
    {
      "address": 238,
      "count": 1,
      "name": "Analog input 2 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 2 since the last clear."
    },
    {
      "address": 239,
      "count": 1,
      "name": "Analog input 3 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 3 since the last clear."
    },
    {
      "address": 240,
      "count": 1,
      "name": "Analog input 4 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 4 since the last clear."
    },
    {
      "address": 241,
      "count": 1,
      "name": "Analog input 5 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 5 since the last clear."
    },
    {
      "address": 242,
      "count": 1,
      "name": "Analog input 6 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 6 since the last clear."
    },
    {
      "address": 243,
      "count": 1,
      "name": "Analog input 7 historical maximum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest AI value seen on channel 7 since the last clear."
    },
    {
      "address": 268,
      "count": 1,
      "name": "Analog input 0 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 0 since the last clear."
    },
    {
      "address": 269,
      "count": 1,
      "name": "Analog input 1 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 1 since the last clear."
    },
    {
      "address": 270,
      "count": 1,
      "name": "Analog input 2 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 2 since the last clear."
    },
    {
      "address": 271,
      "count": 1,
      "name": "Analog input 3 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 3 since the last clear."
    },
    {
      "address": 272,
      "count": 1,
      "name": "Analog input 4 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 4 since the last clear."
    },
    {
      "address": 273,
      "count": 1,
      "name": "Analog input 5 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 5 since the last clear."
    },
    {
      "address": 274,
      "count": 1,
      "name": "Analog input 6 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 6 since the last clear."
    },
    {
      "address": 275,
      "count": 1,
      "name": "Analog input 7 historical minimum",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest AI value seen on channel 7 since the last clear."
    },
    {
      "address": 310,
      "count": 1,
      "name": "Number of digital output channels",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Reports 4 for the ET-7017."
    },
    {
      "address": 320,
      "count": 1,
      "name": "Number of analog input channels",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Reports 8 for the ET-7017."
    },
    {
      "address": 350,
      "count": 1,
      "name": "OS image version",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0x0123 means version 1.2.3."
    },
    {
      "address": 351,
      "count": 1,
      "name": "Firmware version",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0x0123 means version 1.2.3."
    },
    {
      "address": 353,
      "count": 1,
      "name": "I/O version",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0x0123 means version 1.2.3."
    },
    {
      "address": 360,
      "count": 1,
      "name": "Pair-connection state, register 1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, negative = failed, for the module's pair-connection function."
    },
    {
      "address": 361,
      "count": 1,
      "name": "Pair-connection state, register 2",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Second register of the pair-connection state block."
    }
  ],
  "holding_registers": [
    {
      "address": 271,
      "count": 1,
      "name": "Module identification (Modbus NetID)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Modbus unit identifier of the module, 0-255. Factory default 1, which is the unit ID this seed uses."
    },
    {
      "address": 296,
      "count": 1,
      "name": "Analog input 0 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 0 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 297,
      "count": 1,
      "name": "Analog input 1 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 1 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 298,
      "count": 1,
      "name": "Analog input 2 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 2 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 299,
      "count": 1,
      "name": "Analog input 3 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 3 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 300,
      "count": 1,
      "name": "Analog input 4 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 4 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 301,
      "count": 1,
      "name": "Analog input 5 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 5 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 302,
      "count": 1,
      "name": "Analog input 6 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 6 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 303,
      "count": 1,
      "name": "Analog input 7 high alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High alarm threshold for AI channel 7 in the same raw or engineering-unit format as its value register. Factory default +32767."
    },
    {
      "address": 328,
      "count": 1,
      "name": "Analog input 0 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 0. Factory default -32768."
    },
    {
      "address": 329,
      "count": 1,
      "name": "Analog input 1 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 1. Factory default -32768."
    },
    {
      "address": 330,
      "count": 1,
      "name": "Analog input 2 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 2. Factory default -32768."
    },
    {
      "address": 331,
      "count": 1,
      "name": "Analog input 3 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 3. Factory default -32768."
    },
    {
      "address": 332,
      "count": 1,
      "name": "Analog input 4 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 4. Factory default -32768."
    },
    {
      "address": 333,
      "count": 1,
      "name": "Analog input 5 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 5. Factory default -32768."
    },
    {
      "address": 334,
      "count": 1,
      "name": "Analog input 6 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 6. Factory default -32768."
    },
    {
      "address": 335,
      "count": 1,
      "name": "Analog input 7 low alarm value",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low alarm threshold for AI channel 7. Factory default -32768."
    },
    {
      "address": 427,
      "count": 1,
      "name": "Analog input 0 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 0: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 428,
      "count": 1,
      "name": "Analog input 1 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 1: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 429,
      "count": 1,
      "name": "Analog input 2 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 2: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 430,
      "count": 1,
      "name": "Analog input 3 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 3: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 431,
      "count": 1,
      "name": "Analog input 4 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 4: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 432,
      "count": 1,
      "name": "Analog input 5 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 5: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 433,
      "count": 1,
      "name": "Analog input 6 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 6: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 434,
      "count": 1,
      "name": "Analog input 7 input range",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Range of AI channel 7: 0x07 = 4-20 mA, 0x08 = +/-10 V (factory default), 0x09 = +/-5 V, 0x0A = +/-1 V, 0x0B = +/-500 mV, 0x0C = +/-150 mV, 0x0D = +/-20 mA, 0x1A = 0-20 mA. The board jumper must match a voltage or current range."
    },
    {
      "address": 555,
      "count": 1,
      "name": "Module reset status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = power-on, 2 = module watchdog, 3 = software reset command."
    },
    {
      "address": 556,
      "count": 1,
      "name": "Boot count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of times the module has booted; 1-32767."
    },
    {
      "address": 557,
      "count": 1,
      "name": "Host watchdog timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Host watchdog timeout in 0.1 s units; 6-65535 enable the watchdog, 0 disables it."
    },
    {
      "address": 558,
      "count": 1,
      "name": "Host watchdog event count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of watchdog events since the last module reset; 0-32767."
    },
    {
      "address": 559,
      "count": 1,
      "name": "Module name",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Reports 0x7017 for the ET-7017."
    }
  ],
  "combined_registers": [],
  "notes": "Ethernet remote I/O with a built-in Modbus/TCP server on port 502: 8 differential 16-bit analog inputs (jumper-selectable range per channel) and 4 isolated open-collector digital outputs. Source: ICP DAS \"ET-7x00/PET-7x00 Series Register Table\" v1.1.5, April 2025 (https://www.icpdas.com/en/download/file.php?num=4226), section \"ET-7017/PET-7017/ET-7217/PET-7217\", pages 35-37; scaling from the user manual v1.1.5, 08/2026, Appendix D (https://www.icpdas.com/en/download/file.php?num=4147). Addressing: every row of the register table carries a decimal 5-digit Modbus reference and a hexadecimal offset that agree with each other (input register 30236 = 0x00EC, holding register 40427 = 0x01AB), so the hexadecimal offset is stored as the zero-based wire address and the device declares zero_based. Unit identifier 1 is the factory value of the module's Modbus NetID register (40271), which the table states as factory value 1. Analog values: the AI value registers hold 16-bit two's complement counts or scaled engineering-unit integers depending on the AI data format setting (coil 00631). There is no single scale factor per channel because the input range is a per-channel setting: Appendix D gives Voltage (V) = DRAW x (10 / 32767) for the +/-10 V range and Current (mA) = 4 + (DRAW x 16 / 65535) for 4-20 mA, each other range having its own scale constant, so the AI rows are left unscaled and the per-channel range registers are listed instead. Deliberate omissions: coils the vendor types \"W\" only (clear historical maxima/minima, clear alarm status, reset, reboot, save power-on/safe values, AI calibration zero/span) are not listed, because the coil area in this schema carries only R or RW entries; setting the alarm modes and enables that govern them is included. Only zero/span calibration coils for channel 0 are documented (00831/00832), and nothing beyond the table was invented."
}
