{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Reinhausen",
  "model": "TAPCON 250",
  "models": ["TAPCON 250"],
  "vendor_website": "reinhausen.com",
  "description": "Digital on-load tap-changer voltage controller with the CI communication module",
  "revision": 2,
  "revised": "2026-10-18",
  "source": "Maschinenfabrik Reinhausen, \"TAPCON 250 Implementation of MODBUS (ASCII/RTU) Protocol\", supplement BB 2072201/02 (2011-05), section 6",
  "sources": [
    {"title": "Digital OLTC Voltage Controller TAPCON 250, Implementation of MODBUS (ASCII/RTU) Protocol", "version": "BB 2072201/02", "date": "2011-05", "note": "section 6, device data points"}
  ],
  "notes": [
    "Modbus RTU or ASCII over RS-232 (default), RS-485, fibre or the optional Ethernet/modem port of the CI module.",
    "Over Ethernet the controller speaks Modbus RTU wrapped in TCP, not Modbus TCP.",
    "Coils can only be written (FC05); their state cannot be read back. Holding registers are written one at a time with FC06.",
    "Currents are in percent of the 200 mA nominal input (100 % = 200 mA)."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 9600,
  "parity": "E",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "enums": {
    "inactive_active": {"0": "Inactive", "1": "Active"},
    "voltage_level": {"0": "Off", "1": "On"},
    "parallel_method": {"0": "Off", "1": "Circulating current", "2": "Master", "3": "Follower", "4": "Auto synchronous", "5": "XPA"}
  },
  "x_status": "official",
  "registers": [
    {"name": "Set auto/manual", "group": "Commands", "area": "coil", "address": 0, "type": "bool", "access": "W", "enum": {"0": "Manual", "1": "Auto"}, "description": "On sets auto mode, off sets manual mode"},
    {"name": "Raise", "group": "Commands", "area": "coil", "address": 1, "type": "bool", "access": "W", "description": "On starts a raise command; off has no effect"},
    {"name": "Lower", "group": "Commands", "area": "coil", "address": 2, "type": "bool", "access": "W", "description": "On starts a lower command; off has no effect"},
    {"name": "SI command 1", "group": "Commands", "area": "coil", "address": 7, "type": "bool", "access": "W", "description": "Sets or resets a flag that the controller can use like an input"},
    {"name": "SI command 2", "group": "Commands", "area": "coil", "address": 8, "type": "bool", "access": "W", "description": "Sets or resets a flag that the controller can use like an input"},
    {"name": "SI command 3", "group": "Commands", "area": "coil", "address": 9, "type": "bool", "access": "W", "description": "Sets or resets a flag that the controller can use like an input"},
    {"name": "Auto mode", "group": "Status", "area": "discrete", "address": 0, "type": "bool", "enum": {"0": "Manual", "1": "Auto"}},
    {"name": "Voltage level 1 (reference)", "group": "Voltage level", "area": "discrete", "address": 3, "type": "bool", "enum": "voltage_level", "description": "Only one voltage level is active at a time"},
    {"name": "Voltage level 2 (alternate)", "group": "Voltage level", "area": "discrete", "address": 4, "type": "bool", "enum": "voltage_level"},
    {"name": "Voltage level 3 (alternate)", "group": "Voltage level", "area": "discrete", "address": 5, "type": "bool", "enum": "voltage_level"},
    {"name": "Voltage level 4 (alternate)", "group": "Voltage level", "area": "discrete", "address": 6, "type": "bool", "enum": "voltage_level"},
    {"name": "SI command 1 flag", "group": "Status", "area": "discrete", "address": 7, "type": "bool", "description": "Listed without a function code in the supplement"},
    {"name": "SI command 2 flag", "group": "Status", "area": "discrete", "address": 8, "type": "bool", "description": "Listed without a function code in the supplement"},
    {"name": "SI command 3 flag", "group": "Status", "area": "discrete", "address": 9, "type": "bool", "description": "Listed without a function code in the supplement"},
    {"name": "Operation counter circuit", "group": "Status", "area": "discrete", "address": 10, "type": "bool", "enum": {"0": "Open", "1": "Closed"}},
    {"name": "Parallel control", "group": "Parallel operation", "area": "discrete", "address": 11, "type": "bool", "enum": {"0": "Off", "1": "On"}},
    {"name": "Parallel control error", "group": "Parallel operation", "area": "discrete", "address": 12, "type": "bool", "enum": {"0": "No error", "1": "Error"}},
    {"name": "Remote/local", "group": "Status", "area": "discrete", "address": 13, "type": "bool", "enum": {"0": "Remote", "1": "Local"}},
    {"name": "Overvoltage", "group": "Alarms", "area": "discrete", "address": 14, "type": "bool", "enum": {"0": "No overvoltage", "1": "Overvoltage"}},
    {"name": "Undervoltage", "group": "Alarms", "area": "discrete", "address": 15, "type": "bool", "enum": {"0": "No undervoltage", "1": "Undervoltage"}},
    {"name": "Overcurrent", "group": "Alarms", "area": "discrete", "address": 16, "type": "bool", "enum": {"0": "No overcurrent", "1": "Overcurrent"}},
    {"name": "Function monitoring 15 min", "group": "Alarms", "area": "discrete", "address": 18, "type": "bool", "enum": "inactive_active"},
    {"name": "Raise input", "group": "Inputs", "area": "discrete", "address": 19, "type": "bool", "enum": "inactive_active"},
    {"name": "Lower input", "group": "Inputs", "area": "discrete", "address": 20, "type": "bool", "enum": "inactive_active"},
    {"name": "Auto inhibit", "group": "Inputs", "area": "discrete", "address": 21, "type": "bool", "enum": "inactive_active"},
    {"name": "Neutral position", "group": "Inputs", "area": "discrete", "address": 22, "type": "bool", "enum": "inactive_active"},
    {"name": "Switch status", "group": "Inputs", "area": "discrete", "address": 23, "type": "bool", "enum": "inactive_active"},
    {"name": "Power flow direction", "group": "Status", "area": "discrete", "address": 24, "type": "bool", "enum": {"0": "Forward", "1": "Reverse"}},
    {"name": "User programmable alarm", "group": "Alarms", "area": "discrete", "address": 27, "type": "bool", "enum": "inactive_active"},
    {"name": "Hunting alarm", "group": "Alarms", "area": "discrete", "address": 30, "type": "bool", "enum": "inactive_active"},
    {"name": "Tap position", "group": "Measurements", "area": "input", "address": 0, "type": "int16", "description": "-50 to 140"},
    {"name": "Measured voltage", "group": "Measurements", "area": "input", "address": 1, "type": "uint16", "scale": 0.1, "unit": "V"},
    {"name": "Voltage deviation", "group": "Measurements", "area": "input", "address": 2, "type": "int16", "scale": 0.1, "unit": "%"},
    {"name": "Active current", "group": "Measurements", "area": "input", "address": 3, "type": "int16", "scale": 0.01, "unit": "%", "description": "100 % = 200 mA"},
    {"name": "Reactive current", "group": "Measurements", "area": "input", "address": 4, "type": "int16", "scale": 0.01, "unit": "%", "description": "100 % = 200 mA"},
    {"name": "Apparent current", "group": "Measurements", "area": "input", "address": 5, "type": "int16", "scale": 0.01, "unit": "%", "description": "100 % = 200 mA"},
    {"name": "Voltage level", "group": "Settings", "area": "holding", "address": 0, "type": "uint16", "scale": 0.1, "unit": "V", "access": "RW", "write_min": 100, "write_max": 135, "description": "Reference voltage level (raw 1000-1350)"},
    {"name": "Parallel operation method", "group": "Settings", "area": "holding", "address": 6, "type": "uint16", "access": "RW", "enum": "parallel_method"},
    {"name": "Paralleling group", "group": "Settings", "area": "holding", "address": 7, "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "Group 1", "2": "Group 2"}}
  ]
}
