{
 "manufacturer": "WEG",
 "manufacturer_slug": "weg",
 "model": "CFW500 frequency inverter (Modbus RTU)",
 "model_slug": "cfw500",
 "short_model": "CFW500",
 "aliases": [
  "CFW500 VFD",
  "CFW500-IOS",
  "CFW500-CRS485",
  "CFW500-CUSB",
  "CFW500-CRS232"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "WEG CFW500 drives as a Modbus RTU slave on the RS-485 port of the plug-in module (Modbus RTU User's Guide 10002253377 rev 04); parameter scaling from the V2.2X programming manual.",
 "summary": "WEG's general-purpose variable frequency drive. Over Modbus RTU every drive parameter is a 16-bit holding register whose address equals the parameter number, so P0680 status word is register 680 and P0682/P0683 control word and speed reference are 682/683. This map covers the read-only monitoring parameters, the status/control words, the command-source and serial-port setup parameters, and the network-driven digital/analog outputs.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 19200,
  "parity": "Even",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "0-based",
  "note": "The Modbus guide says parameters are mapped with offset zero: the parameter number is the holding register address (P0100 = address 100 = 0064h), and it lists P0680 at holding register address 680. So P0680 is requested as address 680; a master that numbers holding registers from 40001 needs 40681. Values travel as plain integers with no decimal point; the guide says the number of decimal places comes from the programming manual, so scale here follows the decimals in each parameter's range there (e.g. P0003 0.0-200.0 A -> 0.1 A)."
 },
 "default_word_order": null,
 "firmware": "Programming manual for software V2.2X (doc 10002296099 rev 07); Modbus guide rev 04 adds STO/Fire Mode status bits and PID control bits",
 "source": {
  "title": "Modbus RTU CFW500 User's Guide",
  "doc_number": "10002253377 / 04",
  "revision_date": "2025-06",
  "url": "https://static.weg.net/medias/downloadcenter/h73/ha4/WEG-CFW500-modbus-rtu-manual-10002253377-en.pdf",
  "pages": "Modbus guide: parameters ch. 4 printed pp. 4-1 to 4-13 (P0220-P0228, P0308-P0316, P0680-P0683, P0695-P0698), memory map and function codes ch. 5 pp. 5-1 to 5-2. Programming manual V2.2X: quick reference pp. 0-1 to 0-26, status/control words section 7.3 pp. 7-13 to 7-16, reading parameters ch. 18 pp. 18-1 to 18-6, fault history 17-8 to 17-10."
 },
 "notes": [
  "Scaling and the P0001-P0070 monitoring parameters come from the WEG CFW500 Programming Manual V2.2X, doc 10002296099 rev 07 (09/2024), https://static.weg.net/medias/downloadcenter/h69/h0f/WEG-CFW500-programming-manual-10002296099-en.pdf. Newer firmware (V3.x/V4.x) manuals were not available in English from WEG's server, so check P0023 on site; parameter numbers for these core points are the same in the R04 Modbus guide.",
  "P0001 and P0002 are left unscaled: they use the user scale from P0208 (full-scale value), P0209 (unit) and P0210 (decimal point). With the factory defaults the scale is Hz with one decimal.",
  "P0681 and P0683 use WEG's 13-bit scale: 8192 equals the motor rated frequency P0403, so Hz = value x P0403 / 8192, saturating at +/-32767 (4x rated).",
  "Left out: P0040/P0041 PID process variable and setpoint (decimal places depend on P0529), fault-history currents/voltages for the second and third faults (P0061-P0074, same format as P0051-P0055), and P0684/P0685 (fieldbus-card control word and reference, not used over the serial port).",
  "The R04 Modbus guide shows P0680 bit 0 as STO and bit 2 as Fire Mode, and P0682 bits 13/14 as internal/external PID manual select; the V2.2X programming manual marks those bits reserved. Older firmware will leave them at 0.",
  "The Modbus guide lists P0308 as 0-255; the programming manual lists 1-247. Use 1-247.",
  "Fault and alarm numbers are the F/A codes without the letter (P0049 = 228 means F0228 serial timeout).",
  "P0312 options 1, 3, 8, 9, 14 and 15 (SymbiNet and BACnet) come from the R04 Modbus guide; the V2.2X programming manual lists them as Reserved, so they need newer firmware."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 1,
   "documented": "P0001",
   "name": "Speed reference",
   "description": "Active speed reference in the P0208/P0209/P0210 display scale.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2,
   "documented": "P0002",
   "name": "Output speed (motor)",
   "description": "Output speed in the same display scale as P0001.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3,
   "documented": "P0003",
   "name": "Motor current",
   "description": "Output current, A rms.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4,
   "documented": "P0004",
   "name": "DC link voltage (Ud)",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5,
   "documented": "P0005",
   "name": "Output frequency",
   "description": "Actual frequency applied to the motor.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6,
   "documented": "P0006",
   "name": "Inverter status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Ready",
    "1": "Run",
    "2": "Undervoltage",
    "3": "Fault",
    "4": "Self-tuning",
    "5": "Configuration",
    "6": "DC braking",
    "7": "Sleep mode"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 7,
   "documented": "P0007",
   "name": "Output voltage",
   "description": "Line voltage at the drive output.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9,
   "documented": "P0009",
   "name": "Motor torque",
   "description": "Percent of rated motor torque; signed.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 10,
   "documented": "P0010",
   "name": "Output power",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 11,
   "documented": "P0011",
   "name": "Power factor",
   "description": "Signed, -1.00 to 1.00.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 12,
   "documented": "P0012",
   "name": "Digital input status DI1-DI8",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "DI1",
    "1": "DI2",
    "2": "DI3",
    "3": "DI4",
    "4": "DI5",
    "5": "DI6",
    "6": "DI7",
    "7": "DI8"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 13,
   "documented": "P0013",
   "name": "Digital output status DO1-DO5",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "DO1",
    "1": "DO2",
    "2": "DO3",
    "3": "DO4",
    "4": "DO5"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 18,
   "documented": "P0018",
   "name": "AI1 value",
   "description": "Analog input 1 after gain/offset, percent of full scale.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19,
   "documented": "P0019",
   "name": "AI2 value",
   "description": "Analog input 2 after gain/offset.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20,
   "documented": "P0020",
   "name": "AI3 value",
   "description": "Analog input 3 after gain/offset.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23,
   "documented": "P0023",
   "name": "Main software version",
   "description": "Control board firmware, e.g. 220 = 2.20.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30,
   "documented": "P0030",
   "name": "Power module temperature",
   "description": "Measured inside the power module; signed.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 37,
   "documented": "P0037",
   "name": "Motor overload Ixt",
   "description": "Overload integrator; fault F0072 at 100%.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 48,
   "documented": "P0048",
   "name": "Present alarm",
   "description": "Active alarm number (e.g. 128 = A0128), 0 if none.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 49,
   "documented": "P0049",
   "name": "Present fault",
   "description": "Active fault number (e.g. 228 = F0228), 0 if none.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 50,
   "documented": "P0050",
   "name": "Last fault",
   "description": "Number of the most recent fault.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 51,
   "documented": "P0051",
   "name": "Last fault current",
   "description": "Output current when the last fault tripped.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 52,
   "documented": "P0052",
   "name": "Last fault DC link",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 53,
   "documented": "P0053",
   "name": "Last fault frequency",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 55,
   "documented": "P0055",
   "name": "Last fault logical status",
   "description": "Copy of P0680 at the last fault.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "STO active (drive locked, A0160)",
    "1": "Run command present",
    "2": "Fire Mode active",
    "4": "Quick stop active",
    "5": "2nd ramp (P0102/P0103) in use",
    "6": "Config mode (parameter incompatibility, cannot enable)",
    "7": "Alarm present",
    "8": "Motor running per reference and command",
    "9": "Drive enabled and ready to run",
    "10": "1 = forward, 0 = reverse",
    "11": "JOG active",
    "12": "1 = Remote, 0 = Local",
    "13": "Undervoltage",
    "14": "PID in automatic (0 = manual)",
    "15": "Fault present"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 60,
   "documented": "P0060",
   "name": "Second fault",
   "description": "Number of the second most recent fault.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 70,
   "documented": "P0070",
   "name": "Third fault",
   "description": "Number of the third most recent fault.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 100,
   "documented": "P0100",
   "name": "Acceleration time",
   "description": "0.1-999.0 s; default 10.0 s.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 101,
   "documented": "P0101",
   "name": "Deceleration time",
   "description": "0.1-999.0 s; default 10.0 s.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 121,
   "documented": "P0121",
   "name": "Speed reference via HMI",
   "description": "Keypad reference used when P0221/P0222 = 0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 133,
   "documented": "P0133",
   "name": "Minimum speed",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 134,
   "documented": "P0134",
   "name": "Maximum speed",
   "description": "Default 66.0 Hz (60 Hz set) or 55.0 Hz (50 Hz set).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 202,
   "documented": "P0202",
   "name": "Type of control",
   "description": "Change only with the motor stopped.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "V/f",
    "3": "Sensorless vector",
    "4": "Vector with encoder",
    "5": "VVW",
    "8": "VVW PM"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 220,
   "documented": "P0220",
   "name": "LOC/REM selection source",
   "description": "Default 2.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Always LOC",
    "1": "Always REM",
    "2": "HMI key (LOC)",
    "3": "HMI key (REM)",
    "4": "DIx",
    "5": "Serial/USB (LOC)",
    "6": "Serial/USB (REM)",
    "9": "CO/DN/PB/Eth (LOC)",
    "10": "CO/DN/PB/Eth (REM)",
    "11": "SoftPLC"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 221,
   "documented": "P0221",
   "name": "LOC reference selection",
   "description": "Set 9 for speed reference from P0683.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "HMI keys",
    "1": "AI1",
    "2": "AI2",
    "3": "AI3",
    "4": "FI",
    "5": "AI1 + AI2 > 0",
    "6": "AI1 + AI2",
    "7": "Electronic potentiometer",
    "8": "Multispeed",
    "9": "Serial/USB",
    "11": "CO/DN/PB/Eth",
    "12": "SoftPLC",
    "14": "AI1 > 0",
    "15": "AI2 > 0",
    "16": "AI3 > 0",
    "17": "FI > 0"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 222,
   "documented": "P0222",
   "name": "REM reference selection",
   "description": "Same options as P0221; 9 = Serial/USB.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "HMI keys",
    "1": "AI1",
    "2": "AI2",
    "3": "AI3",
    "4": "FI",
    "5": "AI1 + AI2 > 0",
    "6": "AI1 + AI2",
    "7": "Electronic potentiometer",
    "8": "Multispeed",
    "9": "Serial/USB",
    "11": "CO/DN/PB/Eth",
    "12": "SoftPLC",
    "14": "AI1 > 0",
    "15": "AI2 > 0",
    "16": "AI3 > 0",
    "17": "FI > 0"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 223,
   "documented": "P0223",
   "name": "LOC rotation selection",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Clockwise",
    "1": "Counterclockwise",
    "2": "HMI key (FWD)",
    "3": "HMI key (REV)",
    "4": "DIx",
    "5": "Serial/USB (F)",
    "6": "Serial/USB (R)",
    "9": "CO/DN/PB/Eth (F)",
    "10": "CO/DN/PB/Eth (R)",
    "12": "SoftPLC"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 224,
   "documented": "P0224",
   "name": "LOC run/stop selection",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "HMI keys",
    "1": "DIx",
    "2": "Serial/USB",
    "4": "CO/DN/PB/Eth",
    "5": "SoftPLC"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 226,
   "documented": "P0226",
   "name": "REM rotation selection",
   "description": "Same options as P0223.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Clockwise",
    "1": "Counterclockwise",
    "2": "HMI key (FWD)",
    "3": "HMI key (REV)",
    "4": "DIx",
    "5": "Serial/USB (F)",
    "6": "Serial/USB (R)",
    "9": "CO/DN/PB/Eth (F)",
    "10": "CO/DN/PB/Eth (R)",
    "12": "SoftPLC"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 227,
   "documented": "P0227",
   "name": "REM run/stop selection",
   "description": "Set 2 to take run/stop from P0682.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "HMI keys",
    "1": "DIx",
    "2": "Serial/USB",
    "4": "CO/DN/PB/Eth",
    "5": "SoftPLC"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 229,
   "documented": "P0229",
   "name": "Stop mode selection",
   "description": "Applies to every command source.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Ramp to stop",
    "1": "Coast to stop",
    "2": "Quick stop (P0106)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 295,
   "documented": "P0295",
   "name": "Inverter rated current",
   "description": "Fixed by drive model.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 308,
   "documented": "P0308",
   "name": "Serial address",
   "description": "Modbus slave address; default 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 310,
   "documented": "P0310",
   "name": "Serial baud rate",
   "description": "Default 1 (19200).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "9600 bit/s",
    "1": "19200 bit/s",
    "2": "38400 bit/s"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 311,
   "documented": "P0311",
   "name": "Serial byte format",
   "description": "Default 1 (8E1).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "8 bits, no parity, 1 stop",
    "1": "8 bits, even, 1 stop",
    "2": "8 bits, odd, 1 stop",
    "3": "8 bits, no parity, 2 stop",
    "4": "8 bits, even, 2 stop",
    "5": "8 bits, odd, 2 stop"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 312,
   "documented": "P0312",
   "name": "Serial protocol",
   "description": "Default 2 (Modbus RTU slave on serial 1).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "HMI-1",
    "1": "SymbiNet-1",
    "2": "Modbus RTU-1",
    "3": "BACnet-1",
    "5": "Master RTU-1",
    "6": "HMI-1 / Modbus-2",
    "7": "Modbus RTU-2",
    "8": "HMI-1 / BACnet-2",
    "9": "BACnet-2",
    "12": "HMI-1 / Modbus master-2",
    "13": "RTU master-2",
    "14": "HMI-1 / SymbiNet-2",
    "15": "SymbiNet-2"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 313,
   "documented": "P0313",
   "name": "Communication error action",
   "description": "What the drive does on serial timeout; default 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Inactive",
    "1": "Ramp stop",
    "2": "General disable",
    "3": "Go to LOC",
    "4": "LOC keep enabled",
    "5": "Cause fault"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 314,
   "documented": "P0314",
   "name": "Serial watchdog",
   "description": "Timeout without valid telegrams; 0.0 = off (default).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 316,
   "documented": "P0316",
   "name": "Serial interface status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Inactive",
    "1": "Active",
    "2": "Watchdog error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 400,
   "documented": "P0400",
   "name": "Motor rated voltage",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 401,
   "documented": "P0401",
   "name": "Motor rated current",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "A",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 402,
   "documented": "P0402",
   "name": "Motor rated speed",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 403,
   "documented": "P0403",
   "name": "Motor rated frequency",
   "description": "8192 in P0681/P0683 equals this frequency.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 680,
   "documented": "P0680",
   "name": "Logical status (status word)",
   "description": "Main drive status word.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "STO active (drive locked, A0160)",
    "1": "Run command present",
    "2": "Fire Mode active",
    "4": "Quick stop active",
    "5": "2nd ramp (P0102/P0103) in use",
    "6": "Config mode (parameter incompatibility, cannot enable)",
    "7": "Alarm present",
    "8": "Motor running per reference and command",
    "9": "Drive enabled and ready to run",
    "10": "1 = forward, 0 = reverse",
    "11": "JOG active",
    "12": "1 = Remote, 0 = Local",
    "13": "Undervoltage",
    "14": "PID in automatic (0 = manual)",
    "15": "Fault present"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 681,
   "documented": "P0681",
   "name": "Speed in 13 bits",
   "description": "Signed; 8192 = P0403 rated frequency, negative = reverse.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 682,
   "documented": "P0682",
   "name": "Serial/USB control word",
   "description": "Writable only over the network.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "1 = run (accelerate to reference), 0 = ramp stop",
    "1": "General enable (0 = disable, motor coasts)",
    "2": "1 = run in reference direction (forward), 0 = reverse",
    "3": "JOG enable",
    "4": "1 = go to Remote, 0 = go to Local",
    "5": "Use 2nd ramp (P0102/P0103)",
    "6": "Quick stop",
    "7": "Fault reset (1 = reset if faulted)",
    "13": "Internal PID: 1 = manual, 0 = automatic (R04 manual)",
    "14": "External PID: 1 = manual, 0 = automatic (R04 manual)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 683,
   "documented": "P0683",
   "name": "Serial/USB speed reference",
   "description": "Signed 13-bit scale: 8192 = P0403; sign combines with P0682 bit 2.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 690,
   "documented": "P0690",
   "name": "Logical status 2",
   "description": "Extra status flags.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "4": "Output frequency reduction active",
    "5": "Sleep mode active",
    "6": "Decelerating",
    "7": "Accelerating",
    "8": "Ramp frozen",
    "9": "Output frequency reached reference",
    "10": "DC link regulation / current limit active (P0150)",
    "11": "Factory default loaded for 50 Hz (P0204 = 6)",
    "12": "Ride-through running",
    "13": "Flying start running",
    "14": "DC braking active",
    "15": "PWM output pulses enabled"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 695,
   "documented": "P0695",
   "name": "DOx value",
   "description": "Drives DO1-DO5 when that output's function is set to P0695.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "DO1 (1 = closed)",
    "1": "DO2 (1 = closed)",
    "2": "DO3 (1 = closed)",
    "3": "DO4 (1 = closed)",
    "4": "DO5 (1 = closed)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 696,
   "documented": "P0696",
   "name": "AOx value 1",
   "description": "Analog output value from network; 32767 = 100%.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 697,
   "documented": "P0697",
   "name": "AOx value 2",
   "description": "Analog output value from network; 32767 = 100%.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 698,
   "documented": "P0698",
   "name": "AOx value 3",
   "description": "Analog output value from network (AO3 = FO); 32767 = 100%.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Leave P0312 = 2 (Modbus RTU on the standard RS-485), match P0308/P0310/P0311 to the master, then point the remote command sources at Serial/USB (P0220, P0222 = 9, P0226, P0227 = 2). Write the P0682 control word (e.g. 0x0017 = run + general enable + forward + remote; 0x0016 = ramp stop) and P0683 in the 8192 = rated-frequency scale, and poll P0680, P0005, P0003 and P0049.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 682,
    "why": "Control word: run, enable, direction, fault reset"
   },
   {
    "table": "holding_register",
    "address": 683,
    "why": "Speed reference, 8192 = P0403"
   },
   {
    "table": "holding_register",
    "address": 680,
    "why": "Status word: running, remote, fault"
   },
   {
    "table": "holding_register",
    "address": 5,
    "why": "Output frequency (0.1 Hz)"
   },
   {
    "table": "holding_register",
    "address": 3,
    "why": "Motor current (0.1 A)"
   },
   {
    "table": "holding_register",
    "address": 4,
    "why": "DC link voltage"
   },
   {
    "table": "holding_register",
    "address": 49,
    "why": "Present fault number"
   },
   {
    "table": "holding_register",
    "address": 48,
    "why": "Present alarm number"
   }
  ],
  "enable": "P0312 selects the serial protocol (2 = Modbus RTU slave on serial 1, 7 = on the second port of a CRS485/CUSB/CRS232 module). Set P0308 address, P0310 baud and P0311 byte format. For network control set P0220 = 1 (always Remote) or 6 (Local/Remote switched by P0682 bit 4), P0222 = 9 (reference from P0683), P0226 = 5 or 6 (direction from P0682 bit 2) and P0227 = 2 (run/stop from P0682). Use P0221/P0223/P0224 instead if the drive runs in Local.",
  "watchdog": "P0314 Serial Watchdog (0.0-999.0 s, 0 = off by default) raises alarm A0128 when no valid telegram arrives in time; P0313 picks the reaction (0 none, 1 ramp stop default, 2 coast/general disable, 3 go to Local, 4 Local keeping the network commands, 5 fault F0228). Timing starts at the first valid telegram after power-up. P0316 shows 2 while the watchdog error is active.",
  "quirks": [
   "Register address = parameter number, no offset: P0680 is address 680 (40681 in 4x-style masters).",
   "Everything is a 16-bit integer with the decimal point dropped; check the programming manual for each parameter's decimals.",
   "P0683 speed reference is not in Hz: 8192 = motor rated frequency (P0403). For 30 Hz on a 60 Hz motor write 4096.",
   "Negative P0683 reverses the reference, and P0682 bit 2 also flips direction; both together cancel out.",
   "P0682 and P0683 show as read-only on the keypad but are writable over the network.",
   "Supported functions: 01, 02, 03, 04, 05, 06, 15, 16 and 43 (device identification)."
  ],
  "setup": [
   "RS-485 on the plug-in module terminals: the standard CFW500-IOS module carries A(-), B(+) and GND; check the terminal label of the fitted module (the Modbus guide and programming manual print different terminal numbers).",
   "Baud 9600, 19200 (default) or 38400; byte format 8N1, 8E1 (default), 8O1, 8N2, 8E2 or 8O2.",
   "Fit 120 ohm termination only at the two ends of the trunk; up to 32 devices per segment, 1000 m max.",
   "P0027 shows which plug-in module the drive detected.",
   "Most command-source parameters (P0220-P0228, P0312) are 'cfg' and can only be changed with the motor stopped."
  ],
  "gotchas": [
   "If a password is set in P0200, parameter writes are refused until the password is written to P0000; access resets at power-down.",
   "P0220 factory setting is 2 (HMI key, starting in Local), so network run commands are ignored until Remote is selected.",
   "Factory P0227 = 1 (digital inputs): network run/stop is ignored until it is set to 2.",
   "When the drive uses the RS-485 port for a remote keypad (P0312 = 0), Modbus is off on that port; use a two-port module and P0312 = 6 for keypad plus Modbus.",
   "With P0229 = 1 (coast stop), P0682 bit 0 behaves like bit 1 and the motor coasts."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/weg/cfw500",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
