# Property of PMA Electrical Solutions, LLC. # # Benshaw RediStart MX3 MEDIUM-VOLTAGE SOFT STARTERS — not VFDs. This profile # covers only the exact models named by these two Benshaw manuals: # * 890034-03-00, "RediStart Solid State Starter Control (MVRMX & MVRXE # Models), 1500 to 7200VAC", December 2006, 222 PDF pages. # * 890034-06-00, "RediStart Solid State Starter Control, MVRMX36 Models, # 10KV to 13.8KVAC", 222 PDF pages. # # Both manuals independently publish the complete Modbus map. Their 14-page # appendices were extracted and diffed: the register content is identical; # only printed page numbers and their cross-references differ. Sources: # 890034-03-00: QST04/QST05 pp. 59-60; FUN16-FUN19 pp. 107-108; # Remote Modbus pp. 146-147; fault table pp. 158-164; Appendix C # pp. 183-184; map pp. 187-200. # 890034-06-00: QST04/QST05 pp. 59-60; FUN16-FUN19 pp. 107-108; # Remote Modbus pp. 143-144; fault table pp. 156-162; Appendix C # pp. 181-182; map pp. 185-198. # Benshaw's 2025 comparison sheet LIT-10018-00-00 calls MVRMX "Legacy MVRMX"; # the current replacement generation is MVRNX, which this profile cannot use. # # This does NOT claim the current MVRNX, MVE IP00, MVDH dual-high, or legacy # Micro II MV families. They lack an exact-family public register map; see # docs/UNSUPPORTED.md. In particular, do not infer that "uses an MX3 control # board" makes an MVDH wire-compatible with either MVRMX manual. # # COMMS: embedded Modbus RTU on TB4 (B+, A-, COM), manual §7.11.7. Supported # functions are FC03, FC04, FC06 and FC16, at most 64 registers per request. # # ADDRESSING: the map prints each datum twice, e.g. Starter Control as # 30020/40020. §7.11.2 says these are the same offset in the input and holding # spaces. This app uses FC03/FC06/FC16 and 0-based protocol addresses: # # protocol address = printed 4xxxx address - 40001 # # Thus 40020 -> 19, 40021 -> 20, 40027 -> 26 and 40101 -> 100. # verified=false until that convention and every control sequence are checked # on real MVRMX-family hardware. # # DRIVE-SIDE SETUP: set QST05 Remote Source = Serial. If no DI is configured # Local/Remote, command bit 3 selects Remote. If a DI is configured that way, # it overrides the Modbus bit. FUN16 is node address; FUN17/FUN19 defaults are # reflected in [serial]. # # START AND RESET ARE EDGE-TRIGGERED (map p. 199 / p. 197): Run/Stop and Fault # Reset must each transition 0 -> 1. Commands therefore use sequences. Issuing # Run to an already-running starter necessarily writes Stop before the new edge. # There is no speed reference and no Modbus reverse command. # # WATCHDOG: FUN18 Communication Timeout defaults OFF. With it off, loss of the # master leaves the motor running. Set FUN18 to 1 second before commissioning # serial control; silence then raises F82 and performs a controlled stop. The # 250 ms keepalive assumes that 1 second drive-side setting. # # Relay command bits 10-15 are writable only when their corresponding relay is # configured Off; in that mode a zero bit ENERGIZES the relay and a one bit # de-energizes it. Every command below holds all six bits at one (0xFC00) so a # start/stop cannot unexpectedly energize an otherwise-unused output relay. name = "Benshaw RediStart MX3 MV" vendor = "Benshaw" device_type = "soft_starter" verified = false probe_register = 20 [connection] summary = "Embedded Modbus RTU is on terminal block TB4; no communications option card is required." warnings = [] [[connection.methods]] id = "tb4_rs485" title = "Built-in TB4 Modbus RTU" transport = "serial" hardware = "built_in" port = "Terminal block TB4" connector = "TB4 three-position terminal block" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "Shielded twisted-pair RS-485 cable" parts = ["Isolated two-wire RS-485 adapter", "Shielded twisted-pair RS-485 cable"] 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 QST05 Remote Source=Serial, FUN16=node, FUN17=baud, FUN19=framing, and set FUN18 timeout to about 1 s."] warnings = ["RS-485 A/B naming is not consistent between manufacturers. Follow the + and - signal mapping in this guide, not the letter printed on an unfamiliar adapter.", "Do not use protective earth as the data return unless the vendor drawing explicitly calls for it.", "Medium-voltage equipment must be accessed only by qualified personnel under the site arc-flash and lockout procedure."] source = "Benshaw 890034-03-00 and 890034-06-00 MX3 MV User Manuals, printed pp. 17-19 and 143-147 (TB4), pp. 107-108 (setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "TB4-1 B+" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "TB4-2 A-" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "TB4-3 COM" signal = "Signal reference or shield drain" required = false [serial] baudrate = 19200 parity = "E" stopbits = 1 # Appendix F. Currents are whole Arms and voltages whole Vrms. [monitor] status_word = { address = 20, bits = { 0 = "Ready", 1 = "Running", 2 = "UpToSpeed", 3 = "Alarm", 4 = "Fault", 5 = "Lockout" } } input_status = { address = 21, bits = { 0 = "Start", 1 = "DI1", 2 = "DI2", 3 = "DI3", 4 = "DI4", 5 = "DI5", 6 = "DI6", 7 = "DI7", 8 = "DI8" } } alarm_status_1 = { address = 22, bits = { 0 = "A OL motor overload", 1 = "A5 motor PTC", 2 = "A6 stator RTD", 3 = "A7 bearing RTD", 4 = "A8 other RTD", 5 = "A10 phase rotation not ABC", 6 = "A11 phase rotation not CBA", 7 = "A12 low line frequency", 8 = "A13 high line frequency", 9 = "A14 phase rotation not 1PH", 10 = "A15 phase rotation not 3PH", 11 = "A21 low line L1-L2", 12 = "A22 low line L2-L3", 13 = "A23 low line L3-L1", 14 = "A24 high line L1-L2", 15 = "A25 high line L2-L3" } } alarm_status_2 = { address = 23, bits = { 0 = "A26 high line L3-L1", 1 = "A27 phase loss", 2 = "noL no line", 3 = "A29 PORT timeout", 4 = "A31 overcurrent", 5 = "A34 undercurrent", 6 = "A35 PF too leading", 7 = "A36 PF too lagging", 8 = "A37 current imbalance", 9 = "A38 ground fault", 10 = "A47 stack overtemperature", 11 = "A53 tach loss", 12 = "A60 DI1", 13 = "A61 DI2", 14 = "A62 DI3", 15 = "A63 DI4" } } alarm_status_3 = { address = 24, bits = { 0 = "A64 DI5", 1 = "A65 DI6", 2 = "A66 DI7", 3 = "A67 DI8", 4 = "A71 analog input trip" } } # MV lockout bits differ from the low-voltage MX3: there is no Run Interlock # bit, so Disconnect Open begins at bit 5 and the later meanings shift down. lockout_status = { address = 25, bits = { 0 = "motor overload", 1 = "motor PTC", 2 = "RTD stator", 3 = "RTD bearing", 4 = "RTD other", 5 = "disconnect open", 6 = "stack overtemperature", 7 = "control power", 8 = "RTD open/short", 9 = "time between starts", 10 = "backspin", 11 = "starts per hour", 12 = "RTD comm loss" } } motor_current = { address = 27, unit = "A" } l1_current = { address = 28, unit = "A" } l2_current = { address = 29, unit = "A" } l3_current = { address = 30, unit = "A" } current_imbalance = { address = 31, scale = 0.1, unit = "%" } residual_ground_current = { address = 32, unit = "% FLA" } zero_seq_ground_current = { address = 33, scale = 0.1, unit = "A" } line_voltage = { address = 34, unit = "V" } l1_l2_voltage = { address = 35, unit = "V" } l2_l3_voltage = { address = 36, unit = "V" } l3_l1_voltage = { address = 37, unit = "V" } motor_thermal = { address = 38, unit = "%" } power_factor = { address = 39, scale = 0.01, signed = true } # Least-significant word is first; reading it latches the high word. active_power = { address = 40, words = 2, word_order = "low_first", unit = "W" } energy = { address = 46, words = 2, word_order = "low_first", unit = "kWh" } phase_order = { address = 48 } line_frequency = { address = 49, scale = 0.1, unit = "Hz" } analog_input = { address = 50, scale = 0.1, signed = true, unit = "%" } analog_output = { address = 51, scale = 0.1, unit = "%" } run_hours = { address = 52, unit = "h" } starts = { address = 54 } trutorque = { address = 55, unit = "%" } power_pct = { address = 56, unit = "%" } peak_starting_current = { address = 57, unit = "A" } last_start_duration = { address = 58, scale = 0.1, unit = "s" } motor_nominal_current = { address = 100, unit = "A" } # 40020 Starter Control. 0xFC08 = Remote+Stop, 0xFC09 = Remote+Run, # 0xFC0A = Remote+Fault Reset, with relay bits 10-15 de-energized. Fault reset # never shares the Run bit. [control] command_register = 19 step_delay = 0.05 stop = [0xFC08] run_fwd = [0xFC08, 0xFC09] reset = [0xFC08, 0xFC0A, 0xFC08] [control.watchdog] backstop_requires_setup = true interval_ms = 250 fault = "F82 Modbus Timeout" [running_check] register = 20 bit = 1 # 40027 Present Fault; 40601-40609 newest-to-oldest history. [faults] register = 26 history = [600, 601, 602, 603, 604, 605, 606, 607, 608] [faults.codes] 0 = "F00 no fault" 1 = "F01 UTS time limit expired" 2 = "F02 motor thermal overload" 3 = "F03 slow speed timer expired" 4 = "F04 speed switch time limit expired" 5 = "F05 motor PTC overtemperature" 6 = "F06 stator RTD overtemperature" 7 = "F07 bearing RTD overtemperature" 8 = "F08 other RTD overtemperature" 10 = "F10 phase rotation error, not ABC" 11 = "F11 phase rotation error, not CBA" 12 = "F12 low line frequency" 13 = "F13 high line frequency" 14 = "F14 input power not single phase" 15 = "F15 input power not three phase" 21 = "F21 low line L1-L2" 22 = "F22 low line L2-L3" 23 = "F23 low line L3-L1" 24 = "F24 high line L1-L2" 25 = "F25 high line L2-L3" 26 = "F26 high line L3-L1" 27 = "F27 phase loss" 28 = "F28 no line" 29 = "F29 PORT timeout" 30 = "F30 instantaneous overcurrent" 31 = "F31 overcurrent" 34 = "F34 undercurrent" 35 = "F35 power factor leading" 36 = "F36 power factor lagging" 37 = "F37 current imbalance" 38 = "F38 ground fault" 39 = "F39 no current at run" 40 = "F40 shorted / open SCR" 41 = "F41 current at stop" 46 = "F46 disconnect open" 47 = "F47 stack protection fault (stack thermal overload)" 48 = "F48 bypass / 2M contactor fault" 49 = "F49 inline contactor fault" 50 = "F50 control power low" 51 = "F51 current sensor offset error" 53 = "F53 tachometer signal loss" 54 = "F54 BIST fault" 55 = "F55 BIST CT fault" 56 = "F56 RTD open or shorted" 60 = "F60 external fault on DI1" 61 = "F61 external fault on DI2" 62 = "F62 external fault on DI3" 63 = "F63 external fault on DI4" 64 = "F64 external fault on DI5" 65 = "F65 external fault on DI6" 66 = "F66 external fault on DI7" 67 = "F67 external fault on DI8" 71 = "F71 analog input level fault trip" 80 = "F80 RTD module communication fault" 81 = "F81 keypad communication fault" 82 = "F82 Modbus timeout fault" 84 = "F84 MX3 to I/O card communication fault" 85 = "F85 I/O card software version fault" 86 = "F86 I/O card current offset error" 87 = "F87 I/O card error" 88 = "F88 I/O card error" 89 = "F89 I/O card software watchdog" 90 = "F90 I/O card error" 91 = "F91 I/O card program EPROM checksum" 94 = "F94 CPU error - software fault" 95 = "F95 CPU error - parameter EEPROM checksum" 96 = "F96 CPU error" 97 = "F97 CPU error - software watchdog" 98 = "F98 CPU error" 99 = "F99 CPU error - program EPROM checksum" # No frame/rating register is published. Verify both source and target # nameplates manually before restoring parameters. Settings are 40101-40198 # and 40221-40296. Exclude 40190 CT Ratio (physical to that starter) and # 40199 Miscellaneous Commands (factory reset, reflash, BIST, meter resets). [parameters] ranges = [[100, 188], [190, 197], [220, 295]]