Modicon PACs spend their lives on pumps and valves — but when a machine needs a servo, Schneider answers with the Lexium drive family and the Motion Function Blocks (MFB) library: MC_Power, MC_Home, MC_MoveAbsolute, straight out of the PLCopen playbook. Enable it, reference it, send it somewhere.
A Lexium 32 servo on a 400 mm pusher rail, commanded over CANopen. Motion has an etiquette and the blocks enforce it: MC_Power wakes the axis (Disabled → Standstill), MC_Home gives it a reference — and only then will MC_MoveAbsolute accept a target. Try skipping a step: the block answers with an error, not a move.
pwr (Axis := Lexium_1, Enable := TRUE); (* Disabled → Standstill *) home(Axis := Lexium_1, Execute := doHome); (* establish reference *) IF pwr.Status AND home.Done THEN mv(Axis := Lexium_1, Execute := go, (* rising edge! *) Position := 280.0, Velocity := 200.0); END_IF;
Why homing matters: a servo wakes up knowing where its encoder is, not where the machine is. Until MC_Home establishes the reference, "position 280" has no physical meaning — so absolute moves are refused while relative jogs are allowed. Drives with absolute encoders remember the reference through power cycles and skip this dance.
🏭 Process PACs (M340/M580 + Control Expert). Motion via the MFB library commanding Lexium drives over CANopen — fine for door axes, pushers, the occasional positioner on a process skid.
🤖 Machine line (M262 + Machine Expert). Real machine motion — camming, gearing, coordinated axes over Sercos III — lives in EcoStruxure Machine Expert with the full PLCopen MC_ set. Pick the right controller before you pick blocks.
🔁 Rising-edge Execute. Like every PLCopen block: a move fires on the rising edge of Execute, raises Busy, then Done or Error + ErrorId. Re-trigger by dropping and raising Execute.
🧭 The state machine is the law. Disabled → Standstill → Discrete Motion → back to Standstill; ErrorStop on a fault until MC_Reset. Blocks legal in one state are refused in another — the same PLCopen diagram you met in the cross-brand Motion track (D7).
The axis is powered — pwr.Status is TRUE, AxisState is Standstill, the Lexium reports no fault. Yet MC_MoveAbsolute immediately raises Error. What's the most likely cause?