{
 "manufacturer": "ABB",
 "manufacturer_slug": "abb",
 "model": "ACS355 machinery drive (embedded Modbus RTU)",
 "model_slug": "acs355",
 "short_model": "ACS355",
 "aliases": [
  "ACS355-01E",
  "ACS355-03E",
  "ACS355-01U",
  "ACS355-03U",
  "ACS355 with FMBA-01"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "ACS355 drives with firmware 5.110 or later using the embedded fieldbus (Modbus RTU) over an FMBA-01 adapter on terminal X3 (EIA-485) or the panel port (RS-232).",
 "summary": "ABB's compact machinery variable frequency drive. Its embedded Modbus RTU slave is reached through the plug-in FMBA-01 RS-485 adapter (or point-to-point RS-232 on the panel connector) and maps the control word, two references, the status word and up to eight selectable actual values into 40001-40012, a 32-bit DCU-profile control/status pair into 40031-40034, and every drive parameter NNNN into register 4NNNN. This map covers the control block, group 01 operating data, fault and alarm words, fault history and the comm settings; all values are 16-bit.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 9600,
  "parity": "None",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "Modicon",
  "note": "The manual lists 4xxxx holding registers and states that register 4xxxx is sent as xxxx - 1 in the Modbus message (its example: 40002 is addressed as 0001), so 40001 = wire address 0. Drive parameter NNNN sits at register 4NNNN (e.g. 0103 -> 40103, wire 102; 3018 -> 43018, wire 3017). Registers that do not correspond to a parameter return an exception."
 },
 "default_word_order": null,
 "firmware": "ACS355 firmware 5.110 or later",
 "source": {
  "title": "ACS355 drives user's manual",
  "doc_number": "3AUA0000066143 Rev E",
  "revision_date": "2020-11-02",
  "url": "https://search.abb.com/library/Download.aspx?DocumentID=3AUA0000066143&LanguageCode=en&DocumentPartId=1&Action=Launch",
  "pages": "Embedded fieldbus chapter printed pp. 313-337 (setup pp. 315-318, reference scaling p. 322, function codes pp. 324-326, register mapping and 'xxxx - 1' rule pp. 325-326, exception codes p. 327, ABB Drives CW/SW pp. 329-332, DCU words pp. 333-337); FbEq definition pp. 179-180; groups 01/03/04 pp. 183-190; 1607 p. 213; 3018/3019 p. 255; group 53 pp. 290-292; 9802 p. 307; AC500 Modbus macro defaults p. 118"
 },
 "notes": [
  "There are no 32-bit registers: the manual states all values read or written are limited to 16 bits. Signals that can be negative (0101, 0105, 0106, 0110, 0111, 0112, 0404, 0405, 0408) are listed as INT16.",
  "Scaling is the manual's FbEq column (fieldbus integer per unit, e.g. '1 = 0.1 Hz' -> scale 0.1).",
  "40001 and 40004 work only with 5305 = ABB DRV LIM or ABB DRV FULL; 40031-40034 work only with 5305 = DCU PROFILE. ABB DRV LIM (the default) ignores control word bits 4 (RAMP_OUT_ZERO) and 10 (REMOTE_CMD).",
  "Actual values 40005-40012 follow 5310-5317 (defaults: 40005 = 0103, 40006 = 0104, 40007-40012 unassigned). Their scaling is that of the chosen signal, so they are left unscaled here; 40007-40012 are not listed.",
  "Reference scaling (ABB Drives profile): REF1 20000 = 1105 REF1 MAX (speed or frequency); REF2 10000 = 1108 REF2 MAX (speed, frequency, torque or PID). 1104/1107 minimums do not affect the scaling.",
  "Defaults conflict inside the manual: group 53 lists 5302 = 1, 5303 = 9.6 kbit/s, 5304 = 8 NONE 1 and 9802 = NOT SEL, while the AC500 Modbus macro sets station 2, 19.2 kbit/s, 5304 = 1 (which the parameter list calls 8 NONE 2), ABB DRV FULL and STD MODBUS. The text of that macro also mislabels 5302 as 5303. The macro also sets 3018 = FAULT and re-points 5310-5312 to 0101, 0303 and 0305, so 40005-40007 then read speed & dir, DCU status word LSW and fault word 1. Check the drive.",
  "0111 External ref 1 is in 0.1 Hz or 1 rpm depending on 9904 Motor ctrl mode, so it is left unscaled.",
  "Left out: 0120-0139 analog I/O, PID and process-variable signals (units depend on configuration), 0160/0414 DI status (panel and binary encodings differ), 0402/0403 fault time stamps, 0409 status at fault, and all motor/application parameters.",
  "The group 03 fault and alarm words are documented as read-only actual signals, but the alarm word text says an alarm can be reset by writing zero to the word; they are marked R here.",
  "5318 EFB PAR 18 is left out: the group 53 parameter list describes it as an extra response delay in ms, while the exception-code section says it holds the most recent exception code, so its meaning cannot be pinned down from the manual."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 0,
   "documented": "40001",
   "name": "Control word (ABB Drives)",
   "description": "Only with 5305 = ABB DRV LIM or ABB DRV FULL; copy in 5319.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "OFF1 CONTROL: 1 = enter ready to operate, 0 = ramp stop (OFF1)",
    "1": "OFF2 CONTROL: 0 = emergency OFF, coast to stop",
    "2": "OFF3 CONTROL: 0 = emergency stop (time per 2208)",
    "3": "INHIBIT OPERATION: 1 = operation enabled (run), 0 = inhibit",
    "4": "RAMP_OUT_ZERO (ABB DRV FULL only): 0 = force ramp output to zero",
    "5": "RAMP_HOLD: 0 = hold ramp",
    "6": "RAMP_IN_ZERO: 0 = force ramp input to zero",
    "7": "RESET: 0->1 = fault reset (if 1604 = COMM)",
    "8": "Not in use",
    "9": "Not in use",
    "10": "REMOTE_CMD (ABB DRV FULL only): 1 = fieldbus control enabled",
    "11": "EXT CTRL LOC: 1 = select EXT2, 0 = select EXT1 (if 1102 = COMM)",
    "12": "Reserved",
    "13": "Reserved",
    "14": "Reserved",
    "15": "Reserved"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1,
   "documented": "40002",
   "name": "Reference 1 (REF1)",
   "description": "Signed; 20000 = value of 1105 REF1 MAX (speed or frequency).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2,
   "documented": "40003",
   "name": "Reference 2 (REF2)",
   "description": "Signed; 10000 = value of 1108 REF2 MAX (speed, torque or PID).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3,
   "documented": "40004",
   "name": "Status word (ABB Drives)",
   "description": "Only with 5305 = ABB DRV LIM or ABB DRV FULL; copy in 5320.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "RDY_ON: ready to switch on",
    "1": "RDY_RUN: ready to operate (0 = OFF1 active)",
    "2": "RDY_REF: operation enabled",
    "3": "TRIPPED: fault",
    "4": "OFF_2_STA: 1 = OFF2 inactive",
    "5": "OFF_3_STA: 1 = OFF3 inactive",
    "6": "SWC_ON_INHIB: switch-on inhibited",
    "7": "ALARM: alarm active",
    "8": "AT_SETPOINT: actual value within tolerance of reference",
    "9": "REMOTE: 1 = remote (EXT1/EXT2), 0 = local",
    "10": "ABOVE_LIMIT: supervised value (3201) above supervision limit",
    "11": "EXT CTRL LOC: 1 = EXT2 selected, 0 = EXT1",
    "12": "EXT RUN ENABLE: external run enable received",
    "13": "Reserved",
    "14": "Reserved",
    "15": "Reserved"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4,
   "documented": "40005",
   "name": "Actual value 1",
   "description": "Signal chosen by 5310 (default 0103 output frequency, 1 = 0.1 Hz).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5,
   "documented": "40006",
   "name": "Actual value 2",
   "description": "Signal chosen by 5311 (default 0104 current, 1 = 0.1 A).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30,
   "documented": "40031",
   "name": "DCU control word LSW (0301)",
   "description": "Only with 5305 = DCU PROFILE.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "STOP",
    "1": "START",
    "2": "REVERSE",
    "3": "LOCAL: 1 = local control mode",
    "4": "RESET: rising edge resets",
    "5": "EXT2: 1 = EXT2, 0 = EXT1",
    "6": "RUN_DISABLE",
    "7": "STPMODE_R: ramp stop (with bit 0)",
    "8": "STPMODE_EM: emergency stop (with bit 0)",
    "9": "STPMODE_C: coast stop (with bit 0)",
    "10": "RAMP_2: use ramp pair 2",
    "11": "RAMP_OUT_0",
    "12": "RAMP_HOLD",
    "13": "RAMP_IN_0",
    "14": "REQ_LOCALLOC: lock out panel local mode",
    "15": "TORQLIM2: use torque limit set 2"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 31,
   "documented": "40032",
   "name": "DCU control word MSW (0302)",
   "description": "Only with 5305 = DCU PROFILE; bit n here is DCU bit 16+n.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "FBLOCAL_CTL (bit 16): fieldbus local mode for control word",
    "1": "FBLOCAL_REF (bit 17): fieldbus local mode for reference",
    "2": "START_DISABLE1 (bit 18): 1 = no start enable 1",
    "3": "START_DISABLE2 (bit 19): 1 = no start enable 2",
    "4": "JOGGING 1 (bit 20)",
    "5": "JOGGING 2 (bit 21)",
    "11": "REF_CONST (bit 27): internal, supervision only",
    "12": "REF_AVE (bit 28): internal, supervision only",
    "13": "LINK_ON (bit 29): internal, supervision only",
    "14": "REQ_STARTINH (bit 30): start inhibit",
    "15": "Reserved (bit 31)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 32,
   "documented": "40033",
   "name": "DCU status word LSW (0303)",
   "description": "Only with 5305 = DCU PROFILE.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "READY",
    "1": "ENABLED: external run enable received",
    "2": "STARTED",
    "3": "RUNNING: modulating",
    "4": "ZERO_SPEED",
    "5": "ACCELERATE",
    "6": "DECELERATE",
    "7": "AT_SETPOINT",
    "8": "LIMIT",
    "9": "SUPERVISION: supervised value out of limits",
    "10": "REV_REF: reference reverse",
    "11": "REV_ACT: running reverse",
    "12": "PANEL_LOCAL",
    "13": "FIELDBUS_LOCAL",
    "14": "EXT2_ACT",
    "15": "FAULT"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 33,
   "documented": "40034",
   "name": "DCU status word MSW (0304)",
   "description": "Only with 5305 = DCU PROFILE; bit n here is DCU bit 16+n.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "ALARM (bit 16)",
    "1": "NOTICE (bit 17): maintenance request",
    "2": "DIRLOCK (bit 18)",
    "3": "LOCALLOCK (bit 19)",
    "4": "CTL_MODE (bit 20): 1 = vector, 0 = scalar",
    "5": "JOGGING ACTIVE (bit 21)",
    "10": "REQ_CTL (bit 26): control word requested from fieldbus",
    "11": "REQ_REF1 (bit 27)",
    "12": "REQ_REF2 (bit 28)",
    "13": "REQ_REF2EXT (bit 29)",
    "14": "ACK_STARTINH (bit 30): start inhibit from fieldbus",
    "15": "Reserved (bit 31)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 100,
   "documented": "40101",
   "name": "0101 Speed & dir",
   "description": "Calculated motor speed; negative = reverse.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 101,
   "documented": "40102",
   "name": "0102 Speed",
   "description": "Calculated motor speed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 102,
   "documented": "40103",
   "name": "0103 Output freq",
   "description": "Calculated output frequency.",
   "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": 103,
   "documented": "40104",
   "name": "0104 Current",
   "description": "Measured motor current.",
   "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": 104,
   "documented": "40105",
   "name": "0105 Torque",
   "description": "Calculated torque, percent of motor nominal.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 105,
   "documented": "40106",
   "name": "0106 Power",
   "description": "Measured motor power.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 106,
   "documented": "40107",
   "name": "0107 DC bus voltage",
   "description": "Measured intermediate circuit voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 108,
   "documented": "40109",
   "name": "0109 Output voltage",
   "description": "Calculated motor voltage (AC).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 109,
   "documented": "40110",
   "name": "0110 Drive temp",
   "description": "Measured IGBT temperature.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 110,
   "documented": "40111",
   "name": "0111 External ref 1",
   "description": "REF1: 0.1 Hz or 1 rpm per 9904; unscaled here.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 111,
   "documented": "40112",
   "name": "0112 External ref 2",
   "description": "REF2 as percent.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 112,
   "documented": "40113",
   "name": "0113 Ctrl location",
   "description": "Active control location.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "LOCAL",
    "1": "EXT1",
    "2": "EXT2"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 113,
   "documented": "40114",
   "name": "0114 Run time (R)",
   "description": "Resettable running-hours counter.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 114,
   "documented": "40115",
   "name": "0115 kWh counter (R)",
   "description": "Resettable; rolls over to 0 after 65535.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 139,
   "documented": "40140",
   "name": "0140 Run time",
   "description": "Non-resettable running time in thousands of hours.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "kh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 140,
   "documented": "40141",
   "name": "0141 MWh counter",
   "description": "Non-resettable; rolls over to 0 after 65535.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "MWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 142,
   "documented": "40143",
   "name": "0143 Drive on time hi",
   "description": "Control board power-on time, days.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "days",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 149,
   "documented": "40150",
   "name": "0150 CB temp",
   "description": "Control board temperature.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 161,
   "documented": "40162",
   "name": "0162 RO status",
   "description": "Relay output 1 state.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "De-energized",
    "1": "Energized"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 171,
   "documented": "40172",
   "name": "0172 Abs torque",
   "description": "Absolute motor torque, percent of nominal.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 304,
   "documented": "40305",
   "name": "0305 Fault word 1",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "OVERCURRENT",
    "1": "DC OVERVOLT",
    "2": "DEV OVERTEMP",
    "3": "SHORT CIRC",
    "4": "Reserved",
    "5": "DC UNDERVOLT",
    "6": "AI1 LOSS",
    "7": "AI2 LOSS",
    "8": "MOT OVERTEMP",
    "9": "PANEL LOSS",
    "10": "ID RUN FAIL",
    "11": "MOTOR STALL",
    "12": "CB OVERTEMP",
    "13": "EXT FAULT 1",
    "14": "EXT FAULT 2",
    "15": "EARTH FAULT"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 305,
   "documented": "40306",
   "name": "0306 Fault word 2",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "UNDERLOAD",
    "1": "THERM FAIL",
    "2": "Reserved",
    "3": "Reserved",
    "4": "CURR MEAS",
    "5": "SUPPLY PHASE",
    "6": "ENCODER ERR",
    "7": "OVERSPEED",
    "8": "Reserved",
    "9": "Reserved",
    "10": "CONFIG FILE",
    "11": "SERIAL 1 ERR (fieldbus comm loss)",
    "12": "EFB CON FILE",
    "13": "FORCE TRIP",
    "14": "MOTOR PHASE",
    "15": "OUTP WIRING"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 306,
   "documented": "40307",
   "name": "0307 Fault word 3",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "3": "INCOMPATIBLE SW",
    "4": "SAFE TORQUE OFF",
    "5": "STO1 LOST",
    "6": "STO2 LOST",
    "11": "CB ID ERROR",
    "12": "DSP STACK ERROR",
    "13": "DSP T1-T3 OVERLOAD",
    "14": "SERF CORRUPT / SERF MACRO",
    "15": "PAR faults (PCU, HZRPM, AI/AO scale, FBUSMISS, USER U/F, SETUP)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 307,
   "documented": "40308",
   "name": "0308 Alarm word 1",
   "description": "Manual says writing 0 resets the whole word.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "OVERCURRENT",
    "1": "OVERVOLTAGE",
    "2": "UNDERVOLTAGE",
    "3": "DIR LOCK",
    "4": "IO COMM",
    "5": "AI1 LOSS",
    "6": "AI2 LOSS",
    "7": "PANEL LOSS",
    "8": "DEVICE OVERTEMP",
    "9": "MOTOR TEMP",
    "10": "UNDERLOAD",
    "11": "MOTOR STALL",
    "12": "AUTORESET",
    "13": "Reserved",
    "14": "Reserved",
    "15": "Reserved"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 308,
   "documented": "40309",
   "name": "0309 Alarm word 2",
   "description": "Manual says writing 0 resets the whole word.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Reserved",
    "1": "PID SLEEP",
    "2": "ID RUN",
    "3": "Reserved",
    "4": "START ENABLE 1 MISSING",
    "5": "START ENABLE 2 MISSING",
    "6": "EMERGENCY STOP",
    "7": "ENCODER ERROR",
    "8": "FIRST START",
    "9": "INPUT PHASE LOSS",
    "10": "Reserved",
    "11": "Reserved",
    "12": "MOTOR BACK EMF",
    "13": "SAFE TORQUE OFF",
    "14": "Reserved",
    "15": "Reserved"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 400,
   "documented": "40401",
   "name": "0401 Last fault",
   "description": "Code of the latest fault; 0 = history clear.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 403,
   "documented": "40404",
   "name": "0404 Speed at flt",
   "description": "Motor speed when the latest fault occurred.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 404,
   "documented": "40405",
   "name": "0405 Freq at flt",
   "description": "Output frequency when the latest fault occurred.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 405,
   "documented": "40406",
   "name": "0406 Voltage at flt",
   "description": "DC bus voltage when the latest fault occurred.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 406,
   "documented": "40407",
   "name": "0407 Current at flt",
   "description": "Motor current when the latest fault occurred.",
   "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": 407,
   "documented": "40408",
   "name": "0408 Torque at flt",
   "description": "Torque (percent of nominal) at the latest fault.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 411,
   "documented": "40412",
   "name": "0412 Previous fault 1",
   "description": "Code of the 2nd latest fault.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 412,
   "documented": "40413",
   "name": "0413 Previous fault 2",
   "description": "Code of the 3rd latest fault.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1606,
   "documented": "41607",
   "name": "1607 Param save",
   "description": "Write 1 to store parameters; fieldbus writes are otherwise volatile.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "DONE",
    "1": "SAVE (in progress)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3017,
   "documented": "43018",
   "name": "3018 Comm fault func",
   "description": "Reaction to fieldbus communication loss.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "NOT SEL",
    "1": "FAULT (trip SERIAL 1 ERR, coast)",
    "2": "CONST SP 7 (alarm, run at 1208)",
    "3": "LAST SPEED (alarm, hold 10 s average speed)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3018,
   "documented": "43019",
   "name": "3019 Comm fault time",
   "description": "Delay before 3018 acts (0.0-600.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": 5301,
   "documented": "45302",
   "name": "5302 EFB station ID",
   "description": "Modbus slave address (0-247).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5302,
   "documented": "45303",
   "name": "5303 EFB baud rate",
   "description": "Baud in 0.1 kbit/s units (e.g. 96 = 9.6 kbit/s).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "kbit/s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5303,
   "documented": "45304",
   "name": "5304 EFB parity",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "8 NONE 1",
    "1": "8 NONE 2",
    "2": "8 EVEN 1",
    "3": "8 ODD 1"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5304,
   "documented": "45305",
   "name": "5305 EFB ctrl profile",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "ABB DRV LIM",
    "1": "DCU PROFILE",
    "2": "ABB DRV FULL"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5305,
   "documented": "45306",
   "name": "5306 EFB OK messages",
   "description": "Valid messages received; should keep rising.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5306,
   "documented": "45307",
   "name": "5307 EFB CRC errors",
   "description": "Messages received with a CRC error.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5309,
   "documented": "45310",
   "name": "5310 EFB par 10",
   "description": "Parameter index shown at 40005 (default 103).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5310,
   "documented": "45311",
   "name": "5311 EFB par 11",
   "description": "Parameter index shown at 40006 (default 104).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9801,
   "documented": "49802",
   "name": "9802 Comm prot sel",
   "description": "Enables the embedded Modbus and picks the port.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "NOT SEL",
    "1": "STD MODBUS (EIA-485 via FMBA-01)",
    "4": "EXT FBA",
    "10": "MODBUS RS232 (panel port)"
   },
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Fit the FMBA-01 adapter, set 9802 = STD MODBUS and the group 53 link settings, then cycle power. Set 5305 = ABB DRV FULL, point 1001 EXT1 COMMANDS and 1103 REF1 SELECT at COMM, write the control word and REF1 at 40001/40002 and poll the status word plus the default actual values (output frequency, current) at 40004-40006.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 0,
    "why": "Control word: start/stop/reset"
   },
   {
    "table": "holding_register",
    "address": 1,
    "why": "REF1 speed/frequency setpoint (20000 = 1105)"
   },
   {
    "table": "holding_register",
    "address": 3,
    "why": "Status word: ready/running/fault/remote"
   },
   {
    "table": "holding_register",
    "address": 102,
    "why": "0103 Output frequency, 0.1 Hz"
   },
   {
    "table": "holding_register",
    "address": 103,
    "why": "0104 Motor current, 0.1 A"
   },
   {
    "table": "holding_register",
    "address": 106,
    "why": "0107 DC bus voltage"
   },
   {
    "table": "holding_register",
    "address": 400,
    "why": "0401 Last fault code"
   },
   {
    "table": "holding_register",
    "address": 304,
    "why": "0305 Fault word 1"
   }
  ],
  "enable": "Set 9802 COMM PROT SEL = STD MODBUS (EIA-485 through FMBA-01 on X3) or MODBUS RS232 (panel connector, max 3 m). Set 5302 station ID, 5303 baud, 5304 parity and 5305 profile; new settings apply at the next power-up or after clearing and re-entering 5302. For control set 1001 EXT1 COMMANDS = COMM (1002 for EXT2), 1103 REF1 SELECT = COMM, and optionally 1102 EXT1/EXT2 SEL, 1601 RUN ENABLE and 1604 FAULT RESET SEL = COMM. Save fieldbus parameter writes with 1607 PARAM SAVE.",
  "watchdog": "3018 COMM FAULT FUNC (NOT SEL default / FAULT / CONST SP 7 / LAST SPEED) after the delay in 3019 COMM FAULT TIME (default 3.0 s, 0.1 s steps). FAULT trips SERIAL 1 ERR (0028) and coasts; the other two raise alarm IO COMM (2005) and keep running. The supervision is inactive for 60 s after start-up.",
  "quirks": [
   "Register 4xxxx is wire address xxxx - 1 (40001 = 0); parameter NNNN is register 4NNNN.",
   "Everything is 16-bit; there is no word-order setting to worry about.",
   "Start per the ABB Drives state diagram with ABB DRV FULL: write 0x0476 (1142) to 40001, then 0x0477 (1143) once status bit 0 is 1, then 0x047F (1151) to run. Bit 10 (REMOTE_CMD) and bit 4 are marked ABB DRV FULL only; with FULL and bit 10 = 0 the drive keeps the last control word and reference unless both are 0. Fault reset is a 0->1 edge on bit 7 with 1604 = COMM.",
   "Control word bit 3 needs the run enable signal (1601); with 1601 = COMM the bit itself provides it.",
   "Only function codes 03, 06, 08, 16 (10h) and 23 (17h) are supported; there are no coils, discrete inputs or input registers."
  ],
  "setup": [
   "The EIA-485 port is the optional FMBA-01 module plugged into drive terminal X3; its wiring and termination are in the FMBA-01 user's manual (3AFE68586704).",
   "The RS-232 option uses the control panel connector and is point-to-point, cable length at most 3 m.",
   "Parameter-list defaults: station 1, 9.6 kbit/s, 8 data bits, no parity, 1 stop bit, ABB DRV LIM profile; 1.2-115.2 kbit/s selectable.",
   "5306 EFB OK MESSAGES should keep rising during polling; a rising 5307 EFB CRC ERRORS points to noise or a CRC/baud mismatch."
  ],
  "gotchas": [
   "Embedded Modbus does nothing until 9802 is set; the default is NOT SEL.",
   "Parameter writes over Modbus are volatile until 1607 PARAM SAVE is written.",
   "Exception 03 covers out-of-range values, read-only parameters, too-long messages and writes refused while the drive is started. 5318 is documented both as the last exception code and as a response delay, so it is not listed here and should not be relied on as a diagnostic.",
   "The AC500 Modbus application macro changes the comm defaults (station 2, 19.2 kbit/s, ABB DRV FULL), so a drive set up with that macro will not answer at the parameter-list defaults."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/abb/acs355",
 "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."
}
