# Property of PMA Electrical Solutions, LLC. # # Eaton SLX9000 general purpose adjustable frequency drive (frames MF2 - MF6), # BUILT-IN Modbus RTU on the standard control board. No option card. # # Source: "SLX9000 Adjustable Frequency Drives User Manual", Eaton document # MN04003020E, January 2009. Sections cited per block below. # # WHICH INTERFACE — SETTLED FROM THE SLX'S OWN MANUAL, NOT ASSUMED. # MN04003020E p. 5-22: "SLX9000 has a built-in Modbus RTU bus interface. The # signal level of the interface is in accordance with the RS-485 standard." # Figure 5-18 on the same page wires it to control terminals RS-485 A / RS-485 # B with a built-in 120 ohm terminator (jumper X7 on MF2-MF3, X9 on MF4-MF6, # off by default). The Modbus parameters live in the drive's own System menu at # S6.10 (p. 5-14), not on a card. # # So this profile does NOT use OPTC2/OPTC8 or OPTE2/OPTE8. The SLX does have # option slots D and E that accept fieldbus boards (p. 2-x slot diagram), but # Modbus RTU needs none of them. Anything a board manual says about board # parameters, board LEDs or board slot faults does not apply here. # # Drive-side setup: # P6.10.2 Fieldbus protocol = 1 (Modbus) (p. 5-14, p. 5-25) # P6.10.3 Slave address = 1..255 (p. 5-14, p. 5-26) # P3.1 Control place (ID 125) = 3 = Fieldbus (Table 5-6 p. 5-10, # Table 8-15 p. 8-16) # P2.2.21 Fieldbus control reference selection (ID 122) = 3 = Fieldbus # reference (FBSpeedReference). This is ALREADY the default. # (Table 8-6, p. 8-10) # # MANUAL CONTRADICTS ITSELF ON THE CONTROL-PLACE VALUE. The Modbus chapter # prose (p. 5-23) says "Fieldbus control is active when the value of parameter # 3.1 (Control place) is 2 (= fieldbus)". Both parameter tables that actually # enumerate P3.1 — Table 5-6 (p. 5-10) and Table 8-15 (p. 8-16) — say # 1 = I/O terminals, 2 = Keypad, 3 = Fieldbus. Two tables beat one sentence; # use 3. Confirm on the unit before arming. # # ADDRESSING: 0-based protocol register = ID number - 1. # p. 5-23: "The Modbus bus of SLX9000 uses the ID numbers of the application # as addresses." Table 5-17 (p. 5-24) then lists ID 2001 with the aliases # "32001, 42001". The 4xxxx form is 1-based, so 42001 is the second holding # register, 0-based 2000. # Proof of that mapping in Eaton's own platform doc MN04003003E p. 5-2: # "Registers are addressed starting with zero: registers 1 - 16 are addressed # as 0 - 15", followed by a worked FC03 read of "registers 42001 - 42003" # whose on-wire starting address is "07d0 hex (= 2000)". 2001 - 1 = 2000. # Every address in this file is already ID - 1. Do not subtract again. # # 3xxxx IS A DIFFERENT ADDRESS SPACE. Table 5-15 (p. 5-23) lists FC04 Read # Input Register against the 32xxx aliases and FC03 Read Holding Register # against the 42xxx aliases. vfd-core reads holding registers (FC03) only, so # only the 4xxxx column is used here. # # PROCESS DATA CONTENT IS APPLICATION-SPECIFIC. p. 5-23: "The contents of the # process data has been determined in the application. The following tables # present the process data contents in the Multi-Control Application." The # SLX9000 also ships a Basic Application (Chapter 7). Registers 2100 and 2000 # (the status and control words) and their bit layouts are common to "SLX9000 # applications" (p. 5-25), but the mapping of the remaining process data slots # below is the MULTI-CONTROL application's. On a drive running the Basic # Application, re-check Table 5-16 equivalents before trusting the monitor # points. # # SPEED REFERENCE IS PERCENT, NOT Hz. Table 5-21 (p. 5-25): "The allowed # scaling is -10000 - 10000. In the application, the value is scaled in # percentage of the frequency area between the set minimum and maximum # frequencies." So 10000 = 100.00% of the span P2.1.1 (min freq, ID 101) to # P2.1.2 (max freq, ID 102) — percent of that WINDOW, not of max frequency. # With the default min of 0.00 Hz the two coincide; with a non-zero min they # do not. name = "Eaton SLX9000" vendor = "Eaton" device_type = "vfd" verified = false probe_register = 2100 # ID 2101 FB Status Word, live whenever the bus is up [connection] summary = "Connect to the SLX9000's built-in control terminals marked RS-485 A and RS-485 B; no option board is used." warnings = ["Isolate and discharge the drive before touching the control terminals.", "The SLX manual does not print A/B polarity; match the literal A and B labels to the adapter documentation rather than importing another Eaton family's convention."] [[connection.methods]] id = "built_in_rs485" title = "Built-in RS-485 A/B" transport = "serial" hardware = "built_in" port = "Control terminals marked RS-485 A and RS-485 B" connector = "Standard control terminal block" adapter = "Isolated USB-to-RS-485 adapter with documented A/B labels" cable = "Shielded RS-485 twisted pair" parts = ["Small insulated screwdriver", "Built-in termination jumper X7 (MF2-MF3) or X9 (MF4-MF6)"] wiring = [{ adapter = "A (verify adapter manual)", device = "RS-485 A", signal = "RS-485 conductor A" }, { adapter = "B (verify adapter manual)", device = "RS-485 B", signal = "RS-485 conductor B" }] steps = ["Isolate the drive and locate the A/B terminals shown in Figure 5-18.", "Wire A-to-A and B-to-B with shielded twisted pair.", "Enable X7 or X9 only when this drive is at one of the two physical bus ends.", "Close the drive, restore power, and select the computer adapter."] setup = ["Set P6.10.2 = 1 Modbus, P6.10.3 address, and P6.10.4-P6.10.6 baud/stop/parity.", "Set P3.1 = 3 Fieldbus and retain the fieldbus reference selection."] warnings = ["The Modbus prose incorrectly says P3.1 = 2; both parameter tables say 3 = Fieldbus."] source = "Eaton MN04003020E, printed pp. 5-22 through 5-26 and 8-16" # System menu S6.10 factory settings, MN04003020E p. 5-14: # P6.10.4 Baud rate = 5 (9600), P6.10.5 Stop bits = 0 (1 bit), # P6.10.6 Parity type = 0 (None). [serial] baudrate = 9600 parity = "N" stopbits = 1 # Output process data, Table 5-16 (p. 5-24). Scale column is the manual's. # Types marked "+/-" in that column are signed here. [monitor] # Table 5-18 layout with Table 5-22 bit meanings, both p. 5-24 / p. 5-25. status_word = { address = 2100, bits = { 0 = "RDY", 1 = "RUN", 2 = "DIR", 3 = "FLT", 4 = "WARN", 5 = "AT_REF", 6 = "ZERO_SPEED", 7 = "FLUX_READY" } } # ID 2103, percent of the min..max frequency window, -10000..10000 (Table 5-19). actual_speed = { address = 2102, signed = true, scale = 0.01, unit = "%" } # ID 2104. The manual labels this "Motor speed" in +/- Hz; it is the output # frequency to the motor. ID 2105 below is the rpm figure. output_frequency = { address = 2103, signed = true, scale = 0.01, unit = "Hz" } motor_speed = { address = 2104, signed = true, unit = "rpm" } # ID 2105 motor_current = { address = 2105, scale = 0.1, unit = "A" } # ID 2106 motor_torque = { address = 2106, signed = true, scale = 0.1, unit = "%" } # ID 2107, % of nominal motor_power = { address = 2107, signed = true, scale = 0.1, unit = "%" } # ID 2108, % of nominal motor_voltage = { address = 2108, scale = 0.1, unit = "V" } # ID 2109 dc_voltage = { address = 2109, unit = "V" } # ID 2110 active_fault = { address = 2110 } # ID 2111 # ID 2102 "FB General Status Word" is named in Table 5-16 but MN04003020E # publishes no bit meanings for it. Omitted rather than guessed. # Input process data, Table 5-17 (p. 5-24). Control word layout Table 5-20 and # bit meanings Table 5-22, both p. 5-25: # bit 0 RUN 0 = Stop, 1 = Run # bit 1 DIR 0 = Clockwise, 1 = Counterclockwise # bit 2 RST rising edge resets the active fault # Bits 3-15 are unassigned in the shipped applications. [control] command_register = 2000 # ID 2001 FB Control Word speed_register = 2002 # ID 2003 FB Speed Reference speed_scale = 0.01 # 10000 raw = 100.00% speed_signed = true # Table 5-21 allows -10000..10000 speed_unit = "%" # NOT Hz — percent of the min..max window max_ref = 100.0 step_delay = 0.05 stop = [0x0000] run_fwd = [0x0001] # RUN=1, DIR=0 clockwise # DIRECTION IS A CONTROL-WORD BIT HERE, not the sign of the reference, so # run_rev is a real distinct word rather than a duplicate of run_fwd. run_rev = [0x0003] # RUN=1, DIR=1 counterclockwise # RST is edge-triggered. Driven from a word with RUN=0 and back, so the value # carrying the reset is itself a STOP word and can never start the motor. reset = [0x0000, 0x0004, 0x0000] # COMM LOSS: A STOCK SLX9000 DOES NOT FAULT ON SILENCE — IT KEEPS RUNNING. # P6.10.7 "Communication timeout" (p. 5-14) has range 0-300 s and DEFAULT 0, # and p. 5-26 defines 0 as "Not used": "If communication between two messages # is broken for a longer time than that defined by this parameter, a # communication error is initiated. If the value of this parameter is 0, the # function is not used." So out of the box the motor continues at the last # commanded speed after the master goes quiet. Set P6.10.7 to 1-300 s to arm # fault 53. The finest grain the drive offers is 1 second, so this keepalive # runs at half of that. [control.watchdog] interval_ms = 500 fault = "53 Fieldbus fault" # Status word bit 1 = RUN (Table 5-18 / Table 5-22, p. 5-24 / p. 5-25). [running_check] register = 2100 bit = 1 # ID 2111 "Active Fault" (Table 5-16, p. 5-24). MN04003020E exposes the Fault # History only through keypad menu M5 (p. A-1); it publishes no ID numbers for # the stored history, so no `history` list is claimed here. [faults] register = 2110 # Appendix A, Table A-1, pp. A-1 to A-3. Complete as printed — the table skips # 4, 12, 18-21, 23, 26-28, 30, 31, 33, 36-38, 42, 43, 46-49 and those gaps are # the manual's, not an omission here. Code 0 is the no-fault sentinel. [faults.codes] 0 = "No fault" 1 = "Overcurrent" 2 = "Overvoltage" 3 = "Ground fault" 5 = "Charging switch" 6 = "Emergency stop" 7 = "Saturation trip" 8 = "System fault" 9 = "Undervoltage" 10 = "Input line supervision" 11 = "Output phase supervision" 13 = "Drive undertemperature" 14 = "Drive overtemperature" 15 = "Motor stalled" 16 = "Motor overtemperature" 17 = "Motor underload" 22 = "EEPROM checksum fault" 24 = "Counter fault" 25 = "Microprocessor watchdog fault" 29 = "Thermistor fault" 32 = "Fan cooling" 34 = "Internal bus communication" 35 = "Application fault" 39 = "Device removed" 40 = "Device unknown" 41 = "IGBT temperature" 44 = "Device change" 45 = "Device added" 50 = "Analog input Iin < 4 mA" 51 = "External fault" 52 = "Keypad communication fault" 53 = "Fieldbus fault" 54 = "Slot fault" 55 = "Actual value supervision" # NO [rating] BLOCK. MN04003020E exposes no drive frame-size or rated-current # register. P2.1.9 "Nominal current of the motor" (ID 113) is the MOTOR # nameplate value the installer types in, not the drive's own rating, so it # would compare two operators' data entry rather than two pieces of hardware — # exactly the guard that must not be faked. Restores onto an SLX9000 therefore # have no rating interlock; check the frame by hand. # # NO [parameters] BLOCK, DELIBERATELY. The SLX9000 ships TWO applications with # different parameter sets — Basic (Chapter 7, Table 7-2) and Multi-Control # (Chapter 8, Tables 8-5 to 8-15) — and p. 5-23 states the address space is # "the ID numbers of the application". The IDs are also sparse and interleaved # across groups (101-122, 300-399, 470-520, 600-631, 700-73x, ...), so no # contiguous range describes them. Declaring one would let a clone taken off a # Multi-Control unit be written into a Basic unit's holes.