{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Contemp",
  "model": "C71X",
  "models": ["C714", "C715", "C719"],
  "vendor_website": "contemp.com.br",
  "description": "Process controller (C714, C715, C719): process value, setpoints, output, alarms, heater current, programs and main control, input and communication settings",
  "revision": 1,
  "revised": "2026-11-08",
  "firmware_min": "2",
  "source": "Contemp Mapa de Registros Modbus, Controlador de Processos C714, C715 e C719, rev. 03",
  "sources": [
    {"title": "Mapa de Registros Modbus - Controlador de Processos, modelos C714, C715 e C719", "version": "03", "url": "https://github.com/user-attachments/files/34523119/mapa_modbus_c71x_rev.03.pdf", "note": "software V2.00 or later, register table T04 or later; attached to issue #124"}
  ],
  "notes": [
    "Modbus RTU slave on RS-485 (optional). Registers are numbered from 1, as in the document. FC03 reads and FC06/FC16 writes; the on/off registers can also be read and written as coils.",
    "Baud rate 9600 to 57600 bit/s, parity none, odd or even, 1 or 2 stop bits. The document gives no factory default; 9600 8N1 and address 1 are assumed here.",
    "Values marked in engineering units are whole numbers with the decimal places set in register 63 (for example 1234 with one decimal place is 123.4).",
    "The program segments (registers 250-1227), the output assignments, the special linearisation table and the 16-character tag (one character per register) are left out.",
    "Written from the register map; this map has not been tested on a device."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 9600,
  "parity": "N",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "official",
  "enums": {
    "input_type": {"0": "J", "1": "K", "2": "E", "3": "N", "4": "T", "5": "R", "6": "S", "7": "B", "8": "Ni120", "9": "Pt100", "10": "Pt1000", "11": "0-20 mA", "12": "4-20 mA", "13": "0-60 mV", "14": "0-1 V", "15": "0-5 V", "16": "1-5 V", "17": "0-10 V", "18": "±60 mV", "19": "±1 V", "20": "±5 V", "21": "±10 V"},
    "alarm_function": {"0": "Off", "1": "Input fault", "2": "High", "3": "Low", "4": "Deviation", "5": "High deviation", "6": "Low deviation", "7": "Program"}
  },
  "registers": [
    {"name": "Process value", "group": "Operation", "area": "holding", "address": 1, "type": "int16", "description": "In engineering units, with the decimal places set in register 63"},
    {"name": "Setpoint", "group": "Operation", "area": "holding", "address": 2, "type": "int16", "access": "RW", "description": "In engineering units, with the decimal places set in register 63"},
    {"name": "Manipulated variable", "group": "Operation", "area": "holding", "address": 3, "type": "int16", "scale": 0.1, "unit": "%", "access": "RW", "write_min": -100, "write_max": 100, "description": "Control output; writable in manual mode"},
    {"name": "Alarm 1 setpoint", "group": "Operation", "area": "holding", "address": 4, "type": "int16", "access": "RW"},
    {"name": "Alarm 2 setpoint", "group": "Operation", "area": "holding", "address": 5, "type": "int16", "access": "RW"},
    {"name": "Alarm 3 setpoint", "group": "Operation", "area": "holding", "address": 6, "type": "int16", "access": "RW"},
    {"name": "Alarm 4 setpoint", "group": "Operation", "area": "holding", "address": 7, "type": "int16", "access": "RW"},
    {"name": "Setpoint 2", "group": "Operation", "area": "holding", "address": 8, "type": "int16", "access": "RW"},
    {"name": "Manual mode", "group": "Operation", "area": "holding", "address": 9, "type": "uint16", "enum": {"0": "Automatic", "1": "Manual"}, "access": "RW"},

    {"name": "Alarm 1", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 0, "enum": {"0": "Off", "1": "On"}},
    {"name": "Alarm 2", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 1, "enum": {"0": "Off", "1": "On"}},
    {"name": "Alarm 3", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 2, "enum": {"0": "Off", "1": "On"}},
    {"name": "Alarm 4", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 3, "enum": {"0": "Off", "1": "On"}},
    {"name": "Digital input D1", "group": "Status", "area": "holding", "address": 19, "type": "uint16", "enum": {"0": "Inactive", "1": "Active"}},
    {"name": "Digital input D2", "group": "Status", "area": "holding", "address": 20, "type": "uint16", "enum": {"0": "Inactive", "1": "Active"}},
    {"name": "Remote setpoint input", "group": "Status", "area": "holding", "address": 21, "type": "uint16", "enum": {"0": "Local", "1": "Remote"}},
    {"name": "Heater current", "group": "Status", "area": "holding", "address": 22, "type": "uint16", "scale": 0.1, "unit": "A"},
    {"name": "Heater break alarm", "group": "Status", "area": "holding", "address": 23, "type": "uint16", "enum": {"0": "Off", "1": "On"}},
    {"name": "Output option", "group": "Status", "area": "holding", "address": 24, "type": "uint16", "description": "Option code from the document's table 6 (0 = none, A to J = an option); how the letter is encoded is not stated"},
    {"name": "Input option", "group": "Status", "area": "holding", "address": 25, "type": "uint16", "description": "Option code from the document's table 6 (0 = none, A to J = an option); how the letter is encoded is not stated"},
    {"name": "Communication option", "group": "Status", "area": "holding", "address": 26, "type": "uint16", "description": "Option code from the document's table 6 (0 = none, A to J = an option); how the letter is encoded is not stated"},
    {"name": "Input status", "group": "Status", "area": "holding", "address": 28, "type": "uint16", "enum": {"0": "OK", "1": "Over range (nnnn)", "2": "Under range (uuuu)", "3": "Input fault (----)"}},
    {"name": "Function key", "group": "Status", "area": "holding", "address": 29, "type": "uint16", "enum": {"0": "Inactive", "1": "Active"}, "access": "RW"},

    {"name": "Program number", "group": "Program", "area": "holding", "address": 30, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 50},
    {"name": "Program repetitions", "group": "Program", "area": "holding", "address": 31, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 101, "description": "101 = continuous"},
    {"name": "Program segment", "group": "Program", "area": "holding", "address": 32, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 81},
    {"name": "Segment time", "group": "Program", "area": "holding", "address": 33, "type": "uint16", "unit": "min", "access": "RW", "write_min": 0, "write_max": 5999, "description": "Shown as hh:mm (5999 = 99:59)"},
    {"name": "Program state", "group": "Program", "area": "holding", "address": 34, "type": "uint16", "enum": {"0": "Stop", "1": "Run", "2": "Hold"}, "access": "RW"},
    {"name": "Program start error", "group": "Program", "area": "holding", "address": 35, "type": "uint16", "enum": {"0": "No error", "1": "Error"}},
    {"name": "Program finished", "group": "Program", "area": "holding", "address": 36, "type": "bool", "bit": 6},

    {"name": "Tuning type", "group": "Control", "area": "holding", "address": 50, "type": "uint16", "enum": {"0": "Autotune", "1": "Adaptive"}, "access": "RW"},
    {"name": "Autotune", "group": "Control", "area": "holding", "address": 51, "type": "uint16", "enum": {"0": "Off", "1": "On", "2": "On at power-up"}, "access": "RW"},
    {"name": "Fuzzy", "group": "Control", "area": "holding", "address": 52, "type": "uint16", "enum": {"0": "Off", "1": "On"}, "access": "RW"},
    {"name": "Proportional band", "group": "Control", "area": "holding", "address": 53, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 9999, "description": "0 = off. In engineering units, with the decimal places set in register 63"},
    {"name": "Integral time", "group": "Control", "area": "holding", "address": 54, "type": "uint16", "unit": "s", "access": "RW", "write_min": 0, "write_max": 9999, "description": "0 = off"},
    {"name": "Derivative time", "group": "Control", "area": "holding", "address": 55, "type": "uint16", "unit": "s", "access": "RW", "write_min": 0, "write_max": 9999, "description": "0 = off"},
    {"name": "Manual reset", "group": "Control", "area": "holding", "address": 56, "type": "uint16", "scale": 0.1, "unit": "%", "access": "RW", "write_min": 0, "write_max": 100},
    {"name": "Hysteresis", "group": "Control", "area": "holding", "address": 57, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1000},
    {"name": "Dead band", "group": "Control", "area": "holding", "address": 59, "type": "int16", "access": "RW", "write_min": -1000, "write_max": 1000},

    {"name": "Input type", "group": "Input", "area": "holding", "address": 60, "type": "uint16", "enum": "input_type", "access": "RW"},
    {"name": "Temperature unit", "group": "Input", "area": "holding", "address": 61, "type": "uint16", "enum": {"0": "°C", "1": "°F", "3": "K"}, "access": "RW"},
    {"name": "Decimal places", "group": "Input", "area": "holding", "address": 63, "type": "uint16", "enum": {"0": "0", "1": "0.0", "2": "0.00", "3": "0.000"}, "access": "RW"},
    {"name": "Input range low", "group": "Input", "area": "holding", "address": 64, "type": "int16", "access": "RW"},
    {"name": "Input range high", "group": "Input", "area": "holding", "address": 65, "type": "int16", "access": "RW"},
    {"name": "Input filter", "group": "Input", "area": "holding", "address": 66, "type": "uint16", "scale": 0.1, "unit": "s", "access": "RW", "write_min": 0, "write_max": 50, "description": "0 = off"},
    {"name": "Input offset", "group": "Input", "area": "holding", "address": 67, "type": "int16", "access": "RW", "write_min": -1000, "write_max": 1000},

    {"name": "Control action", "group": "Control", "area": "holding", "address": 78, "type": "uint16", "enum": {"0": "Reverse", "1": "Direct"}, "access": "RW"},
    {"name": "Output 1 cycle time", "group": "Control", "area": "holding", "address": 81, "type": "uint16", "unit": "s", "access": "RW", "write_min": 1, "write_max": 250},
    {"name": "Output 1 low limit", "group": "Control", "area": "holding", "address": 82, "type": "uint16", "scale": 0.1, "unit": "%", "access": "RW", "write_min": 0, "write_max": 100},
    {"name": "Output 1 high limit", "group": "Control", "area": "holding", "address": 83, "type": "uint16", "scale": 0.1, "unit": "%", "access": "RW", "write_min": 0, "write_max": 100},

    {"name": "Alarm 1 function", "group": "Alarms", "area": "holding", "address": 99, "type": "uint16", "enum": "alarm_function", "access": "RW"},
    {"name": "Alarm 1 hysteresis", "group": "Alarms", "area": "holding", "address": 102, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 1000},
    {"name": "Alarm 2 function", "group": "Alarms", "area": "holding", "address": 107, "type": "uint16", "enum": "alarm_function", "access": "RW"},
    {"name": "Alarm 2 hysteresis", "group": "Alarms", "area": "holding", "address": 110, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 1000},
    {"name": "Alarm 3 function", "group": "Alarms", "area": "holding", "address": 115, "type": "uint16", "enum": "alarm_function", "access": "RW"},
    {"name": "Alarm 3 hysteresis", "group": "Alarms", "area": "holding", "address": 118, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 1000},
    {"name": "Alarm 4 function", "group": "Alarms", "area": "holding", "address": 123, "type": "uint16", "enum": "alarm_function", "access": "RW"},
    {"name": "Alarm 4 hysteresis", "group": "Alarms", "area": "holding", "address": 126, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 1000},
    {"name": "Heater break current setpoint", "group": "Alarms", "area": "holding", "address": 132, "type": "uint16", "scale": 0.1, "unit": "A", "access": "RW", "write_min": 0.1, "write_max": 50},

    {"name": "Address", "group": "Communication", "area": "holding", "address": 138, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247},
    {"name": "Baud rate", "group": "Communication", "area": "holding", "address": 139, "type": "uint16", "enum": {"0": "9600", "1": "19200", "2": "38400", "3": "57600"}, "access": "RW"},
    {"name": "Parity", "group": "Communication", "area": "holding", "address": 140, "type": "uint16", "enum": {"0": "None", "1": "Odd", "2": "Even"}, "access": "RW"},

    {"name": "Software version", "group": "Identity", "area": "holding", "address": 160, "type": "uint16", "scale": 0.01, "role": "firmware", "description": "Shown as A.BC"},

    {"name": "Parameter lock", "group": "Settings", "area": "holding", "address": 161, "type": "uint16", "enum": {"0": "Off", "1": "Calibration", "2": "Special linearisation", "3": "Configuration", "4": "Programs", "5": "Operation", "6": "All"}, "access": "RW"}
  ]
}
