# Property of PMA Electrical Solutions, LLC. # # ABB ACS580MV — medium-voltage drive on the UCU control platform, running the # "ACS580MV primary control program". # # CLAIMS ONLY ACS580MV. This is NOT the low-voltage ACS580. The two share a # marketing name and nothing else that this profile relies on: different # hardware, different control unit, different firmware manual, different fault # code table. profiles/abb_acs580.toml was not consulted for any value here and # must not be used as a cross-check. No sibling MV product (ACS2000, ACS6000) # is claimed either. # # ── Communication path ──────────────────────────────────────────────────────── # NO EMBEDDED MODBUS RTU. Doc 2UBB007758 p.137 states, for the 20.01 Ext1 # commands source list, "Embedded fieldbus — Not applicable for ACS580MV." # Modbus RTU is available only through a plug-in fieldbus adapter module: # doc 2UBB007758 p.13 (glossary) "FSCA-0x — Optional Modbus adapter", and # 50.01 enable / group 51 select the option slot the adapter sits in. # The firmware manual declines to publish register numbers itself — p.324, # section "Fieldbus addresses", reads in full: "Refer to the User's manual of # the fieldbus adapter." So the register map below comes from the FSCA-01/-02 # manual, doc 3AUA0000109533 rev C. # # Caveat, stated rather than smoothed over: the FSCA-01 manual's own # compatibility list (3AUA0000109533 p.12) names ACS355, ACSM1, ACH580, # ACQ580, ACS580, ACS530, ACS850, ACS860, ACQ810 and ACS880 — it does NOT name # ACS580MV. The link between the two documents is the ACS580MV manual's own # glossary entry above plus 2UBB007758 pp.260/263, where the FBA type value # "485 = FSCA" is an ACS580MV selection. That is a real primary-source link but # a thin one. The Group A <-> group 51 mapping is settled by the documents # themselves: 2UBB007758 p.436 step 10 instructs "setting parameter 51.27 par # refresh to Refresh", which is exactly FSCA-01 Group A parameter 27 "FBA par # refresh" (3AUA0000109533 p.39) — so Group A parameter N is drive parameter # 51.N (51.02 Profile, 51.12 Address mode, 51.27 refresh). # # ── Documents ───────────────────────────────────────────────────────────────── # 2UBB007758 rev C, ACS580MV UCU primary control program firmware manual # p.13 FSCA-0x named as the Modbus adapter # p.137 embedded fieldbus explicitly not applicable. (pp.287-289 — # 82.04 MCB ON CMD EFB and "Comm. EFB" selections — are vestigial # ACS580-LV boilerplate contradicted by p.137 and by the absence # of group 58 from the parameter listing.) # pp.61-62, 67-68, 319 parameter listing, 16-bit FbEq scalings # pp.325-327 Additional parameter data — FbEq32 column ONLY (p.323 says # so; NOT the source of any 16-bit scale in this file — its # 01.01 row reads "100 = 1 rpm" against the 0.075 used here) # pp.246-247 46.01…46.05 scaling parameters # pp.254-255 group 50 Fieldbus adapter (FBA) # p.324 "Fieldbus addresses — Refer to the User's manual of the adapter" # pp.431-436 references, actual values, control word, status word, # state diagram, drive-side setup procedure # pp.399-426 fault message table (hex codes) # 3AUA0000109533 rev C, FSCA-01/-02 RS-485 adapter module user's manual # pp.35-37 Group A adapter configuration parameters and defaults # pp.70, 74 register addressing, ABB Drives profile - Classic map # # ── Addressing formula ──────────────────────────────────────────────────────── # FSCA-01 manual p.74 states the map in 6-digit holding-register notation # ("(4)00001" style). Conversion used throughout this file: # 0-based protocol address = 6-digit number - 400001 # For parameter access the manual gives # Register Address = (4)00000 + 100 x Group + Index # so # 0-based protocol address = 100 * group + index - 1 # Worked example, the manual's own (p.74): parameter 3.18 -> (4)00318 -> # 0-based 317. Applied here: 01.06 Output frequency -> 100*1 + 6 - 1 = 105. # Profile block, same conversion: (4)00001 control word -> 0, (4)00002 REF1 # -> 1, (4)00004 status word -> 3. # This assumes FSCA-01 Group A parameter 12 Address mode = Mode 0 (the # manual's default) and parameter 02 Profile = 0 ABB Classic (also default). # Mode 1-3 and the Enhanced profile move everything; check them on the unit. # # ── Drive-side setup (2UBB007758 p.436, steps 3-11) ─────────────────────────── # 50.01 enable = the option slot holding the FSCA-0x (default Disable) # 50.02 comm loss func = Fault (trips 7510 FBA A communication) # 50.03 comm loss t out = timeout, default 0.3 s, minimum 0.3 s # 50.04/50.05 ref type, 50.07/50.08 actual type — scaling selection # group 51 FBA A settings — node address and control profile, minimum needed # groups 52/53 FBA A data in/out — process data selection # 96.07 Parameter save manually = Save, then 51.27 par refresh = Refresh # THEN groups 22 / 26 / 28 must point EXT1 or EXT2 at the fieldbus adapter # (p.431). Without that last step the adapter acknowledges every write and # the drive ignores the reference — the standard ABB fieldbus-enable trap. # # ── Scaling is configuration-dependent, not fixed ───────────────────────────── # The 16-bit fieldbus scalings below are the FbEq16 column of the parameter # listing. Several of them read "See par. 46.0x", meaning the count-to-engineering # ratio is set by group 46 and changes with drive configuration: # 46.01 Speed scaling default 1500.00 rpm <-> 20000 counts # 46.02 Frequency scaling default 50.00 Hz <-> 20000 counts # 46.03 Torque scaling default 100.0 % <-> 10000 counts # 46.04 Power scaling default 1000.00 kW <-> 10000 counts # 46.05 Current scaling default 10000 A <-> 10000 counts # The scale values here are computed from those DEFAULTS. Read 46.01-46.05 off # the actual drive before trusting a number. # # GAP, named not guessed: writable parameter ranges for clone/restore were not # established, so there is deliberately no [parameters] block — see the note # above that block's absence at the end of this file. # # verified = false. Documentation only. Nothing here has met an ACS580MV. name = "ABB ACS580MV" vendor = "ABB" device_type = "vfd" verified = false probe_register = 3 # ABB Drives Profile Status, (4)00004 # FSCA-01 Group A defaults, 3AUA0000109533 pp.35-36: # 04 Baud rate = 0 (9.6 kbit/s), 05 Parity = 0 (8 None 1). [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] # ABB Drives profile - Classic register block, 3AUA0000109533 p.74. control_word = { address = 0, bits = { 0 = "OFF1", 1 = "OFF2_N", 2 = "OFF3_N", 3 = "RUN", 4 = "RAMP_OUT_ZERO_N", 5 = "RAMP_HOLD_N", 6 = "RAMP_IN_ZERO_N", 7 = "RESET", 8 = "INCHING_1", 9 = "INCHING_2", 10 = "REMOTE_CMD", 11 = "EXT_CTRL_LOC" } } reference_1 = { address = 1, signed = true, scale = 0.005, unit = "%" } # 20000 = 100% of the selected 46.0x scaling status_word = { address = 3, bits = { 0 = "RDY_ON", 1 = "RDY_RUN", 2 = "RDY_REF", 3 = "TRIPPED", 4 = "OFF_2_INACTIVE", 5 = "OFF_3_INACTIVE", 6 = "SWC_ON_INHIB", 7 = "WARNING", 8 = "AT_SETPOINT", 9 = "REMOTE", 10 = "USER_BIT_4", 11 = "USER_BIT_0", 12 = "USER_BIT_1", 13 = "USER_BIT_2", 14 = "USER_BIT_3" } } # Group 01 Actual values, 2UBB007758 pp.61-62 (FbEq16 column). motor_speed = { address = 100, signed = true, scale = 0.075, unit = "rpm" } # 01.01, via 46.01 — CONFIG-DEPENDENT output_frequency = { address = 105, signed = true, scale = 0.0025, unit = "Hz" } # 01.06, via 46.02 — CONFIG-DEPENDENT motor_current = { address = 106, scale = 1.0, unit = "A" } # 01.07, FbEq16 "1 A = 1 A" at the 46.05 default (10000 A) — CONFIG-DEPENDENT grid_current = { address = 107, scale = 1.0, unit = "A" } # 01.08, transformer primary rms; scaled by 46.05 (p.247) — CONFIG-DEPENDENT motor_torque = { address = 109, signed = true, scale = 0.01, unit = "%" } # 01.10, via 46.03 — CONFIG-DEPENDENT dc_voltage = { address = 110, scale = 0.1, unit = "V" } # 01.11, FbEq16 "10 = 1 V" output_voltage = { address = 112, unit = "V" } # 01.13, FbEq16 "1 = 1 V" # 01.14 FbEq16 prints "1 = 1 unit" (p.62) while 46.04 governs the fieldbus # actual-value path (10000 = 46.04, default 1000 kW). The two do not agree; # the FbEq16 column is used here because that is what direct 16-bit parameter # access returns. Confirm against the panel reading on the unit. output_power = { address = 113, signed = true, scale = 1.0, unit = "kW" } # unit follows 96.16 Unit selection (kW or hp, p.62) # 04.02 / 04.03: two further CONCURRENT active faults, not history. active_fault_2 = { address = 401 } active_fault_3 = { address = 402 } # 82.02 MCB/Charging status word and 82.05 MCB/Charging fault word (pp.286- # 287): on an MV drive the main circuit breaker state is the usual reason a # correct run word produces no motion. Raw words — the p.286 bit tables were # not transcribed; do not decode from memory. mcb_status = { address = 8201 } # 82.02 mcb_fault = { address = 8204 } # 82.05 # ABB Drives profile control word, 2UBB007758 p.433, state diagram p.435. # Sequence values re-derived bit by bit from p.433 against the diagram: # 0x0476 = bits 1,2,4,5,6,10 — OFF1 low (stop), OFF2/OFF3 inactive, ramp # bits normal, fieldbus control enabled. # 0x047F = 0x0476 + bit0 (Off1 control) + bit3 (Run) — OPERATION ENABLED. # 0x04F6 = 0x0476 + bit7, the rising edge that resets a fault. # Bit 10 Remote cmd must stay 1 throughout or the drive ignores everything # except bits 0-2 (p.433). [control] command_register = 0 speed_register = 1 speed_scale = 0.005 # 20000 raw = 100% of the scaling selected by 50.04/50.05 speed_signed = true # direction is the SIGN OF THE REFERENCE (p.431, two's complement) speed_unit = "%" # PERCENT of 46.01/46.02/46.03/46.04, not Hz max_ref = 100.0 step_delay = 0.05 stop = [0x0476] run_fwd = [0x0476, 0x047F] reset = [0x0476, 0x04F6, 0x0476] # No reset_register: reset is bit 7 of the control word on this profile, there # is no separate reset holding register. # No run_rev: on the ABB Drives profile a reverse control word is byte-identical # to forward. Reverse by writing a negative reference (speed_signed = true). # 50.02 comm loss func = Fault trips "7510 FBA A communication"; 50.03 comm # loss t out defaults to 0.3 s and cannot be set below it (p.254-255). The # manual's own rule of thumb is to transmit at least 3x faster than the # timeout, so 100 ms. [control.watchdog] interval_ms = 100 fault = "7510 FBA A communication" # Status word bit 2 Ready ref = OPERATION ENABLED (p.434). Bit 8 At setpoint # means "actual equals reference within 46.21-46.23" and is a tolerance flag, # not a running flag, so bit 2 is the running proxy. [running_check] register = 3 bit = 2 # 04.01 Tripping fault (code of the fault that caused the current trip), # 2UBB007758 p.67. Stored history is 04.11-04.13, p.68. [faults] register = 400 history = [410, 411, 412] # Codes are hex in the manual (pp.399-426, "Fault messages"); TOML keys must be # numeric strings, so these are the decimal equivalents with the hex shown. # This is a SELECTION of the operationally meaningful entries from a long # MV-specific table, not the whole table — the manual also carries an extensive # per-power-module (PM/PEBB) fault set that is diagnostic rather than # actionable from a Modbus master. Nothing here is inferred; every entry was # read off the fault table. [faults.codes] 0 = "No fault" 4112 = "0x1010 Power module fault" 8464 = "0x2110 Trafo overcurrent" 8472 = "0x2118 Unintended MCB closed" 8476 = "0x211C Grid phase loss" 9040 = "0x2350 Motor overcurrent phase U2" 9045 = "0x2355 Motor phase U2 lost" 9046 = "0x2356 Motor phase V2 lost" 9047 = "0x2357 Motor phase W2 lost" 9052 = "0x235C Inverter overcurrent" 12848 = "0x3230 PM DC link overvoltage" 13107 = "0x3333 Ground fault" 16656 = "0x4110 Control board temperature" 16928 = "0x4220 PM heatsink overtemperature" 18817 = "0x4981 External temperature 1" 20481 = "0x5001 Control board power fail" 20641 = "0x50A1 Emergency OFF button pressed" 25088 = "0x6200 Checksum mismatch" 28961 = "0x7121 Motor stall" 29456 = "0x7310 Overspeed" 29680 = "0x73F0 Overfrequency" 29968 = "0x7510 FBA A communication" 29984 = "0x7520 FBA B communication" # 99.06 Motor nominal current, 2UBB007758 p.319: range 0.0-6400.0 A, # FbEq16 "1 = 1 A". Address = 100*99 + 6 - 1 = 9905. # This is the MOTOR nameplate current, not a drive frame-size code — ABB does # not expose a frame identifier in the 16-bit parameter space that was located # in this pass. It is still the strongest available guard: restoring a # configuration onto a drive whose commissioned motor rating differs is exactly # the mismatch that must block a restore on a 6-11 kV machine. [rating] register = 9905 words = 1 scale = 1.0 unit = "A" label = "Motor nominal current (99.06)" # NO [parameters] BLOCK, DELIBERATELY. Mode 0 does map every parameter into # (4)00101…(4)09999, so clone/restore addressing is documented — but which of # groups 01-99 are writable was not established, and the ACS580MV listing marks # many parameters "cannot be changed while the drive is running" (e.g. 99.03, # 99.06-99.09) without a machine-readable RW/RO column. Writing a range that # includes read-only or hardware-configuration parameters is how a restore # corrupts a replacement drive. On a medium-voltage machine that is not a risk # worth a guess. [connection] summary = "The ACS580MV has no embedded Modbus RTU; install an FSCA-0x adapter in an enabled fieldbus option slot." warnings = ["Medium voltage is lethal. Only qualified personnel following the ACS580MV grounding, isolation and discharge procedure may enter the cabinet.","The FSCA compatibility link is documented by the ACS580MV firmware manual's own FSCA selection; this profile remains unverified on hardware."] [[connection.methods]] id = "fsca_01_rs485" title = "FSCA-01/-02 RS-485 adapter" transport = "serial" hardware = "option" port = "FSCA-01/-02 connector X1 in the drive option slot" connector = "4-pole detachable terminal: 1 SHLD, 2 DATA_B positive, 3 DATA_A negative, 4 GND_B" adapter = "Isolated USB-to-RS-485 adapter" cable = "Shielded twisted pair plus isolated signal-ground conductor" parts = ["ABB FSCA-01 or FSCA-02","Isolated USB-to-RS-485 adapter","Shielded twisted pair plus signal common","TX10 screwdriver"] steps = ["Lock out all power and wait at least five minutes for the DC bus to discharge.","Install the FSCA module in an allowed option slot according to the exact drive hardware manual; secure the mounting screw.","Land the bus on X1 using the literal terminal mapping below.","Set the FSCA termination jumper on only when this module is at a physical end of the trunk.","Restore control power with the motor inhibited, refresh the adapter parameters, and verify a read before enabling control."] setup = ["Set 50.01 to the option slot containing FSCA; set 50.02/50.03 loss action and timeout.","Configure group 51 for ABB Classic, station, baud, parity and Mode 0; save with 96.07 and refresh with 51.27.","Point the applicable EXT command/reference sources to the fieldbus adapter."] warnings = ["The FSCA path uses fieldbus-adapter groups 50-53/51, not embedded-fieldbus group 58.","Terminate only the two physical bus ends.","Do not treat the low-voltage ACS580 X5 instructions as applicable to ACS580MV."] source = "ABB 2UBB007758 Rev C, pp. 13, 137, 254-255 and 431-436; ABB 3AUA0000109533 Rev C, pp. 28-39." [[connection.methods.wiring]] adapter = "D+ / B / positive" device = "X1:2 DATA_B" signal = "RS-485 data positive" [[connection.methods.wiring]] adapter = "D- / A / negative" device = "X1:3 DATA_A" signal = "RS-485 data negative" [[connection.methods.wiring]] adapter = "COM / signal common" device = "X1:4 GND_B" signal = "Isolated signal ground" [[connection.methods.wiring]] adapter = "Cable shield" device = "X1:1 SHLD" signal = "Shield/chassis bond" required = false