Zeus Ladder Diagram (LD) Editor

Draw control logic as ladder rungs — it compiles to Structured Text and runs on the controller.

How it works

A ladder POU is stored as an ordinary Structured Text file: the diagram model rides in a leading comment marker (*@LADDER … *) and the compiled ST is the body. Because the file is valid ST, everything else in the IDE — compile, download, upload, sync, rename — works on it unchanged. Open the POU and the IDE shows this graphical editor; press Show ST to see the generated code.

Quick start

  1. Create a ladder program: New program → Ladder Program (LD).
  2. Press + Rung to add a rung.
  3. Drag a part from the Parts palette onto the rung (or click a part to add it to the last rung).
  4. Pick the variable for each element (type a new name, or choose a declared one from the list).
  5. Add an output coil on the right.
  6. Press Add missing declarations to declare any new variables, then Build / Download.

Toolbar

ButtonWhat it does
+ RungAdds a new empty rung at the bottom.
Declarations…Edits the program's VAR … END_VAR block directly.
Add missing declarationsScans the diagram and declares any referenced variable (as BOOL) and any function-block instance (with the right type) that isn't declared yet.
Show STToggles a live view of the generated Structured Text.
? HelpOpens this page.
live status (top-right)When online: 🟢 online · N symbols · X/Y matched tells you live data is arriving and how many of this diagram's variables were found on the controller.

Parts & palette

The Parts row holds every element type. Two ways to use it:

Either way the element editor opens pre-set to that part, so you only pick the variable.

Contacts

PartSymbolConducts when…
Normally open (NO)─] [─its variable is TRUE
Normally closed (NC)─]/[─its variable is FALSE
Rising edge (P)─]P[─the variable goes FALSE→TRUE (one scan)
Falling edge (N)─]N[─the variable goes TRUE→FALSE (one scan)

Contacts in a row are ANDed (series); parallel branches are ORed. Edge contacts compile to R_TRIG / F_TRIG instances automatically.

Compare box

─[ a > b ]─ conducts when the comparison is true. Operators: >, <, >=, <=, =, <>. Either side can be a variable or a literal (e.g. level > 20000).

Function block box

─[ TON ]─ The rung power to the left drives the block's input pin; the block's output pin continues the rung. Extra outputs (like a timer's ET) can be sent to variables. Pick a Standard block from the dropdown and the pins fill in for you, or choose Custom / library block… for your own function block (e.g. MOTOR_DOL, a PID).

IEC 61131-3 standard blocks

BlockPurposeInputsOutputs
TONOn-delay timerIN, PTQ, ET
TOFOff-delay timerIN, PTQ, ET
TPPulse timerIN, PTQ, ET
CTUCount upCU, R, PVQ, CV
CTDCount downCD, LD, PVQ, CV
CTUDCount up/downCU, CD, R, LD, PVQU, QD, CV
R_TRIGRising-edge detectCLKQ
F_TRIGFalling-edge detectCLKQ
RSReset-dominant latchS, R1Q
SRSet-dominant latchS1, RQ

Blocks chain: one block's output can drive the next block's input along the same rung. Example — a count-up whose Q starts an off-delay timer:

c1(CU := countPB, R := resetPB, PV := 5);
total := c1.CV;
t1(IN := c1.Q, PT := T#3s);
lamp := t1.Q;

Coils (outputs)

CoilSymbolEffect
Coil─( )─the variable follows the rung power each scan
Set (latch)─(S)─sets the variable TRUE when the rung is true; stays set
Reset (unlatch)─(R)─clears the variable FALSE when the rung is true

Rungs, series & parallel

Selecting and editing

Edit a rung as Structured Text

Double-click a rung (or press its ST… button) to see and edit that rung's Structured Text.

A raw ST rung is your responsibility to declare: Add missing declarations can't read variables out of free-form ST, so declare those in Declarations… or in Global Variables.

Variables & globals

Online monitoring

Go Online and the ladder animates from the running controller:

Setting a value or forcing an output changes a running machine immediately. Make sure it is safe.

Tips