# Property of PMA Electrical Solutions, LLC. # # AUTOMATIONDIRECT STELLAR SR35 SOFT STARTER — not a VFD. No speed reference, # no reverse. "Running" on this device is a specific state, not a catch-all: # AutomationDirect defines it as "operating at full voltage ... the internal # bypass relays are closed" (p.3-25). Soft-start ramp is a DIFFERENT state # (Starting), and so are Limit Start, Limit Stop and Stopping. A motor that is # turning under the SR35's control is not necessarily reported as Running. # # COMMUNICATION PATH THIS PROFILE ASSUMES: the BUILT-IN Modbus RTU on the RJ45 # port. No option module, no adapter: "All SR35 soft starters support Modbus # RTU as standard. The RS-485 communications are accessible from the RJ45 # connector" (p.4-2). AutomationDirect's catalog claim of Modbus RTU support # is therefore confirmed by the manual. # # NOTE THE CONNECTOR: RJ45, and only pins 4 (B/+), 5 (A/-) and 8 (GND) are # used. Pins 6 and 7 carry a "do NOT connect" warning (p.4-2). This is NOT the # SR55's RJ12 pinout — a cable made for one will damage the other. # # SR55 IS A DIFFERENT PRODUCT WITH A COMPLETELY DIFFERENT REGISTER MAP (large # addresses, 704-62336). Nothing here transfers, in either direction. See # automationdirect_sr55.toml. SR22 has no communications interface at all and # has no profile. # # Source — AutomationDirect primary only: # "Stellar SR35 Series Soft Starter User Manual", 1st Ed. Rev. D, # 12/15/2023 (sr35manual.pdf): # p.4-2..4-3 RJ45 pinout, wiring, Modbus configuration menu # p.4-5..4-6 FC03/06/16, 8-register block limit, zero-offset addressing # p.4-7 VALUE TABLES — Motor State (PNU 24) and Trip Status # (PNU 77-85) enumerations. These exist ONLY here. # p.4-8..4-10 window/patch registers 157-199 (not used by this profile) # p.4-13 PNU alphabetical cross reference # p.3-14 PNU 148/149/150/147 comms settings and their defaults # p.3-15..3-16 P3/P4 ramp and current-limit settings # p.3-16..3-17 P5 motor protection # p.3-18 P7.0 Cntrl Mode values # p.3-19 P8.10 Comms trip, P8.11 Remote start trip # p.3-20..3-22 P15 monitor parameters and their scaling # p.3-23..3-25 P17 trip log, P18/P19 start/stop peaks, P22 totals # p.3-27 P27.18/P27.19 unit current rating # p.3-32 PNU 119/120/121 Modbus Enable / Start / Reset # # ADDRESSING: the PNU *is* the 0-based protocol address. AutomationDirect # states "The data addressing is zero offset, such that the parameter Modbus # address corresponds to the register number" (p.4-6) and "SR35 Modbus # addressing starts at zero; not 1 as some devices do" (p.4-5). So: # 0-based register = PNU, verbatim # e.g. Modbus Start PNU 120 = register 120, I rms PNU 25 = register 25. # Do NOT add a 4xxxx offset and do NOT add 1. The manual mentions a leading 4 # only as advice for Modicon-style masters that require it (p.4-5); this app # addresses the wire directly. Everything is a HOLDING register read with FC03 # ("SR35 parameters are defined as holding type registers", p.4-5) — no # FC04-only region exists on this device. # # The PNUs are small (0-300) and overlap the low register space other vendors # use for control words. Pointing this profile at the wrong device will read # and write plausible-looking garbage, so confirm the unit before arming. # # BLOCK SIZE: read/write blocks are limited to 8 REGISTERS (p.4-5, p.4-6). # # DRIVE-SIDE SETUP. Without these the starter answers reads and ignores # commands: # - PNU 1 Cntrl Mode = 2, "Modbus" (p.3-18). 0 = Local (keypad), 1 = Remote # (terminals). Only 2 hands command to the serial port. # - PNU 119 Modbus Enable = 1. This is a SEPARATE gate from the start # command: "On: The unit is enabled / Off: The unit is disabled" (p.3-32). # A start written while 119 is 0 does nothing. # - PNU 148 Address = 1..32. Only 32 nodes, not 247. # - PNU 149 Parity, PNU 150 Baud to match the bus. # # SCALING is NOT panel decimals. Every parameter's own Multiplier/Divisor/ # Offset triplet is printed in the manual and each scale below is copied from # that parameter's own row. Currents are milliamps in 32-bit pairs, frequency # is millihertz, heatsink temperature is 1/16 C, percentages are 0-16384. name = "AutomationDirect Stellar SR35 (soft starter)" vendor = "AutomationDirect" device_type = "soft_starter" verified = false probe_register = 24 # PNU 24 Motor State — read-only, valid from power-up [connection] summary = "Every SR35 includes Modbus RTU on its RJ45; no option card is required." warnings = [] [[connection.methods]] id = "rj45_rs485" title = "Built-in RJ45 Modbus RTU" transport = "serial" hardware = "built_in" port = "SR35 front RJ45 communications connector" connector = "RJ45 wired as RS-485, not Ethernet" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "Shielded twisted-pair cable terminated to the documented modular-plug pins" parts = ["Isolated two-wire RS-485 adapter", "Shielded twisted-pair cable terminated to the documented modular-plug pins", "Field-terminated modular plug or documented breakout adapter"] steps = ["Lock out line and control power, wait the vendor-specified discharge time, and verify the DC bus is de-energized before opening a cover or landing conductors.", "Land the positive and negative data conductors exactly as shown; connect the cable shield or signal common only where the method identifies it.", "Route the communications cable away from motor and mains conductors. Terminate the two physical ends of a long multidrop trunk only.", "Restore control power with the motor area clear, configure the drive from its keypad, then verify identity and read-only monitor data before enabling remote control."] setup = ["Set PNU 1 Cntrl Mode=2 Modbus, PNU 119 Modbus Enable=1, PNU 148 address, PNU 149 parity, and PNU 150 baud."] warnings = ["A modular communications jack is not automatically Ethernet. Never connect it to a LAN switch unless this guide explicitly identifies a Modbus TCP method.", "RS-485 A/B naming is not consistent between manufacturers. Follow the + and - mapping shown here.", "Pins 6 and 7 are reserved and carry an explicit do-not-connect warning; pins 1-3 are not connected. This cable is not interchangeable with the SR55 RJ12 cable."] source = "AutomationDirect Stellar SR35 User Manual, 1st Ed. Rev D, printed pp. 4-2 to 4-3 (RJ45 pinout, wiring and configuration)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "RJ45 pin 4 (TXD1-B-OUT / B+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "RJ45 pin 5 (TXD0-A-OUT / A-)" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "RJ45 pin 8 (GND)" signal = "Signal reference or shield drain" required = false # PNU 148/149/150 factory defaults, p.3-14: address 1, parity 1 = EVEN, # baud 1 = 19200. NOT 9600 8N1. Data bits are fixed at 8; stop bits are NOT # independently settable — they follow parity: "No parity uses 2 stop bits. # Odd or even parity uses 1 stop bit" (p.3-14), so a default unit is 19200 8E1 # and switching it to no-parity silently makes it 8N2. [serial] baudrate = 19200 parity = "E" stopbits = 1 [monitor] # PNU 24. An ENUMERATED state, not a bitfield — do not test bits of it. The # full value list is p.4-7 and appears nowhere else in the manual: # 20 Starting 22 Fire Mode 25 Limit Start 35 Limit Stop 40 Stopping # 60 Running 128 Ready 140 Tripped 200 Disabled 250 Initialization # 60 Running means full voltage with the bypass relays closed. 20/25 mean the # motor is energised and accelerating. 35/40 mean it is still turning on the # way down. Anything other than 128/200/250 should be treated as "motor may be # energised". motor_state = { address = 24 } # P15 monitor group, p.3-20..3-22. motor_current = { address = 25, words = 2, scale = 0.001, unit = "A" } # PNU 25 I rms, average of 3 phases phase_current_l1 = { address = 41, words = 2, scale = 0.001, unit = "A" } # PNU 41 phase_current_l2 = { address = 43, words = 2, scale = 0.001, unit = "A" } # PNU 43 phase_current_l3 = { address = 45, words = 2, scale = 0.001, unit = "A" } # PNU 45 line_frequency = { address = 30, scale = 0.001, unit = "Hz" } # PNU 30, 1 = 0.001 Hz phase_rotation = { address = 37 } # PNU 37, 0 = unknown, 1 = L1L2L3, 2 = L1L3L2 heatsink_temp = { address = 39, scale = 0.0625, unit = "C" } # PNU 39, divisor 16; trips above 80 C, fans on above 40 C delay_angle = { address = 47, unit = "deg" } # PNU 47, 1 = 1 degree, 0-180 # PNU 27. THE MANUAL CONTRADICTS ITSELF ON THIS SCALE and the value used here # is the one its own text supports. The parameter row prints Multiplier 10 / # Divisor 16384 (p.3-20), which would make full scale 16384 read as 10 — but # the same row says "When the Overload reaches 100% the Unit will trip" with # Max 16384, and every OTHER percent parameter in this manual (PNU 2 Initial # Volts, PNU 87 Kick Level, both p.3-15) uses Multiplier 100 / Divisor 16384. # So 100/16384 = 0.006104 %/count is used here and the printed "10" is read as # a typo. If a bench unit reads 10x low on this point, that is why. motor_thermal = { address = 27, scale = 0.006104, unit = "%" } # Ramp and current-limit setpoints, read-only here. Left NOT writable on # purpose: this app has no soft-starter commissioning screen, and a write to # the wrong one mid-ramp is a nuisance trip. start_time = { address = 4, unit = "s" } # PNU 4, 1 = 1 s initial_volts = { address = 2, scale = 0.006104, unit = "%" } # PNU 2, start pedestal start_current_limit = { address = 69, words = 2, scale = 0.001, unit = "A" } # PNU 69 Limit Amps (start) start_current_limit_time = { address = 71, unit = "s" } # PNU 71, 1 = 1 s stop_time = { address = 5, unit = "s" } # PNU 5, 1 = 1 s stop_current_limit = { address = 236, words = 2, scale = 0.001, unit = "A" } # PNU 236 Limit Amps (stop) stop_current_limit_time = { address = 238, unit = "s" } # PNU 238, 1 = 1 s motor_fla = { address = 18, words = 2, scale = 0.001, unit = "A" } # PNU 18 Motor Amps (nameplate FLA) overload_level = { address = 218, words = 2, scale = 0.001, unit = "A" } # PNU 218 Ovld Amps trip_class = { address = 17 } # PNU 17 10 / 20 / 30 # PNU 22/20, p.3-27. The STARTER's own current rating, not the motor's — this # is the frame-size identity. Compare it before copying settings between # units: every current setting on this device is bounded by multiples of it, # so a config from a 192 A frame on a 17 A frame is a fire. PNU 20 is the same # rating derated for Class 20 / Class 30, not a second frame identity. # (The manual prints Min 17000 / Max 66000 on these rows, which cannot be the # family range — the SR35 line runs SR35-017 to SR35-192 — so treat those two # numbers as leftovers from one frame's datasheet, not as bounds.) unit_amps = { address = 22, words = 2, scale = 0.001, unit = "A" } # PNU 22 Class 10 rating rated_amps = { address = 20, words = 2, scale = 0.001, unit = "A" } # PNU 20 Class 20/30 rating # Last start and stop, p.3-24. These are 1-word and scale 1 = 1 A / 1 s — # a DIFFERENT scale from the milliamp readings above. Not a mistake here. last_start_current = { address = 94, unit = "A" } # PNU 94 I Start last_start_time = { address = 95, unit = "s" } # PNU 95 T Start last_stop_current = { address = 96, unit = "A" } # PNU 96 I Stop last_stop_time = { address = 97, unit = "s" } # PNU 97 T Stop # Totals, p.3-25. All 32-bit. start_count = { address = 221, words = 2 } # PNU 221 successful starts run_count = { address = 204, words = 2 } # PNU 204 reached full voltage trip_count = { address = 210, words = 2 } # PNU 210 total trips # Modbus link diagnostics, p.3-22. Genuinely useful for bus health: rising # RX errors with a healthy RX byte count is a wiring or parity problem, not a # dead node. comms_rx_bytes = { address = 225 } # PNU 225 comms_tx_bytes = { address = 229 } # PNU 229 comms_rx_errors = { address = 227 } # PNU 227 comms_tx_errors = { address = 231 } # PNU 231 # CONTROL. There is no control word. Start and stop are PNU 120 Modbus Start # on its own: 1 starts, 0 "Stops or Soft stops the Unit" (p.3-32) — which of # those two happens depends on PNU 5 Stop Time, not on the value written. # A soft starter has no speed reference and no reverse, so neither # speed_register nor run_rev is defined and `control speed` / `control run_rev` # refuse rather than misbehave. # # TWO GATES, NOT ONE. PNU 119 Modbus Enable must ALSO be 1 or the start is # ignored, and PNU 1 Cntrl Mode must be 2. Neither is set by this profile — # they are commissioning settings, not per-command writes. If a start ACKs and # nothing moves, check 119 and 1 before suspecting the map. # # BEFORE ARMING: PNU 66 Remote (P8.11) ships Trip On, which trips 2000 at # power-up or reset if the start command is already asserted (p.3-19). Leave # the resting value at 0. [control] command_register = 120 step_delay = 0.05 stop = [0] run_fwd = [1] # Reset is a rising edge on its OWN register, PNU 121, pulsed high then low: # "On: The initial state required for a reset / Off: The final state required # for a reset / To reset pulse high and then low" (p.3-32). It cannot be a run # command — 121 is not the run register, and writing 1 there while PNU 120 # holds 0 does not start the motor. The trailing 0 matters: leaving reset # latched at 1 blocks the next reset. reset_register = 121 reset = [1, 0] # PNU 64 Comms (P8.10) ships Trip On and PNU 147 CommsTime ships 5000 ms, so # an armed session must touch the bus at least every 5 s. ANY read or write of # ANY PNU feeds the timer — "there must be at least one Modbus read or write # (any PNU) during the Comms Time period" (p.3-19) — so the monitor poll alone # keeps it alive. 1000 ms leaves a 5x margin for a retry storm. # # WHAT SILENCE DOES: with the factory defaults the SR35 TRIPS, code 1700 # Comms, which stops the motor and latches until reset. Unlike the SR55 there # is NO "communications shutdown" alternative documented for this device — the # manual offers only Trip On / Trip Off on PNU 64. Set PNU 64 to Trip Off and # losing the link stops nothing: THE MOTOR KEEPS RUNNING with nothing on the # other end of the wire, and the Modbus stop command is no longer connected to # anything. Check PNU 64 before trusting the link as a stop path. [control.watchdog] interval_ms = 1000 fault = "1700 Comms trip" # NO [running_check] SECTION, deliberately. PNU 24 Motor State is an # ENUMERATION (20/22/25/35/40/60/128/140/200/250, p.4-7), not a bit field, and # this app's running check reads a single BIT. There is no bit position that # separates the moving states from the stopped ones: bit 5 is set in both 60 # Running and 35 Limit Stop; bit 4 is set in 20 Starting and 60 Running but # not in 40 Stopping. Any bit chosen here would be wrong in some state. # Omitting it makes the app report Unknown, which fails CLOSED — it will not # claim the motor is stopped. Encoding a fake bit would fail open, and that is # the one outcome worth avoiding. Read motor_state and compare to the # enumeration instead. # PNU 77 Trip 0 (last trip) with the eight older entries as history, p.3-23 # and p.3-24. # HONEST LIMITATION: this is the trip LOG, not a live active-fault register. # It keeps the last code after a successful reset, so a non-zero value here # does not by itself mean the starter is faulted now. Read motor_state (PNU # 24) and compare against 140 Tripped to know whether it is still faulted. # # The codes are the "Trip Status" column of the value table on p.4-7, which is # the ONLY place this manual enumerates them — there is no per-code # troubleshooting table in the SR35 manual the way there is in the SR55's. # The names are therefore reproduced exactly as AutomationDirect abbreviates # them, and are NOT expanded with descriptions borrowed from the SR55 manual: # that is a different product and its 1701/2001 numbering does not match this # one's 1700/2000. The 11000-18000 "Op2" block is printed with those truncated # labels in the source table and is left as-is rather than guessed at. [faults] register = 77 history = [78, 79, 80, 81, 82, 83, 84, 85] [faults.codes] 100 = "Ph Loss — phase loss" 200 = "Thermal" 300 = "Ph/SCR — input phase loss, output phase loss or SCR misfire" 400 = "Mot Side — motor side phase loss" 500 = "Freq — supply frequency" 600 = "Uc Low — control voltage low" 700 = "SCR Sen — SCR sensing" 800 = "Fan" 1000 = "SCR S/C — SCR short circuit" 1100 = "Low Amp — low current" 1200 = "Limit — current limit timeout" 1300 = "Overload" 1400 = "Shear — shearpin" 1500 = "PTC — motor thermistor" 1600 = "External" 1700 = "Comms — no Modbus read or write within Comms Time" 1800 = "Bypass" 1900 = "FireMode" 2000 = "Remote — start signal active at power-up or reset" 2100 = "Rotation — phase sequence" 2200 = "Op1 — control board operation" 2300 = "CT Fault — current sensor" 11000 = "Op2 Mod" 12000 = "Op2 Mod" 13000 = "Op2 Mon" 14000 = "Op2 Men" 15000 = "Op2 Keys" 16000 = "Op2 Motr" 17000 = "Op2 Log" 18000 = "Op2 Disk" # PNU 22 Unit Amps, p.3-27 — the STARTER's own Class 10 current rating, which # is the frame-size identity [rating] exists to guard. It is a 32-bit value in # milliamps, and [rating] could originally read only a single register: that # would have returned the high word, 0 for every frame below 65.5 A, reporting # 0 A on a 17 A unit and silently passing any comparison. Rating now carries # words/word_order, so it is expressed properly here as well as remaining a # monitor point. # # This guard is currently belt-and-braces: the profile declares no [parameters] # ranges (see below), so no restore can run and there is nothing yet to guard. # It is here so the guard is already correct on the day those ranges are added. [rating] register = 22 words = 2 scale = 0.001 unit = "A" label = "starter unit amps (Class 10)" # # NO [parameters] SECTION, so clone/restore is unavailable on this profile. # That is deliberate. The map is sparse and interleaved: PNU 147/148/149/150 # are the comms timeout, address, parity and baud rate, sitting directly among # ordinary settings, and PNU 157-199 are the window/patch registers whose # contents are a live re-mapping of other registers rather than stored # settings. A range-based restore would walk straight through the settings # that own the link it is being restored over. Restoring an SR35 needs a named # parameter list, not an address range — until that exists, the USB route # (PNU 90 "To USB" / PNU 91 "From USB", p.4-13) is the supported one. # # UNRESOLVED, deliberately omitted rather than guessed: # - No output-voltage, power, or power-factor register is documented for # this device. The SR35 manual's monitor group has currents, frequency, # temperature and firing angle only; there is no kW/kVA/kVAR equivalent of # the SR55's P15.8-P15.10. Do not import them from the SR55 profile. # - No bypass-state register. PNU 279 "Bypass" is an auto-reset enable, not # a status, and trip 1800 reports a bypass failure only after the fact. # The closest live signal is motor_state = 60 Running, which the manual # defines as the bypass relays being closed. # - No iERS registers: the SR35 does not have the SR55's iERS energy-saving # function, so nothing here corresponds to that part of the SR55 map. # - Trip codes are names only. The SR35 manual publishes no per-code # description or remedy table, so [faults.codes] carries the p.4-7 labels # verbatim and nothing more.