{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "WEG",
  "model": "CFW700",
  "models": [
    "CFW700"
  ],
  "vendor_website": "weg.net",
  "description": "Frequency inverter with Modbus RTU: monitoring, status and control words, speed and ramp settings, motor data and serial settings",
  "revision": 1,
  "revised": "2026-11-10",
  "source": "WEG CFW700 Modbus RTU User's Manual 10001123706/01 and CFW700 programming manual V2.3X 10001006640/05",
  "sources": [
    {
      "title": "WEG CFW700 Modbus RTU User's Manual",
      "version": "10001123706 / 01",
      "date": "2011-05",
      "url": "https://static.weg.net/medias/downloadcenter/h14/h6b/WEG-cfw700-modbus-rtu-10001123706-manual-english.pdf",
      "note": "linked in issue #193; memory map, status and control words, serial parameters"
    },
    {
      "title": "WEG CFW700 manual de programación (V2.3X)",
      "version": "10001006640 / 05",
      "url": "https://static.weg.net/medias/downloadcenter/ha7/h93/WEG-CFW700-manual-de-programacion-10001006640-es.pdf",
      "note": "linked in issue #193; ranges and units of the monitoring and setting parameters"
    }
  ],
  "notes": [
    "Every parameter Pxxxx is the holding register of the same number (P0003 is register 3, address offset zero); the Modicon address is 40001 + the number.",
    "Values travel as integers: a parameter shown as 1.5 A is sent as 15. The scales follow the decimal places of the programming manual.",
    "Only the parameters used most in monitoring and control are listed, not the full parameter list of the programming manual. Other parameters can be added in the same way (register = parameter number).",
    "P0001 and P0002 are shown in rpm with the factory units; they follow the scale and unit chosen in the display parameters.",
    "P0682 and P0683 can be written only through the serial interface, and the drive must use serial as command and reference source (P0105, P0220 to P0228).",
    "Baud rate, parity and address defaults follow the factory values in the Modbus manual (P0308 = 1, P0310 = 1, P0311 = 0); the drive can be set to 57600 bit/s.",
    "Written from the manufacturer's documents; not tested on a device. The Modbus manual is dated 2011 and the programming manual is V2.3X: newer firmware may add parameters."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 19200,
  "databits": 8,
  "parity": "N",
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "official",
  "enums": {
    "inverter_status": {"0": "Ready", "1": "Run", "2": "Undervoltage", "3": "Fault", "4": "Self-tuning", "5": "Configuration", "6": "DC braking", "7": "STO"},
    "baud": {"0": "9600 bit/s", "1": "19200 bit/s", "2": "38400 bit/s", "3": "57600 bit/s"},
    "bytes": {"0": "8 data bits, no parity, 1 stop bit", "1": "8 data bits, even parity, 1 stop bit", "2": "8 data bits, odd parity, 1 stop bit", "3": "8 data bits, no parity, 2 stop bits", "4": "8 data bits, even parity, 2 stop bits", "5": "8 data bits, odd parity, 2 stop bits"},
    "comm_error": {"0": "Inactive", "1": "Disable via Run/Stop", "2": "Disable via General Enable", "3": "Change to local", "4": "Change to local, keeping commands and reference", "5": "Cause a fault"},
    "serial_status": {"0": "Inactive", "1": "Active", "2": "Watchdog error"}
  },
  "registers": [
    {"name": "Speed reference", "group": "Monitoring", "area": "holding", "address": 1, "type": "uint16", "access": "R", "unit": "rpm", "description": "P0001"},
    {"name": "Motor speed", "group": "Monitoring", "area": "holding", "address": 2, "type": "uint16", "access": "R", "unit": "rpm", "description": "P0002"},
    {"name": "Motor current", "group": "Monitoring", "area": "holding", "address": 3, "type": "uint16", "access": "R", "scale": 0.1, "unit": "A", "description": "P0003"},
    {"name": "DC link voltage", "group": "Monitoring", "area": "holding", "address": 4, "type": "uint16", "access": "R", "unit": "V", "description": "P0004"},
    {"name": "Motor frequency", "group": "Monitoring", "area": "holding", "address": 5, "type": "uint16", "access": "R", "scale": 0.1, "unit": "Hz", "description": "P0005"},
    {"name": "Inverter status", "group": "Monitoring", "area": "holding", "address": 6, "type": "uint16", "access": "R", "enum": "inverter_status", "description": "P0006"},
    {"name": "Output voltage", "group": "Monitoring", "area": "holding", "address": 7, "type": "uint16", "access": "R", "unit": "V", "description": "P0007"},
    {"name": "Motor torque", "group": "Monitoring", "area": "holding", "address": 9, "type": "int16", "access": "R", "scale": 0.1, "unit": "%", "description": "P0009"},
    {"name": "Output power", "group": "Monitoring", "area": "holding", "address": 10, "type": "uint16", "access": "R", "scale": 0.1, "unit": "kW", "description": "P0010"},
    {"name": "Output power factor", "group": "Monitoring", "area": "holding", "address": 11, "type": "uint16", "access": "R", "scale": 0.01, "description": "P0011; cos phi of the output"},
    {"name": "DI status", "group": "Inputs and outputs", "area": "holding", "address": 12, "type": "uint16", "access": "R", "description": "P0012; bit field DI1 to DI8, see the programming manual"},
    {"name": "DO status", "group": "Inputs and outputs", "area": "holding", "address": 13, "type": "uint16", "access": "R", "description": "P0013; bit field DO1 to DO5, see the programming manual"},
    {"name": "AO1 value", "group": "Inputs and outputs", "area": "holding", "address": 14, "type": "uint16", "access": "R", "scale": 0.01, "unit": "%", "description": "P0014"},
    {"name": "AO2 value", "group": "Inputs and outputs", "area": "holding", "address": 15, "type": "uint16", "access": "R", "scale": 0.01, "unit": "%", "description": "P0015"},
    {"name": "AI1 value", "group": "Inputs and outputs", "area": "holding", "address": 18, "type": "int16", "access": "R", "scale": 0.01, "unit": "%", "description": "P0018"},
    {"name": "AI2 value", "group": "Inputs and outputs", "area": "holding", "address": 19, "type": "int16", "access": "R", "scale": 0.01, "unit": "%", "description": "P0019"},
    {"name": "Software version", "group": "Device", "area": "holding", "address": 23, "type": "uint16", "access": "R", "scale": 0.01, "role": "firmware", "description": "P0023"},
    {"name": "IGBT temperature (arm U)", "group": "Monitoring", "area": "holding", "address": 30, "type": "int16", "access": "R", "scale": 0.1, "unit": "°C", "description": "P0030"},
    {"name": "Internal air temperature", "group": "Monitoring", "area": "holding", "address": 34, "type": "int16", "access": "R", "scale": 0.1, "unit": "°C", "description": "P0034"},
    {"name": "Fan speed", "group": "Monitoring", "area": "holding", "address": 36, "type": "uint16", "access": "R", "unit": "rpm", "description": "P0036"},
    {"name": "Motor overload", "group": "Monitoring", "area": "holding", "address": 37, "type": "uint16", "access": "R", "unit": "%", "description": "P0037; a fault occurs at 100 %"},
    {"name": "Hours energized", "group": "Monitoring", "area": "holding", "address": 42, "type": "uint16", "access": "R", "unit": "h", "description": "P0042"},
    {"name": "Hours enabled", "group": "Monitoring", "area": "holding", "address": 43, "type": "uint16", "access": "R", "scale": 0.1, "unit": "h", "description": "P0043"},
    {"name": "Energy counter", "group": "Monitoring", "area": "holding", "address": 44, "type": "uint16", "access": "R", "unit": "kWh", "description": "P0044; calculated indirectly, not for billing"},
    {"name": "Fan on hours", "group": "Monitoring", "area": "holding", "address": 45, "type": "uint16", "access": "R", "unit": "h", "description": "P0045"},
    {"name": "Present alarm", "group": "Alarms and faults", "area": "holding", "address": 48, "type": "uint16", "access": "R", "description": "P0048; alarm number"},
    {"name": "Present fault", "group": "Alarms and faults", "area": "holding", "address": 49, "type": "uint16", "access": "R", "description": "P0049; fault number"},
    {"name": "Acceleration time", "group": "Settings", "area": "holding", "address": 100, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "s", "write_min": 0, "write_max": 999, "description": "P0100"},
    {"name": "Deceleration time", "group": "Settings", "area": "holding", "address": 101, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "s", "write_min": 0, "write_max": 999, "description": "P0101"},
    {"name": "Speed reference via HMI", "group": "Settings", "area": "holding", "address": 121, "type": "uint16", "access": "RW", "unit": "rpm", "write_min": 0, "write_max": 18000, "description": "P0121"},
    {"name": "Minimum speed", "group": "Settings", "area": "holding", "address": 133, "type": "uint16", "access": "RW", "unit": "rpm", "write_min": 0, "write_max": 18000, "description": "P0133"},
    {"name": "Maximum speed", "group": "Settings", "area": "holding", "address": 134, "type": "uint16", "access": "RW", "unit": "rpm", "write_min": 0, "write_max": 18000, "description": "P0134"},
    {"name": "Serial address", "group": "Serial communication", "area": "holding", "address": 308, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247, "description": "P0308; changed only with the motor stopped"},
    {"name": "Serial baud rate", "group": "Serial communication", "area": "holding", "address": 310, "type": "uint16", "access": "RW", "enum": "baud", "description": "P0310; changed only with the motor stopped"},
    {"name": "Serial byte configuration", "group": "Serial communication", "area": "holding", "address": 311, "type": "uint16", "access": "RW", "enum": "bytes", "description": "P0311; changed only with the motor stopped"},
    {"name": "Communication error action", "group": "Serial communication", "area": "holding", "address": 313, "type": "uint16", "access": "RW", "enum": "comm_error", "description": "P0313; changed only with the motor stopped"},
    {"name": "Serial watchdog", "group": "Serial communication", "area": "holding", "address": 314, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "s", "write_min": 0, "write_max": 999, "description": "P0314; 0 disables; changed only with the motor stopped"},
    {"name": "Serial interface status", "group": "Serial communication", "area": "holding", "address": 316, "type": "uint16", "access": "R", "enum": "serial_status", "description": "P0316"},
    {"name": "Rated motor voltage", "group": "Motor", "area": "holding", "address": 400, "type": "uint16", "access": "RW", "unit": "V", "write_min": 0, "write_max": 600, "description": "P0400"},
    {"name": "Rated motor speed", "group": "Motor", "area": "holding", "address": 402, "type": "uint16", "access": "RW", "unit": "rpm", "write_min": 0, "write_max": 18000, "description": "P0402"},
    {"name": "Rated motor frequency", "group": "Motor", "area": "holding", "address": 403, "type": "uint16", "access": "RW", "unit": "Hz", "write_min": 0, "write_max": 300, "description": "P0403"},
    {"name": "Fast stop active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 4, "description": "1 = fast stop command being executed"},
    {"name": "Second ramp active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 5, "description": "1 = second ramp (P0102/P0103) in use"},
    {"name": "In configuration mode", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 6, "description": "1 = drive cannot be enabled (self-tuning, start-up routine, incompatible setting, etc.)"},
    {"name": "Alarm active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 7, "description": "1 = alarm condition"},
    {"name": "Motor running", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 8, "description": "1 = running or ramping"},
    {"name": "General enable active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 9, "description": "1 = general enable on"},
    {"name": "Forward direction", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 10, "description": "1 = forward, 0 = reverse"},
    {"name": "JOG active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 11},
    {"name": "Remote mode", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 12, "description": "1 = remote, 0 = local"},
    {"name": "Undervoltage", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 13},
    {"name": "Fault active", "group": "Status word", "area": "holding", "address": 680, "type": "bool", "access": "R", "bit": 15, "description": "1 = fault condition"},
    {"name": "Status word", "group": "Status word", "area": "holding", "address": 680, "type": "uint16", "access": "R", "description": "P0680; full 16-bit word"},
    {"name": "Motor speed (13 bit)", "group": "Control", "area": "holding", "address": 681, "type": "int16", "access": "R", "description": "P0681; 8192 = synchronous speed, negative = reverse"},
    {"name": "Control word", "group": "Control", "area": "holding", "address": 682, "type": "uint16", "access": "RW", "description": "P0682; full 16-bit word; writable only via serial, which must be the command source (P0105, P0220 to P0228)"},
    {"name": "Run", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 0, "description": "1 = run, 0 = stop by ramp"},
    {"name": "General enable", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 1, "description": "1 = enable, 0 = disable"},
    {"name": "Direction as reference", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 2, "description": "1 = follow the reference sign, 0 = opposite"},
    {"name": "JOG", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 3},
    {"name": "Remote", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 4, "description": "1 = remote, 0 = local"},
    {"name": "Second ramp", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 5, "description": "1 = use the second ramp"},
    {"name": "Fast stop", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 6, "description": "not allowed in V/f or VVW control"},
    {"name": "Fault reset", "group": "Control word", "area": "holding", "address": 682, "type": "bool", "access": "RW", "bit": 7, "description": "1 = reset a fault"},
    {"name": "Serial speed reference (13 bit)", "group": "Control", "area": "holding", "address": 683, "type": "int16", "access": "RW", "write_min": -32768, "write_max": 32767, "description": "P0683; 8192 = synchronous speed, negative = reverse; serial must be the reference source (P0221, P0222)"},
    {"name": "Digital output setting", "group": "Control", "area": "holding", "address": 695, "type": "uint16", "access": "RW", "description": "P0695; bit 0 to 4 set DO1 to DO5 when their function is P0695 content"},
    {"name": "Analog output value 1", "group": "Control", "area": "holding", "address": 696, "type": "int16", "access": "RW", "description": "P0696; 32767 = 100 % of the output"},
    {"name": "Analog output value 2", "group": "Control", "area": "holding", "address": 697, "type": "int16", "access": "RW", "description": "P0697; 32767 = 100 % of the output"}
  ]
}
