pull down to refresh

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 current

For 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_done

If there is no speed switch, at_speed can 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,n

Measure acceleration during commissioning under the worst expected mechanical
load. If T_timeout expires 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

  • DOL contactors: simplest, but highest inrush.
  • Star-delta: lower line current, but has a transition disturbance and only
    suits motors/loads that can accelerate with reduced torque.
  • Soft starters: reduce mechanical shock and starting current. Schneider
    publishes a four-pump cascade example using one soft starter and sequenced
    contactors:
    https://www.se.com/ca/en/download/document/NNZ85564/
  • VFDs: best when the process also needs speed control, but require harmonic,
    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.