# Property of PMA Electrical Solutions, LLC. # # Allen-Bradley PowerFlex 7000 MEDIUM VOLTAGE AC drive (2.4-6.6 kV). # MEDIUM VOLTAGE. Every value below moves a multi-megawatt machine. Nothing in # this file has been on a bench. # # MODEL COVERAGE # Bulletin numbers 7000A, 7000 and 7000L — the three bulletins named on the # cover of 7000-TD002K-EN-P, which is one parameter manual for all three. # NOT CLAIMED, and deliberately so: # - PowerFlex 6000 / 6000T (different platform, different manual) # - ABB/any other MV drive # - PowerFlex 750-Series, 700-Series or any low-voltage PowerFlex — those # have their own profiles and a different parameter numbering. # # MODBUS PATH ASSUMED BY THIS PROFILE # The PowerFlex 7000 has NO embedded Modbus port. Its own documentation set # (7000-TD001, 7000-TD002, 7000-UM201) contains ZERO occurrences of "Modbus": # the drive speaks SCANport/DPI to its peripherals, EtherNet/IP only from the # HMI board, and DAN/DCSL between paralleled cabinets. # Modbus RTU reaches it only through a **20-COMM-H RS-485 HVAC adapter** on a # DPI port, with the adapter's protocol selector switch set to Modbus RTU and # the adapter in its default 16-bit parameter mode (adapter par 32 # [RTU Param Mode] = 0). # - 20COMM-UM009D-EN-P p. 1-2, "Compatible Products" table: the Modbus RTU # row is checked in the **7000** column. That is the vendor statement this # whole profile rests on. # - The adapter manual's worked examples are PowerFlex 70/700. Its Logic # Command / Logic Status bit tables (pp. 4-6…4-8) are therefore NOT valid # here; the PowerFlex 7000's own bit definitions from 7000-TD002K # Appendix A pp. 433-434 replace them, exactly as the SMC-50 profile # replaces them with the SMC-50's. # Nothing here applies to a 20-COMM-M (Modbus TCP), to the HMI board's # EtherNet/IP port, or to the optional PFNetServer OPC gateway. # # SOURCES # Rockwell 7000-TD002K-EN-P, PowerFlex 7000 Parameter Manual (May 2025) # p. 74-75 Logic Command (257) and Logic Status (258) bit tables # p. 77 DrvStatus Flag1 (569) / Flag2 (238) bit definitions # p. 142 RefCmd DPI Min (45) / RefCmd DPI Max (46) — the reference # interpolation endpoints # p. 96 Speed Ref Select (7) enumerations — the fieldbus enable # p. 97 Ref Command Loss (749), default = Fault (Class 2 trip) # p. 110 Rated Drive Amps (19) / Rated Line Volts (18) — writable # p. 139-140 Speed Command (277), Speed Command In (276), SpdCmd DPI (58) # p. 216 DPI Loss Fault (93) bit definitions # p. 253-254 Logic Mask (241), Ref Cmd Mask (248), Reset Mask (247), # Start Mask (243) — all default 11111111 # p. 292-294 Metering parameters and their linear numbers # p. 433-434 Appendix A, Logic Status word and Product Specific Logic # Command word (the control word used below) # p. 435-441 Appendix B, Critical Fault list # Rockwell 20COMM-UM009D-EN-P, 20-COMM-H RS-485 HVAC Adapter User Manual # p. 1-2 Compatible Products — Modbus RTU x PowerFlex 7000 # p. 4-2 the "address one less than the manual" rule # p. 4-4 Table 4.C, adapter register map and 4x1000 + param # rule # p. 4-5 Reference is a scaled value, 32767 = 100% # p. 4-7 Table 4.F, 4x0001 Product Logic Command / 4x0002-3 Reference # p. B-4 par 32 [RTU Param Mode], default 16-bit # # ADDRESSING — 0-BASED PROTOCOL ADDRESSES, FC03/06/16 HOLDING REGISTERS. # 20COMM-UM009D p. 4-2: "you must address it to one less than the Modbus # address in the manual." So 4x0001 -> 0-based 0, 4x0003 -> 0-based 2. # Drive parameter direct access, 16-bit mode (p. 4-4 Table 4.C, "4x1000 + # param #"): # 0-based address = 999 + linear parameter number # Worked example: Motor Current is Linear Number 361 (TD002K p. 292), so # 999 + 361 = 1360, read with FC03 at 0-based address 1360. # The 7000 numbers its parameters with a single flat "Linear Number" running to # about 1160, so the largest legal address here is under 2200 — no 2-word or # 32-bit access is used, and the adapter's 32-bit mode (which would change the # formula to 999 + 2 x param #) is NOT modelled. # The 1x / 3x discrete-input and input-register spaces (FC02/FC04) are a # SEPARATE address space and are deliberately unused. # CAUTION: 20COMM-UM009D p. 4-9 contains a worked example that is off by one # against its own formula (it says parameter 1 lives at 41000). Table 4.C is # taken as authoritative, and Table 4.L (p. 4-13) is the enumerated proof of # the base+param# form on the adapter side: 4x0101 = adapter par 01 [DPI Port], # 4x0112 = par 12 [Ref/Fdbk Size] — the "4x0100 + param #" companion rule with # no off-by-one, which is how profiles/rockwell_smc50.toml resolves the same # contradiction. CONFIRM ON HARDWARE by reading 1360 and comparing it to Motor # Current on the drive HMI BEFORE trusting any address in this file. # # DRIVE-SIDE SETUP — without these the drive ACKs and ignores. # Speed Ref Select (7) must select the adapter: value 3 = DPIAdapter 5 for a # module on DPI port 5, or 1 / 2 = DPIAdapter 1 / 2 if a DPI splitter is # fitted (TD002K p. 96). Default is 0 = Local (door potentiometer), so out # of the box the speed reference written below is IGNORED. # The drive's Local/Remote selector must be in REMOTE/AUTO — Speed Ref Select # only applies in REMOTE/AUTO (TD002K p. 96). # Logic Mask (241), Start Mask (243), Reset Mask (247) and Ref Cmd Mask (248) # all default to 11111111 (every adapter permitted), so no change is # normally needed — but check them, because a commissioning engineer who # locked control to the host will have cleared the adapter's bit. # 20-COMM-H par 16 [DPI I/O Cfg] bit 0 = 1 (Cmd/Ref), the default. # 20-COMM-H node address: rotary switches, or switches at 00 and par 03. # 20-COMM-H par 12 [Ref/Fdbk Size] must READ 0 = 16-bit. It is Read Only # ("the drive determines the size", 20COMM-UM009D p. B-2) and readable at # 4x0112 -> 0-based 111 (Table 4.L, p. 4-13). If it reads 1 = 32-bit, a # lone 16-bit write to address 2 lands in bits 16-31 of the reference and # this profile must NOT be armed. # DPI PORT: port 5 is the documented normal case. TD002K p. 97: "If sending a # digital Speed Reference through a DPI adapter, select DPIAdapter 5. The DPI # protocol allows for a splitter, and if a splitter is installed in the drive, # then use either DPIAdapter 1 or DPIAdapter 2." The adapter's own answer is # readable at 4x0101 -> 0-based 100 (par 01 [DPI Port], default 5, Read Only, # 20COMM-UM009D p. B-1). DPI Loss Fault (93) bit 4 is therefore the loss bit # to watch unless a splitter puts the module on port 1 or 2. # # SCALING IS NOT FIXED AND IS NOT CONFIRMED. The parameter values below are # read as raw integers and divided by the number of decimal places the manual # prints for that parameter's min/max (Motor Speed Hz reads -120.0…120.0, so # one decimal, scale 0.1; Motor Current reads 0…1500 A, so no decimal, scale # 1.0). This is the same convention the SMC-50 uses over the same adapter, but # neither Rockwell document states it for the 7000. VERIFY EACH SCALE against # the drive HMI before believing a number. # # REVERSE. Unlike the ABB Drives profile, direction here is NOT the sign of the # reference — it is command word bits 7,6 (01 = Forward, 10 = Reverse, # TD002K p. 434). So run_rev is a distinct word and speed_signed is false. # Logic Status bit 8 [Reverse Enabled] reports whether the drive will accept it # at all; on most MV fan and pump applications it will not, and reversing one # that is mechanically unidirectional is destructive. # # SYNCHRONOUS TRANSFER IS THE DANGEROUS FIELD IN THIS CONTROL WORD. # Command bits 10,9 are Transfer to Line (01) and Transfer to Drive (10) — # across-the-line bypass switching of a medium-voltage motor. Every word below # writes 00 into those two bits. Do not add a sequence that sets them. # # NO [faults] BLOCK — GAP, NAMED NOT GUESSED. 7000-TD002K Appendix B publishes # a numbered Critical Fault list (pp. 435-441), but nowhere in the manual is # there a parameter that reports the active fault CODE. The drive exposes # faults as bitfields spread across a dozen separate flag parameters # (DrvFlt1…DrvFlt9, RecFlt…, InvFlt…), and the fault QUEUE lives on the HMI / # DPI fault-queue object, not in a parameter. One of those flag words could be # picked, but it would cover a fraction of the codes and misreport the rest, # so none is. Fault text comes off the drive HMI. # # NO [rating] BLOCK — GAP, NAMED. The only rating parameters the manual # publishes, Rated Drive Amps (19) and Rated Line Volts (18), are # "Read/Write when Stopped" commissioning entries (TD002K p. 110), not values # read back from hardware. A rating guard built on a writable parameter would # be restored along with a clone and could not catch a mismatched target. # Compare drive nameplates by hand. # # NO [parameters] BLOCK — DELIBERATE. Cloning configuration between medium # voltage drives is not offered here. The 7000's parameter space mixes motor # nameplate data with hardware-specific gains, autotune results, thermal model # coefficients and protection trip levels sized to a particular power stack; # writing that set onto a different unit is a hazard, not a convenience. name = "Allen-Bradley PowerFlex 7000 (medium voltage)" vendor = "Allen-Bradley" device_type = "vfd" verified = false probe_register = 1360 # 999 + 361, Motor Current — Basic access, read-only # 20-COMM-H defaults: par 05 [Net Rate Cfg] = 1 (9600), par 07 [Net Parity Cfg] # = 0 (None), par 30 [Stop Bits Cfg] = 0 (1 bit). Confirm against the module. [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] # --- Metering, TD002K pp. 292-294 ------------------------------------------- motor_current = { address = 1360, unit = "A" } # 361, 0…1500 A motor_voltage = { address = 1361, unit = "V" } # 362, 0…8000 V motor_speed = { address = 1486, scale = 0.1, signed = true, unit = "Hz" } # 487, -120.0…120.0 motor_speed_rpm = { address = 1362, signed = true, unit = "rpm" } # 363, -6000…6000 motor_power = { address = 1363, signed = true, unit = "kW" } # 364, -15000…15000 line_current = { address = 1499, unit = "A" } # 500, 0…999 A line_voltage = { address = 1323, unit = "V" } # 324, 0…8000 V line_frequency = { address = 1656, scale = 0.1, signed = true, unit = "Hz" }# 657, -100.0…100.0 dc_link_current = { address = 1115, unit = "A" } # 116, 0…999 A ground_fault_current = { address = 1366, scale = 0.1, unit = "A" } # 367, 0.0…10.0 # 303, -1.00…1.00. Advanced access level, and TD002K p. 294 says "Contact # factory for availability" — may read 0 on a drive without the option. line_power_factor = { address = 1302, scale = 0.01, signed = true } # --- Reference read-back, TD002K pp. 139-140 -------------------------------- # 277 Speed Command, the input to the speed ramp; forced to 0 when stopped. speed_command = { address = 1276, scale = 0.1, signed = true, unit = "Hz" } # 58 SpdCmd DPI — the speed command the drive received FROM the DPI adapter. # This is the point that proves a written reference actually landed, and the # one to watch when calibrating the reference scale below. speed_command_dpi = { address = 1057, scale = 0.1, signed = true, unit = "Hz" } # --- Reference interpolation endpoints, TD002K p. 142 ------------------------ # The DPI reference 0..32767 interpolates LINEARLY between these two Hz values # (see [control] below). Read both before calibrating anything. refcmd_dpi_min = { address = 1044, scale = 0.1, unit = "Hz" } # 45, default 6.0 Hz refcmd_dpi_max = { address = 1045, scale = 0.1, unit = "Hz" } # 46, default 60.0 Hz # --- Status, TD002K pp. 74-75 ------------------------------------------------ # 258 Logic Status — Monitor access, Read Only, with EXPLICITLY NUMBERED bits # in the manual (p. 75). This is the authoritative status word; 569 below has # no printed bit numbers. logic_status = { address = 1257, bits = { 0 = "READY", 1 = "RUNNING", 2 = "COMMAND_DIR_FWD", 3 = "ROTATION_DIR_FWD", 4 = "ACCELERATING", 5 = "DECELERATING", 6 = "AT_SPEED", 7 = "ON_BYPASS", 8 = "REVERSE_ENABLED", 9 = "DRIVE_FAULT", 10 = "DRIVE_WARNING", 11 = "LOCAL_LOCK", 12 = "FORCED_STOP", 13 = "SPEED_COM1", 14 = "SPEED_COM2", 15 = "SPEED_COM3" } } # --- Status, TD002K p. 77 --------------------------------------------------- # 569 DrvStatus Flag1. The manual prints eight two-state rows and does NOT # number them — the bit indices below are inferred from row order. Access # level is Service. Prefer logic_status above for anything load-bearing. status_flags_1 = { address = 1568, bits = { 0 = "READY", 1 = "RUNNING", 2 = "REVERSE_ROTATION", 3 = "FAULTED", 4 = "WARNING", 5 = "FANS_ON", 6 = "INPUT_CONTACTOR_CLOSED", 7 = "OUTPUT_CONTACTOR_CLOSED" } } # 238 DrvStatus Flag2 — fault class, run request and test modes. status_flags_2 = { address = 1237, bits = { 0 = "JOG", 1 = "LOCAL", 2 = "CLASS1_FAULT", 3 = "CLASS2_FAULT", 4 = "RUN_REQ", 5 = "RESTART_REQ", 6 = "GATING_ENABLE", 7 = "DRIVE_INIT", 8 = "GATE_TEST", 9 = "SHORT_CCT_TEST", 10 = "SYSTEM_TEST", 11 = "OPEN_CCT_TEST", 12 = "PARAM_LOADED", 13 = "INV_INIT", 14 = "REC_5PULSE_REQ", 15 = "CONV_FAN2_ON" } } # 93 DPI Loss Fault, TD002K p. 216. Which adapter number the 20-COMM-H is # depends on the DPI port it occupies — see the setup note in the header. dpi_loss_fault = { address = 1092, bits = { 0 = "ADAPTER_1_LOSS", 1 = "ADAPTER_2_LOSS", 2 = "ADAPTER_3_LOSS", 3 = "ADAPTER_4_LOSS", 4 = "ADAPTER_5_LOSS", 5 = "ADAPTER_6_LOSS", 6 = "REF_CMD_LOSS" } } # Product Logic Command, adapter holding register 4x0001 -> 0-based 0 # (20COMM-UM009D p. 4-7 Table 4.F). Bit meanings are the PowerFlex 7000's own, # 7000-TD002K p. 434 "Product Specific Logic Command - Firmware 12.xxx". # # CONFLICTING SECOND TABLE IN THE SAME MANUAL, resolved not hidden: parameter # Logic Command (linear 257, TD002K p. 74) documents the drive-INTERNAL logic # command word with a materially different layout — bit 0 = "Not Stop" (the # INVERSE of Appendix A's bit 0 = Stop), bit 6 = a SINGLE direction bit # (0 fwd / 1 rev), bit 7/8 = Start/Stop Profile, bits 11/12 = Synch/De-Synch. # Appendix A p. 434 is taken as the over-the-wire word because 20COMM-UM009D # p. 4-7 defers to the product's own peripheral documentation, and p. 434 is # scoped to gateway adapters. FIRST BENCH STEP before any Start: write 0x0040 # and read parameter 257 back at 0-based 1256 to confirm which word the # adapter delivered. # # Appendix A p. 434 bits: # 0 Stop (level) 1 Start (RISING EDGE) 2 Jog # 3 Clear Fault Queue 4 Clear Warning Queue 5 Reset Faults # 7,6 Direction 01 = Forward, 10 = Reverse, 00 = no command, 11 illegal # 8 DPI Local/Remote 0 = Remote (multiplexed control) # 10,9 Synchronous Transfer MUST STAY 00 — see header # 11 Start Profile (Accel 1/2) 12 Stop Profile (Decel 1/2) # 15-13 Speed Command select, 000 = no command [control] command_register = 0 # 4x0003 -> 0-based 2, "Reference Hi ... or the whole 16-bit Reference" # (20COMM-UM009D p. 4-7). 4x0002 (Reference Lo) is left alone: the manual says # the value is transmitted only when 4x0003 is written, so a single 16-bit # write to address 2 is the whole reference. speed_register = 2 # 20COMM-UM009D p. 4-5: "the Reference value is a scaled value; it is not an # engineering value ... 32767 is equivalent to 100%." On the 7000 the mapping # is an OFFSET INTERPOLATION, not a proportion: TD002K p. 142, RefCmd DPI Min # (45, default 6.0 Hz) and RefCmd DPI Max (46, default 60.0 Hz) "determine the # slope for interpolating the digital speed command" — so reference 0 commands # 6.0 Hz at defaults, NOT 0 Hz, and 50% commands 33 Hz, not 30. Both endpoints # are mapped as monitor points above. Firmware clamps 45 to no more than half # of 46 (p. 142); SpecialFeatures4 (996) bit 11 [Flex SpdRng] warns that above # that ratio reference/feedback numbers display incorrectly (p. 102). # CALIBRATE by writing 50% (raw 16384) and reading speed_command_dpi above # before running anything. speed_unit = "%" speed_scale = 0.0030518509 # 100.0 / 32767 — sanity: 50% must encode to raw 16384, not raw 0 max_ref = 100.0 speed_signed = false # Slower than the low-voltage profiles on purpose. MV contactor sequencing is # not instantaneous and a pulsed Start must be seen as a clean edge. step_delay = 0.1 # Bit 0 = Stop, level-held, using the configured Stop Profile. stop = [0x0001] # 0x0040 clears Stop and sets Direction = 01 Forward; 0x0042 pulses Start on # the rising edge of bit 1; 0x0040 releases the pulse and is the word the # keepalive re-sends — it holds direction and asserts neither start nor stop. run_fwd = [0x0040, 0x0042, 0x0040] # Direction = 10 Reverse. Check Logic Status bit 8 [Reverse Enabled] first, and # read the header note before using this on a fan or a pump. run_rev = [0x0080, 0x0082, 0x0080] # Bit 5 [Reset Faults], pulsed, with bits 3/4 left alone so the fault and # warning queues are preserved for diagnosis. 0x0020 has bit 1 clear, so this # reset value is NOT a run command. No separate reset_register exists on this # path — the reset lives in the same DPI command word. reset = [0x0000, 0x0020, 0x0000] # Two independent timeouts, and they fail in different directions: # 20-COMM-H par 11 [Network Timeout], default 10 s, then par 15 [Comm Flt # Action] — which may be Fault, Hold Last or Zero Data depending on # commissioning. Hold Last leaves a running MV motor running. # Drive side, TD002K p. 97: Ref Command Loss (749) defaults to Fault (a # Class 2 trip) but can be set to Last Speed / Preset 1 / Local / an analog # input, any of which also keeps the motor turning. # 1 s gives 10x margin at the adapter default. Shorten if par 11 was reduced. [control.watchdog] interval_ms = 1000 fault = "20-COMM-H Network Timeout (par 11) -> Comm Flt Action (par 15); drive-side DPI Loss Fault (93) / Ref Command Loss (749)" [running_check] register = 1257 # 258 Logic Status — Monitor access, bits NUMBERED in the manual (p. 75) bit = 1 # bit 1 = "Running — The drive is Running" [connection] summary = "The PowerFlex 7000 has no compatible embedded Modbus port for this profile; install a Rockwell 20-COMM-H RS-485 adapter and connect it through DPI." warnings = ["Medium-voltage equipment: only qualified personnel following the site MV switching, grounding, and arc-flash procedure may access this cabinet.", "The 20-COMM-H must be set to Modbus RTU, not N2 or P1.", "The optional 20-COMM-M Modbus TCP module is not this profile and is not interchangeable.", "Confirm parameter width/memory-map mode exactly as the profile requires before trusting an address."] [[connection.methods]] id = "20_comm_h_rs485" title = "20-COMM-H Modbus RTU option" transport = "serial" hardware = "option" port = "DPI port 5, or DPIAdapter 1/2 when the documented splitter is fitted" connector = "20-COMM-H six-pin network plug: TERM, A, B, COM, SHIELD, GND" adapter = "Isolated USB-to-RS-485 adapter" cable = "Belden 3106A three-wire RS-485 cable or equivalent; Belden 3105A two-wire is allowed where COM is intentionally omitted" parts = ["Rockwell 20-COMM-H RS-485 HVAC adapter", "Drive-specific DPI internal interface cable/carrier", "Isolated USB-to-RS-485 adapter", "Belden 3106A or equivalent", "Six-pin linear plug supplied for the adapter"] steps = ["Follow the site MV isolation, test-for-dead and grounding procedure.", "Set the 20-COMM-H node-address switches and the protocol selector to RTU before installation.", "Mount and ground the adapter, then connect its internal interface cable to the documented DPI port.", "Land A, B, COM and shield on the six-pin network plug exactly as shown below.", "At a bus end jumper TERM to A; at one network point only jumper SHIELD to GND.", "Restore control power with the motor inhibited, verify adapter status, and prove a read before enabling control."] setup = ["Set the 20-COMM-H protocol switch to RTU and its unique node address.", "Keep adapter par 32 = 0 and par 16 bit 0 = 1.", "Set Speed Ref Select (7) to the installed adapter and put Local/Remote in REMOTE/AUTO.", "Verify Logic/Start/Reset/Ref masks permit that DPI port and adapter par 12 = 0."] warnings = ["Do not install/remove the adapter with the drive energized.", "A = TxRxD- and B = TxRxD+ on this adapter; preserve those literal labels.", "Ground the shield at one point on the entire network."] source = "Rockwell 20COMM-UM009D-EN-P, pp. 1-2 and 2-1 to 2-7; 7000-TD002K pp. 96-97 and 253-254." [[connection.methods.wiring]] adapter = "TxRxD- / A / -" device = "20-COMM-H A — TxRxD-" signal = "RS-485 A" [[connection.methods.wiring]] adapter = "TxRxD+ / B / +" device = "20-COMM-H B — TxRxD+" signal = "RS-485 B" [[connection.methods.wiring]] adapter = "COM / signal common" device = "20-COMM-H COM — Signal Common" signal = "Signal reference" [[connection.methods.wiring]] adapter = "Cable shield" device = "20-COMM-H SHIELD" signal = "Shield RC termination" required = false [[connection.methods.wiring]] adapter = "Protective earth at one network point" device = "20-COMM-H GND (jumper to SHIELD at one point only)" signal = "Shield earth bond" required = false