FBD Editor

Build PLC programs visually with the Blockly-based Function Block Diagram editor

Workspace Overview

The FBD Editor provides a visual canvas powered by Blockly where you construct PLC programs by dragging, dropping, and connecting function blocks. The workspace is divided into three areas:

  • Toolbox (left panel) — Contains all available blocks organized by category: Logic, Timers, Counters, Math, Comparison, and more.
  • Canvas (center) — The main editing area where you place and wire blocks together.
  • I/O Panel (right panel) — Shows all available simulation inputs and outputs that you can drag onto the canvas as variable blocks.

You can pan the canvas by clicking and dragging on empty space, and zoom with the scroll wheel. The minimap in the bottom-right corner gives you an overview of your entire program.

Placing Blocks from the Toolbox

To add a block to your program:

  1. Open a category in the toolbox by clicking its name (e.g., Timers).
  2. Drag a block (e.g., TON) from the toolbox onto the canvas.
  3. Release it in the desired position.

Each block shows its name, input connectors on the left, and output connectors on the right. Hover over any connector to see its name and data type.

You can also search for blocks by name using the search bar at the top of the toolbox. This is useful when you know exactly which block you need.

Connecting Block Inputs and Outputs

Wiring blocks together defines the data flow of your program:

  1. Click on an output connector (right side of a block). A wire will begin following your cursor.
  2. Click on a compatible input connector (left side of another block) to complete the connection.
  3. The wire snaps into place and the connection is established.

Type checking is enforced automatically. You cannot connect a BOOL output to an INT input. Incompatible connectors are dimmed when you start dragging a wire, so you can see at a glance which connections are valid.

To remove a connection, right-click the wire and select Delete, or drag the input end of the wire away from its connector and release it on empty canvas space.

Unconnected Inputs

Any input that is not wired to another block's output can be given a constant value. Click the input connector and type a value in the popup field. For example, you might set the PT (preset time) input of a TON timer to T#2s directly.

Creating Custom Function Blocks

When your program grows, you can encapsulate reusable logic into custom function blocks:

  1. Select the blocks you want to group by drawing a selection rectangle around them.
  2. Right-click and choose Create Function Block.
  3. Give your block a name and define which connections become external inputs and outputs.
  4. Your new block appears in the Custom category of the toolbox and can be reused anywhere in the project.

Custom blocks can also be written in Structured Text. See the Structured Text page for details on defining function blocks in code.

Tips for Organizing Large Programs

  • Use comments. Right-click on the canvas and select Add Comment to annotate sections of your program. Comments appear as sticky notes and help teammates understand your intent.
  • Align blocks. Select multiple blocks, right-click, and use Align Horizontally or Align Vertically to keep your layout clean.
  • Group related logic. Use the canvas liberally — spread your program across distinct regions. Place all safety logic in one area, motion control in another, and HMI signals in a third.
  • Name your variables. Instead of relying on default names like Var1, give every variable a descriptive name. The I/O Panel lets you rename variables by double-clicking them.
  • Break programs into POUs. For very large projects, create multiple Program Organization Units (POUs) rather than putting everything in one program. Each POU gets its own canvas and can call function blocks defined in other POUs.
  • Use color coding. Custom function blocks can be assigned colors in the toolbox to visually distinguish different subsystems at a glance.

Keyboard Shortcuts

ShortcutAction
Ctrl+ZUndo
Ctrl+YRedo
Ctrl+C / Ctrl+VCopy / Paste selected blocks
DeleteRemove selected blocks
Ctrl+ASelect all blocks
Ctrl+FSearch toolbox
Ctrl+GGroup selected blocks into a custom function block

On this page