{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Reinhausen",
  "model": "TAPCON 240",
  "models": ["TAPCON 240"],
  "vendor_website": "reinhausen.com",
  "description": "Voltage regulator for on-load tap-changers with the CIC communication card",
  "revision": 2,
  "revised": "2026-10-18",
  "source": "Maschinenfabrik Reinhausen, \"Voltage regulator TAPCON 240, Protocol description MODBUS\", supplement 2398449/01 (2011-07), section 5",
  "sources": [
    {"title": "Voltage regulator TAPCON 240, Protocol description MODBUS", "version": "2398449/01 EN", "date": "2011-07", "note": "section 5, data points"}
  ],
  "notes": [
    "Modbus RTU or ASCII over RS-232, RS-485 or fibre. ASCII uses 7E1, RTU 8E1.",
    "The optional RJ45 port carries Modbus RTU wrapped in TCP (factory port 1234, 19200 baud), not Modbus TCP.",
    "Coils can only be written (FC05); their state cannot be read back. Write one coil or one register per request.",
    "Commands from the control system are only executed when the regulator is in remote mode.",
    "Coil 8 is either 'raise/lower desired voltage value' or 'desired voltage value 1', depending on how MR parameterised the device."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "parity": "E",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "official",
  "registers": [
    {"name": "Raise", "group": "Commands", "area": "coil", "address": 0, "type": "bool", "access": "W", "description": "On raises; only in manual mode"},
    {"name": "Lower", "group": "Commands", "area": "coil", "address": 1, "type": "bool", "access": "W", "description": "On lowers; only in manual mode"},
    {"name": "Set auto/manual", "group": "Commands", "area": "coil", "address": 5, "type": "bool", "access": "W", "enum": {"0": "Manual", "1": "Auto"}},
    {"name": "Raise/lower desired voltage value", "group": "Commands", "area": "coil", "address": 8, "type": "bool", "access": "W", "description": "Optional function, parameterised by MR; replaces desired voltage value 1-3"},
    {"name": "Select desired voltage value 1", "group": "Commands", "area": "coil", "address": 8, "type": "bool", "access": "W", "description": "Only when no inputs select values 2 and 3 and raise/lower desired value is not parameterised"},
    {"name": "Select desired voltage value 2", "group": "Commands", "area": "coil", "address": 9, "type": "bool", "access": "W"},
    {"name": "Select desired voltage value 3", "group": "Commands", "area": "coil", "address": 10, "type": "bool", "access": "W"},
    {"name": "SI command 1", "group": "Commands", "area": "coil", "address": 11, "type": "bool", "access": "W", "description": "Sets a flag that the regulator can use like an input"},
    {"name": "SI command 2", "group": "Commands", "area": "coil", "address": 12, "type": "bool", "access": "W", "description": "Sets a flag that the regulator can use like an input"},
    {"name": "SI command 3", "group": "Commands", "area": "coil", "address": 13, "type": "bool", "access": "W", "description": "Sets a flag that the regulator can use like an input"},
    {"name": "Set circulating reactive current method", "group": "Commands", "area": "coil", "address": 15, "type": "bool", "access": "W", "description": "Parallel operation method"},
    {"name": "Set master method", "group": "Commands", "area": "coil", "address": 27, "type": "bool", "access": "W", "description": "Parallel operation method"},
    {"name": "Set follower method", "group": "Commands", "area": "coil", "address": 28, "type": "bool", "access": "W", "description": "Parallel operation method"},
    {"name": "Function monitoring", "group": "Alarms", "area": "discrete", "address": 0, "type": "bool"},
    {"name": "Undervoltage", "group": "Alarms", "area": "discrete", "address": 1, "type": "bool"},
    {"name": "Overvoltage", "group": "Alarms", "area": "discrete", "address": 2, "type": "bool"},
    {"name": "Overcurrent", "group": "Alarms", "area": "discrete", "address": 3, "type": "bool"},
    {"name": "Parallel operation error", "group": "Alarms", "area": "discrete", "address": 4, "type": "bool"},
    {"name": "Auto mode", "group": "Status", "area": "discrete", "address": 5, "type": "bool", "enum": {"0": "Manual", "1": "Auto"}},
    {"name": "Desired voltage value 1", "group": "Status", "area": "discrete", "address": 8, "type": "bool"},
    {"name": "Desired voltage value 2", "group": "Status", "area": "discrete", "address": 9, "type": "bool"},
    {"name": "Desired voltage value 3", "group": "Status", "area": "discrete", "address": 10, "type": "bool"},
    {"name": "SI command 1 active", "group": "Status", "area": "discrete", "address": 11, "type": "bool"},
    {"name": "SI command 2 active", "group": "Status", "area": "discrete", "address": 12, "type": "bool"},
    {"name": "SI command 3 active", "group": "Status", "area": "discrete", "address": 13, "type": "bool"},
    {"name": "Tap change in progress", "group": "Status", "area": "discrete", "address": 14, "type": "bool"},
    {"name": "Parallel operation on", "group": "Parallel operation", "area": "discrete", "address": 15, "type": "bool"},
    {"name": "Local/remote", "group": "Status", "area": "discrete", "address": 16, "type": "bool", "description": "The supplement does not say which value means local"},
    {"name": "Message 3", "group": "Messages", "area": "discrete", "address": 17, "type": "bool", "description": "Parameterisable message, on when its input or relay is active"},
    {"name": "Motor protective switch", "group": "Alarms", "area": "discrete", "address": 24, "type": "bool"},
    {"name": "Message 1", "group": "Messages", "area": "discrete", "address": 25, "type": "bool", "description": "Parameterisable message, on when its input or relay is active"},
    {"name": "Message 2", "group": "Messages", "area": "discrete", "address": 26, "type": "bool", "description": "Parameterisable message, on when its input or relay is active"},
    {"name": "Master method", "group": "Parallel operation", "area": "discrete", "address": 27, "type": "bool"},
    {"name": "Follower method", "group": "Parallel operation", "area": "discrete", "address": 28, "type": "bool"},
    {"name": "Circulating reactive current method", "group": "Parallel operation", "area": "discrete", "address": 29, "type": "bool"},
    {"name": "Message 4", "group": "Messages", "area": "discrete", "address": 30, "type": "bool", "description": "Parameterisable message, on when its input or relay is active"},
    {"name": "Tap position", "group": "Measurements", "area": "input", "address": 0, "type": "int16", "description": "-40 to 40"},
    {"name": "Measured voltage", "group": "Measurements", "area": "input", "address": 1, "type": "uint16", "scale": 0.1, "unit": "V", "description": "0-170.0 V"},
    {"name": "Voltage deviation", "group": "Measurements", "area": "input", "address": 2, "type": "int16", "scale": 0.1, "unit": "%", "description": "Percent of the effective voltage level"},
    {"name": "Active current", "group": "Measurements", "area": "input", "address": 5, "type": "int16", "scale": 0.01, "unit": "%"},
    {"name": "Desired voltage value", "group": "Settings", "area": "holding", "address": 0, "type": "uint16", "scale": 0.1, "unit": "V", "access": "RW", "write_min": 49, "write_max": 140, "description": "Raw 490-1400"}
  ]
}
