I'm designing an industrial layout with a Motor Control Center (MCC) managing 8 heavy motors. I need to implement an automated sequential starting system (using relays/PLCs or pneumatic sequences) so they don't trip the main transformer. Are there specific time-delay formulas or open-source logic you use for this? 1000 sats bounty!
1,000 sats bounty
Bumping for visibility
I haven’t a slightest of clue but good luck
There is no safe universal formula such as “wait five seconds between every motor.” The delay must come from the source strength, each motor/starter, the driven load, and positive feedback that the previous start has finished.
For a first-pass screen:
running kVA_i = kW_i / (efficiency_i × PF_i) starting kVA_i = running kVA_i × inrush multiplier_i event kVA_i = non-motor load + already-running motor kVA + starting kVA_i estimated dip % ≈ source/transformer Z % × event kVA_i / transformer kVAFor DOL motors, use the actual locked-rotor current data. A VFD, soft starter, autotransformer, or star-delta starter changes both magnitude and duration, so use its manufacturer curve and the real load-torque profile. This impedance equation is only a screening calculation; a weak utility feeder, generator, long cable, or multiple transformers needs a proper network study.
My control sequence would enforce:
I built a working generator around that model:
Public eight-motor report: https://blossom.primal.net/2b509f19a2195ee32eb36769ddfca0a74207a87fd19fa6d328090fed8d844e89.html
Source ZIP: https://blossom.primal.net/550ec00995593d85fac3ee517f1cf70fb3928bdc7c39a7b2d4859b792eaf3a42
The final acceptance test should trend bus voltage/current during the worst start, confirm acceleration time and feedback, and verify transformer, feeder, protection, cable, harmonic, and arc-flash results with a qualified engineer before commissioning. Payment/contact: https://coinos.io/CircuitSats
Do not choose one fixed delay for all eight motors. The robust design is a PLC state machine that advances on measured proof that the previous motor has finished accelerating, with a timeout as backup.
1. Screen the transformer and bus first1. Screen the transformer and bus first
For every motor collect FLA, locked-rotor current/code, permitted starts per hour, load torque/inertia, starting method and the manufacturer's acceleration/current curve.
A useful transformer-only screening equation is:
start voltage drop % ≈ (motor locked-rotor A / transformer secondary full-load A) × transformer impedance %https://www.se.com/ca/en/faqs/FA102209/ uses that relation and suggests roughly 10–12% as a typical desirable maximum at starting. It is only a screening calculation: the final study must include upstream source impedance, cables, already-running motors, power factor and contactor-coil ride-through. ABB notes that a direct-on-line IE3 motor can draw about 6–13× rated current during acceleration, so using only nameplate FLA is unsafe.
2. Derive the delay from acceleration, not guesswork2. Derive the delay from acceleration, not guesswork
For an approximate check:
t_acc ≈ J_total × (ω_final - ω_initial) / (T_motor_avg - T_load_avg)Use the motor/load curve or a measured start trace whenever possible. Then set:
next-start enable = acceleration complete + current-stable time + engineering marginAn example commissioning rule—not a universal setting—is: RUN auxiliary contact true, phase current below 1.25× FLA for 2 s, and MCC bus voltage above 0.95 pu for 2 s. The maximum starting timeout must remain below the motor's hot locked-rotor withstand time and coordinate with the overload relay.
3. PLC sequence3. PLC sequence
Use one state per motor and never allow overlapping starts:
IDLE -> START_M1 -> VERIFY_M1 -> START_M2 -> VERIFY_M2 ... -> COMPLETE VERIFY_Mi: if RunFB[i] AND Current[i] < StableLimit[i] AND BusVoltage > Vmin for StableTime[i]: advance to START_M(i+1) if StartTimer[i] > MaxStartTime[i]: stop sequence; latch START_FAIL_i if overload, phase-loss, undervoltage or E-stop: go to FAULTAlso enforce minimum off-time and maximum starts/hour, make restart after power loss a deliberate operator choice, and record which permissive blocked each start. If process conditions permit, start the largest motor while the transformer is least loaded; otherwise rank by process priority and validate the worst combination.
This can be implemented in IEC 61131-3 Structured Text or Sequential Function Chart in OpenPLC; hardwired safety and motor protection must remain independent of ordinary PLC logic.
If the voltage study fails, sequencing alone is not enough. Use a soft starter, VFD, wye-delta/autotransformer starter, larger transformer or dedicated feeder. I would not use a pneumatic sequencer for an MCC: it makes diagnostics, interlocking and recovery less deterministic.
Before commissioning, have a qualified power engineer run short-circuit, motor-starting, protection-coordination and arc-flash studies, then tune the thresholds from recorded current and bus-voltage traces.
For motor i, estimate starting current Istart,i = k_i x FLA_i, where k_i is typically about 5-8 for across-the-line starting and lower with a soft starter or VFD. Model the voltage dip at the motor bus from the source impedance: dV_i approximately equals Istart,i x |Zsource| (three-phase per-unit calculation preferred). Order motors by process dependency and the motor-start study. Allow the next start only when measured bus voltage has recovered and the running motor current is stable.A practical PLC state machine for each of 8 motors:1. Verify permissives: E-stop healthy, overload reset, breaker/contactor feedback healthy, process interlocks true, no previous start active.2. Issue START_i and begin a maximum acceleration timer.3. Require RUN feedback within T_pickup; otherwise trip and stop the sequence.4. Wait until current_i < 1.2-1.5 x FLA_i continuously for T_stable (for example 2-5 s) AND bus voltage > 0.95 pu continuously for 1-2 s.5. Then permit START_(i+1). Add a configurable minimum inter-start delay, initially 5-15 s, but validate it from the actual acceleration curves.6. If bus voltage drops below the site limit (often 0.85-0.90 pu during start), inhibit the next motor; if it remains low, abort and alarm.Pseudo-logic:IF all_permissives AND NOT sequence_fault THEN CASE step OF 0: start M1; step_timer := 0; step := 1; 1: IF M1_run AND M1_current < stable_limit AND bus_v > recovery_limit FOR stable_time THEN start M2; step := 2; ELSIF step_timer > accel_timeout THEN sequence_fault := TRUE; END_IF; ... repeat through M8 ... END_CASE;END_IF;Do not size the delay from horsepower alone. Use motor FLA, locked-rotor current/code, acceleration time versus load torque, transformer kVA and percent impedance, feeder impedance, and the utility's allowed voltage dip/flicker limit. Run a motor-start study in ETAP, EasyPower, PowerFactory, or equivalent before commissioning. If the study still fails, use soft starters/VFDs, autotransformer starters, reduced-voltage starting, or split the motors across feeders.Commission by starting one motor at a time while logging RMS voltage and current, then tune thresholds conservatively. Hardwire E-stop and critical protection; do not rely on PLC sequencing as the sole safety layer.
For eight large motors I would not use one guessed delay such as “start one every
10 seconds.” I would use a small state machine and make each transition depend on
both time and evidence that the previous motor has finished accelerating.
First-pass electrical checkFirst-pass electrical check
For a transformer-fed bus, a useful screening approximation is:
I_total,start ≈ Σ(running motor FLA) + LRA_of_next_motor Voltage dip % ≈ transformer impedance % × I_total,start / transformer rated secondary currentFor a DOL induction motor, locked-rotor current is commonly around 6–7 times
full-load current. Schneider gives the same transformer screening relationship
and says a typical desirable motor-start voltage drop is about 10–12%:
https://www.se.com/us/en/faqs/FA102209/
Example only: a 1,000 A transformer with 5% impedance, 300 A of motors already
running, and a next motor LRA of 1,200 A gives:
dip ≈ 5% × (300 + 1,200) / 1,000 = 7.5%That is only a screening calculation. Cable impedance, utility source impedance,
transformer thermal loading, motor torque/speed curves, contactor ratings and
protection coordination still need to be checked by the electrical engineer.
Better rule for the delayBetter rule for the delay
For motor
n, use:next_start_allowed = motor_n_run_feedback AND motor_n_at_speed AND NOT motor_n_overload AND bus_voltage >= V_min AND transformer_current <= I_allow AND settling_timer_doneIf there is no speed switch,
at_speedcan come from a VFD/soft-starter “run”or “at reference” signal, or from measured current falling below a commissioned
threshold after the inrush peak. The timer is then a minimum settling time,
not the sole proof that acceleration completed.
A practical initial setting is:
T_settle,n = measured acceleration time_n + contactor/current settling margin T_timeout,n > T_settle,nMeasure acceleration during commissioning under the worst expected mechanical
load. If
T_timeoutexpires before run/at-speed feedback, stop the sequence,identify the failed motor, and require an operator reset. Do not automatically
start the remaining motors around an unexplained failure unless the process
hazard review explicitly permits it.
IEC 61131-3 Structured Text patternIEC 61131-3 Structured Text pattern
This is vendor-neutral pseudocode for the sequence controller. The real safety
chain, overload contacts and emergency stop should be hardwired or implemented
in a safety-rated system; a normal PLC boolean is not the safety function.
(* One motor may be in the STARTING state at a time. *) IF EStopOK = FALSE OR MainTrip OR AnyOverload THEN FOR i := 1 TO 8 DO MotorCmd[i] := FALSE; END_FOR; Step := 0; SequenceFault := TRUE; END_IF; CASE Step OF 0: (* idle *) IF StartSequence AND EStopOK AND NOT SequenceFault THEN MotorIndex := 1; Step := 10; END_IF; 10: (* verify capacity before starting the next motor *) StartPermit := BusVoltagePct >= MinBusVoltagePct AND TransformerCurrent <= MaxTransformerCurrent AND NOT MotorOverload[MotorIndex]; IF StartPermit THEN MotorCmd[MotorIndex] := TRUE; Step := 20; END_IF; 20: (* wait for real run/at-speed feedback, with timeout *) SettleTimer( IN := MotorRunFb[MotorIndex] AND MotorAtSpeed[MotorIndex], PT := SettleTime[MotorIndex]); StartTimeout( IN := MotorCmd[MotorIndex] AND NOT SettleTimer.Q, PT := StartTimeoutTime[MotorIndex]); IF StartTimeout.Q THEN MotorCmd[MotorIndex] := FALSE; FailedMotor := MotorIndex; SequenceFault := TRUE; Step := 900; ELSIF SettleTimer.Q THEN Step := 30; END_IF; 30: (* advance only after the previous start has settled *) IF MotorIndex < 8 THEN MotorIndex := MotorIndex + 1; Step := 10; ELSE SequenceComplete := TRUE; Step := 100; END_IF; 100: (* all motors running *) IF StopSequence THEN Step := 200; MotorIndex := 8; END_IF; 200: (* optional reverse-order stop *) MotorCmd[MotorIndex] := FALSE; IF NOT MotorRunFb[MotorIndex] THEN IF MotorIndex > 1 THEN MotorIndex := MotorIndex - 1; ELSE Step := 0; END_IF; END_IF; 900: (* faulted: preserve diagnosis until deliberate reset *) IF ResetFault AND EStopOK AND NOT MainTrip AND NOT AnyOverload THEN SequenceFault := FALSE; Step := 0; END_IF; END_CASE;Hardware choiceHardware choice
suits motors/loads that can accelerate with reduced torque.
publishes a four-pump cascade example using one soft starter and sequenced
contactors:
https://www.se.com/ca/en/download/document/NNZ85564/
EMC, bypass and protection review.
Finally, trend actual bus voltage, current and start duration for every motor.
That turns the sequence from a timer guess into a commissioned load-management
system.
Use a voltage/current condition, not only a fixed delay. A fixed five-second timer may work during commissioning and fail later when the driven load, supply impedance, or acceleration time changes.
First estimate whether each start is acceptable. At the MCC, obtain the available three-phase short-circuit current from the utility study or calculate a first approximation from the transformer:
I_FL(transformer) = S / (sqrt(3) * V_LL) I_SC(at transformer terminals) ~= I_FL / Z_pu first-order voltage dip (pu) ~= I_start / I_SCFor example, a 1,000 kVA, 400 V transformer with 6% impedance has about 1,443 A full-load current and 24 kA terminal fault current. A motor drawing 1,800 A while starting would cause roughly 1,800/24,000 = 7.5% dip before adding upstream and cable impedance. Use the motor manufacturer's locked-rotor/current-versus-time curve: DOL starting is often 5-7 times FLA, while a soft starter or VFD changes both the current and acceleration time.
For a better calculation, include transformer, generator/utility, and cable R/X in a motor-starting load-flow study. A simple feeder check is:
Delta V_LL ~= sqrt(3) * I_start * (R*cos(phi) + X*sin(phi))but starting power factor is low and the existing running motors must also be included. The permitted sag is an engineering requirement, not a universal number; check the utility/transformer limits and the dropout voltage of contactors and controls. A common design target is to keep the transient at the MCC around 10% or less, but that is only a starting criterion.
The PLC sequence I use is:
IEC 61131-3 structured-text pseudocode looks like this:
CASE step OF READY: IF autoStart AND allCommonPermissives THEN step := START_M1; END_IF; START_M1: cmd[1] := TRUE; IF runFb[1] AND amps[1] < 1.30 * fla[1] AND stableFor(1, T#3s) THEN step := START_M2; ELSIF startTimeout(1) OR busVoltage < minStartVoltage THEN cmd[1] := FALSE; faultMotor := 1; step := ABORTED; END_IF; START_M2: (* same reusable function block for motor 2 *) END_CASE;Implement the repeated part as a tested MotorStartStep function block and drive an array of eight motor records (command, run feedback, amps, FLA, timeout, permissive, fault). OpenPLC can run IEC 61131-3 logic for a proof of concept; for the real MCC, use the PLC/vendor toolchain accepted by the plant and test with recorded current and bus-voltage trends.
The maximum start timeout can be based on the motor/load acceleration calculation, t_acc = integral(J * d_omega / accelerating_torque), or more practically on the manufacturer's start curve plus measured commissioning time and a documented margin. Also check starts-per-hour and transformer/motor thermal limits; a sequence that avoids instantaneous sag can still overheat equipment after repeated restarts.
Emergency stops, short-circuit protection, overload protection, and personnel-safety interlocks must remain in safety-rated hardware or a safety PLC. The sequencing PLC coordinates starts; it should not replace the protective system.
I would not use a fixed “N seconds per motor” rule. Size the electrical problem first, then let the PLC advance on measured recovery; the timer is a backstop, not the proof that the bus is ready.
1. Calculate each start case
Collect, per motor: FLA, locked-rotor/start current (or the soft-starter/VFD current limit), start power factor, acceleration time, load torque and permitted starts/hour. For the supply collect utility fault level, transformer kVA/%Z/X:R, feeder impedance, existing running load and the minimum ride-through voltage of contactors/drives/process loads.
A useful first screen, with per-phase Thevenin impedance referred to the MCC, is:
sag_% ≈ 100 × √3 × I_start × |Z_th| / V_LLEquivalently, on an approximately reactance-dominated bus, start kVA / short-circuit kVA gives a quick sag estimate. Do the signed complex R+jX calculation for approval because existing load and start PF matter. For step k, include all motors already running plus the starting current of motor k. Eaton’s guide notes that motor inrush creates transformer/conductor voltage dip and that acceptable plant limits vary; this is why a motor-start/coordination study, not an arbitrary delay, signs off the values:
https://www.eaton.com/content/dam/eaton/products/design-guides---consultant-audience/canada/cag/eaton-power-distribution-systems-consulting-application-guide-tb08104003e-tab-1-ca08104001e-ca.pdf
2. Use a feedback-gated sequence
For each motor:
REQUEST → PERMISSIVES_OK → START_CMD → RUN_FEEDBACK → CURRENT_SETTLED → BUS_RECOVERED → NEXTAdvance only when all are true:
V_RECOVERcontinuously forT_STABLE;Use
T_START_MAX[i]to detect failure to accelerate andT_GAP_MIN[i]to prevent chatter, but define them from the motor acceleration curve, protection coordination and starts/hour limit. Do not automatically skip a failed motor unless the process hazard review explicitly permits it. Any undervoltage, feedback timeout or trip should inhibit the next start and latch a diagnosable sequence fault.In IEC 61131-3 terms the transition is roughly:
Next := RunFb[i] AND (Amps[i] <= I_Settled[i]) AND Stable(BusV >= V_Recover, T_Stable) AND CommonPermissives;PLCopen’s SFC model fits this well: steps represent states and transitions move only when their conditions are true:
https://www.plcopen.org/standards/logic/iec-61131-3/faqs/
Rockwell’s published lead/lag motor-group object follows the same pattern—configurable delay plus availability, permissives and interlocks:
https://www.rockwellautomation.com/en-se/docs/studio-5000-logix-designer/38-00/contents-ditamap/instruction-set/plantpax-instructions/plls.html
3. If the first motor still sags the bus
Sequencing cannot fix an oversized individual start. Re-study the start method: soft starter, VFD, autotransformer/reactor, a stiffer/dedicated transformer, or process unloading. Siemens explicitly requires sizing the infeed transformer so start dip remains within tolerance:
https://cache.industry.siemens.com/dl/files/752/109817752/att_1150156/v1/3RE47_Product_Selection_Guide_rev062323.pdf
I published a small JSON→Graphviz/CSV workflow that can document and review the sequence conditions in Git before anyone translates them into vendor PLC code:
https://github.com/AntonsBB/plc-diagram-workflow
Important boundary: ordinary PLC timing must not replace hardwired/safety-rated functions, protection settings, cable/starter sizing or a qualified engineer’s motor-start and short-circuit study.