# Property of PMA Electrical Solutions, LLC. # # ABB ACSM1 machinery drive, SPEED AND TORQUE CONTROL PROGRAM, over an # FSCA-01 RS-485 adapter module speaking Modbus RTU. ONLY that combination is # claimed: the Motion Control program (UMFI151x2) and the Regen Supply program # have their own firmware manuals and were not opened, and the FMBA-01 module # is on this drive a DRIVE-TO-DRIVE link medium (57.15 D2D COMM PORT, [FW] # PDF p. 159; Appendix B p. 319), never a fieldbus master interface — an # earlier research pass wrongly concluded the ACSM1 was unsupportable by # proving the FMBA-01 manual has no protocol chapter, which is expected and # proves nothing about master Modbus control. # # SOURCES — ABB primary documentation only. Page numbers are PDF index == # printed page (offset 0) unless marked: # [FSCA] 3AUA0000109533 Rev C, FSCA-01/-02 RS-485 adapter user's manual # p. 12 Compatibility: "ACSM1" named in the supported-drives list # pp. 35-36 Group A configuration parameters and DEFAULTS: 02 Profile # = 0 ABB Classic, 03 Station ID = 1, 04 Baud = 9.6 kbit/s, # 05 Parity = 0 (8 None 1), 06 Modbus timeout = 0 and # 07 Timeout mode = 0 None (i.e. adapter timeout DISABLED) # pp. 49-53 "Starting up ACSM1 drives" + parameter setting examples # (incl. the ±20000 = 25.02 SPEED SCALING statement, p. 50) # pp. 61-64 ABB Drives profile control word / status word bit tables # p. 65 state machine # p. 66 reference scaling (0…20000 = 0…100% of the speed scaling # value; negative = two's complement = reverse) # p. 70 6-digit register addressing convention # p. 74 ABB Drives profile - Classic register map and the # parameter-access formula, worked example 3.18 -> (4)00318 # [FW] UMFI148x1 EN, ACSM1 Speed and Torque Control Program Firmware Manual # p. 55 group 01 actual signals (widths from the index, pp. 186-187) # pp. 65-69 group 06 status words; 8.01 ACTIVE FAULT / 8.02 LAST FAULT # ("Fault code of the latest (active) fault", enum, 16-bit) # p. 108 25.02 SPEED SCALING (0…30000 rpm, default 1500) # pp. 149-150 50.02 COMM LOSS FUNC / 50.03 COMM LOSS T OUT # pp. 208-216 fault message table (the [faults.codes] below) # # COMMUNICATION PROFILE COMMITTED: ABB Drives profile - CLASSIC, the Group A # parameter 02 FACTORY DEFAULT ([FSCA] p. 35). The Classic map ([FSCA] p. 74): # (4)00001 Control word -> 0 (4)00004 Status word -> 3 # (4)00002 Reference 1 -> 1 (4)00005 Actual 1 -> 4 # (4)00003 Reference 2 -> 2 (4)00006 Actual 2 -> 5 # The ABB ENHANCED profile (Group A par 02 = 1, the p. 51 example) moves the # status/actual block to (4)00051+ — this file does NOT apply to a unit set # to Enhanced or Transparent. Check drive par 51.02 before arming. # # ADDRESSING — 0-based = 6-digit register - 400001. Parameter access (16-bit # window, [FSCA] p. 74): register = (4)00000 + 100*group + index, so # 0-based address = 100 * group + index - 1 # manual's own example: par 3.18 -> (4)00318 -> 317 # 1.05 CURRENT PERC -> 100*1 + 5 - 1 = 104 # 8.01 ACTIVE FAULT -> 100*8 + 1 - 1 = 800 # Assumes Group A par 12 Address mode = Mode 0, the default ([FSCA] p. 37). # TRANSCRIPTION TRAP in the p. 74 table itself: the DATA IN rows print # seven-digit "(4)000010…(4)000012" — read as (4)00010…(4)00012 per the p. 70 # six-digit convention. None of them is mapped here. # # 32-BIT PARAMETERS ARE NOT REACHABLE THROUGH THIS FILE. Most ACSM1 group 01 # actual signals are 32-bit REALs ([FW] index pp. 186-187: 1.01, 1.02, 1.03, # 1.04, 1.07, 1.08 all "Data len. 32"); what a 16-bit window read of one # returns is undocumented, so only the 16-bit signals (1.05 CURRENT PERC and # 1.06 TORQUE, both "16") are mapped. The FSCA's separate 32-bit access # window was not used: its formula and its printed address range contradict # each other for high group numbers, unresolved in the document. # # DRIVE-SIDE SETUP ([FSCA] pp. 49-53) — without these the drive ACKs and # ignores: # 50.01 FBA ENABLE = Enable # 50.02 COMM LOSS FUNC = Fault (the startup example's value; see watchdog) # 50.03 COMM LOSS T OUT = e.g. 3.0 s # 50.04 FBA REF1 MODESEL = Speed # 51.02 (Group A 02) Profile = 0 ABB Classic — THE DEFAULT, and what this # file assumes # 51.03 station ID, 51.04 baud, 51.05 parity — defaults 1 / 9.6k / 8N1 # 51.06 Modbus timeout / 51.07 Timeout mode — DEFAULT IS DISABLED (0/None, # [FSCA] p. 36); set e.g. 10 / 2 (Ctrl write) for a 1 s adapter-side # timeout # then 51.27 FBA PAR REFRESH = REFRESH to apply, and point the drive's # EXT1 start/stop and reference selectors at FBA per the p. 52 example. # # REFERENCE: ±20000 = ±100% of par 25.02 SPEED SCALING (default 1500 rpm, # [FW] p. 108) — a CONFIGURED base, so percent is the only honest unit here. # Direction is the SIGN of the reference (two's complement, [FSCA] p. 66); # the ABB Drives control word has no reverse bit, so run_rev is absent. name = "ABB ACSM1" vendor = "ABB" device_type = "vfd" verified = false probe_register = 3 # Classic-profile Status word, readable whenever the adapter is up # Group A defaults, [FSCA] pp. 35-36: 9.6 kbit/s, 8 None 1. [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] control_word = { address = 0, bits = { 0 = "OFF1_CONTROL", 1 = "OFF2_CONTROL_N", 2 = "OFF3_CONTROL_N", 3 = "INHIBIT_OPERATION_N", 4 = "RAMP_OUT_ZERO_N", 5 = "RAMP_HOLD_N", 6 = "RAMP_IN_ZERO_N", 7 = "RESET", 10 = "REMOTE_CMD", 11 = "EXT_CTRL_LOC" } } reference_1 = { address = 1, signed = true, scale = 0.005, unit = "%" } # ±20000 = ±100% of 25.02 # REF2: ±10000 = 32.04 TORQUE REF 1 MAX under the p. 50 example config — # meaning and scale follow 50.05 FBA REF2 MODESEL, so raw display only. reference_2 = { address = 2, signed = true } status_word = { address = 3, bits = { 0 = "RDY_ON", 1 = "RDY_RUN", 2 = "RDY_REF", 3 = "TRIPPED", 4 = "OFF_2_STA", 5 = "OFF_3_STA", 6 = "SWC_ON_INHIB", 7 = "ALARM", 8 = "AT_SETPOINT", 9 = "REMOTE", 10 = "ABOVE_LIMIT", 12 = "EXT_RUN_ENABLE" } } # Actual 1/2 contents are assigned by the adapter/profile configuration # ([FSCA] p. 50 note 1); raw display, no scale asserted. actual_1 = { address = 4 } actual_2 = { address = 5 } # The only 16-bit group 01 signals ([FW] index p. 186: "Data len. 16"). current_pct = { address = 104, scale = 0.1, unit = "%" } # 1.05 CURRENT PERC, 1 = 10 motor_torque = { address = 105, signed = true, scale = 0.1, unit = "%" } # 1.06 TORQUE, 1 = 10, -1600…1600 # 6.01 STATUS WORD 1, Pb 16-bit ([FW] p. 65). Raw display; bit names not # transcribed here. drive_status_1 = { address = 600 } # ABB Drives profile control word, [FSCA] pp. 61-64, state machine p. 65. # The state machine's run condition is "CW = xxxx x1xx xxxx 1111" — bit 10 # REMOTE_CMD must be high, hence the 0x04xx family: # 0x0476 = bits 1,2,4,5,6,10 — OFF1 low = stop along the active decel ramp # 0x047F = bits 0-6 + 10 — OPERATION [control] command_register = 0 speed_register = 1 speed_scale = 0.005 # ±20000 raw = ±100% of 25.02 SPEED SCALING speed_signed = true # direction IS the sign of the reference speed_unit = "%" # percent of 25.02, NOT rpm and NOT Hz max_ref = 100.0 step_delay = 0.05 stop = [0x0476] run_fwd = [0x0476, 0x047F] # Bit 7 RESET is edge-triggered (0->1, [FSCA] p. 62) and pulsed on top of the # stop word: OFF1 and INHIBIT_OPERATION stay low throughout, so no step is a # run command, and OFF2/OFF3 stay high so no emergency-off is commanded. reset = [0x0476, 0x04F6, 0x0476] # run_rev deliberately absent — no reverse bit exists in the ABB Drives CW; # reverse with a negative reference. # Two timeouts, both DISABLED by default: adapter Group A 06/07 default 0/None # ([FSCA] p. 36), and drive 50.02 COMM LOSS FUNC must be set to Fault for the # drive to trip 0045 FIELDBUS COMM after 50.03 COMM LOSS T OUT ([FW] # pp. 149-150). An out-of-the-box unit keeps running when the master goes # quiet — set both. [control.watchdog] interval_ms = 500 fault = "0045 FIELDBUS COMM (only if 50.02 COMM LOSS FUNC = Fault; both drive and adapter timeouts are disabled by default)" # SW bit 2 RDY_REF = OPERATION ENABLED ([FSCA] p. 63) — the same choice as # every ABB Drives profile sibling in this repo. Bit 8 AT_SETPOINT is false # through every ramp and is not a substitute. [running_check] register = 3 bit = 2 # 8.01 ACTIVE FAULT ("Fault code of the latest (active) fault") at 800, then # 8.02 LAST FAULT at 801 — both enum, 16-bit ([FW] p. 69, index p. 187). # CODE NAMESPACE CAVEAT: the [FW] fault table (pp. 208-216) prints a decimal # panel code AND a parenthesised fieldbus code (e.g. 0x7310) per entry. The # keys below are the DECIMAL PANEL CODES — the table's own Code column and # the natural value of an enum parameter. If a bench read of 800 returns # values like 29456 instead of 32, the register carries the fieldbus code and # this table must be re-keyed. Do not mix the two namespaces. [faults] register = 800 history = [801] # [FW] "Fault messages generated by the drive", pp. 208-216, transcribed # complete (codes 0041-0044, 0048, 0059-0060 etc. are not printed — the # table's own gaps, not omissions here). [faults.codes] 0 = "No fault" 1 = "0001 OVERCURRENT" 2 = "0002 DC OVERVOLTAGE" 3 = "0003 DEVICE OVERTEMP" 4 = "0004 SHORT CIRCUIT" 5 = "0005 DC UNDERVOLTAGE" 6 = "0006 EARTH FAULT" 7 = "0007 FAN FAULT" 8 = "0008 IGBT OVERTEMP" 9 = "0009 BC WIRING" 10 = "0010 BC SHORT CIRCUIT" 11 = "0011 BC OVERHEAT" 12 = "0012 BR OVERHEAT" 13 = "0013 CURR MEAS GAIN" 14 = "0014 CABLE CROSS CON" 15 = "0015 SUPPLY PHASE" 16 = "0016 MOTOR PHASE" 17 = "0017 ID-RUN FAULT" 18 = "0018 CURR U2 MEAS" 19 = "0019 CURR V2 MEAS" 20 = "0020 CURR W2 MEAS" 21 = "0021 STO1 LOST" 22 = "0022 STO2 LOST" 23 = "0023 STO MODE CHANGE" 24 = "0024 INTBOARD OVERTEMP" 25 = "0025 BC MOD OVERTEMP" 26 = "0026 AUTOPHASING" 27 = "0027 PU LOST" 28 = "0028 PS COMM" 29 = "0029 IN CHOKE TEMP" 30 = "0030 EXTERNAL" 31 = "0031 SAFE TORQUE OFF" 32 = "0032 OVERSPEED" 33 = "0033 BRAKE START TORQUE" 34 = "0034 BRAKE NOT CLOSED" 35 = "0035 BRAKE NOT OPEN" 36 = "0036 LOCAL CTRL LOSS" 37 = "0037 NVMEMCORRUPTED" 38 = "0038 OPTION COMM LOSS" 39 = "0039 ENCODER1" 40 = "0040 ENCODER2" 45 = "0045 FIELDBUS COMM" 46 = "0046 FB MAPPING FILE" 47 = "0047 MOTOR OVERTEMP" 49 = "0049 AI SUPERVISION" 50 = "0050 ENCODER 1 CABLE" 51 = "0051 ENCODER 2 CABLE" 52 = "0052 D2D CONFIG" 53 = "0053 D2D COMM" 54 = "0054 D2D BUF OVLOAD" 55 = "0055 TECH LIB" 56 = "0056 TECH LIB CRITICAL" 57 = "0057 FORCED TRIP" 58 = "0058 FIELDBUS PAR ERROR" 61 = "0061 SPEED FEEDBACK" 62 = "0062 D2D SLOT COMM" 201 = "0201 T2 OVERLOAD" 202 = "0202 T3 OVERLOAD" 203 = "0203 T4 OVERLOAD" 204 = "0204 T5 OVERLOAD" 205 = "0205 A1 OVERLOAD" 206 = "0206 A2 OVERLOAD" 207 = "0207 A1 INIT FAULT" 208 = "0208 A2 INIT FAULT" 209 = "0209 STACK ERROR" 210 = "0210 FPGA ERROR" 301 = "0301 UFF FILE READ" 302 = "0302 APPL DIR CREATION" 303 = "0303 FPGA CONFIG DIR" 304 = "0304 PU RATING ID" 305 = "0305 RATING DATABASE" 306 = "0306 LICENSING" 307 = "0307 DEFAULT FILE" 308 = "0308 APPL FILE PAR CONF" 309 = "0309 APPL LOADING" 310 = "0310 USERSET LOAD" 311 = "0311 USERSET SAVE" 312 = "0312 UFF OVERSIZE" 313 = "0313 UFF EOF" 314 = "0314 TECH LIB INTERFACE" 315 = "0315 RESTORE FILE" 316 = "0316 DAPS MISMATCH" 317 = "0317 SOLUTION FAULT" # NO [rating] BLOCK — GAP, NAMED. 99.06 MOT NOM CURRENT exists ([FW] index # p. 198: REAL, 0…6400 A, FbEq 1 = 10) but is 32-BIT, and the FSCA-01's # 32-bit access window has an unresolved internal contradiction (its formula # for group 99 lands outside its own printed address range), so no rating # register can be sourced without a bench. A restore has nothing to compare # against on this profile. # # NO [parameters] BLOCK. Writable ranges were not mined from the ~140-page # parameter listing, and most settings are 32-bit REALs the 16-bit window # cannot carry faithfully. Clone/restore is unsupported for this drive. [connection] summary = "The ACSM1 profile uses an FSCA-01/-02 RS-485 adapter; the FMBA-01 port is a drive-to-drive medium on this family and is not this Modbus path." warnings = ["Use ABB Classic and Mode 0; Enhanced or Transparent profiles move the register block."] [[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 = Enable and configure 50.02/50.03 loss handling.","Set 51.02 = ABB Classic, 51.03 node, 51.04 baud, 51.05 parity and 51.12 = Mode 0.","Refresh with 51.27 and point the ACSM1 command/reference selectors at FBA."] warnings = ["The FSCA path uses fieldbus-adapter groups 50-53/51, not embedded-fieldbus group 58.","Terminate only the two physical bus ends."] source = "ABB 3AUA0000109533 Rev C, pp. 12, 28-39 and 49-53; ACSM1 UMFI148x1." [[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