Function Block Diagram

A diagram builds logic from blocks joined by wires. Values flow left to right: tags in, functions in the middle, tags out.

A diagram in the editor: READ StartPB and READ MotorRun into OR, READ StopPB into NOT, both into AND, which feeds WRITE MotorRun

When to use it

Use a diagram for a signal path: combine inputs, compare a value, time it. Each signal is a wire you can follow.

Use ladder for rungs that read like a wiring drawing, and a chart when the order matters most. All three can share tags in one program.

Create a diagram

  1. Stop the PLC.
  2. In Project Explorer, right-click a program or its Routines folder and choose New Routine…
  3. Type a name. Under Language, choose Function Block Diagram (FBD), then Create routine.
  4. Drag a block from the palette onto the grid, or focus it and press Enter. It arrives unbound, shown as ?.
  5. Select the block and choose its tag.
  6. Drag from an output to an input to draw a wire. Select a wire and choose Disconnect to remove it.

Ladder instructions without a diagram block

XIC (XIC)
Use a READ block on the BOOL tag; the wire is the contact.
XIO (XIO)
Use a READ block on the BOOL tag followed by NOT.
OTE (OTE)
Use a WRITE block on the BOOL tag; it writes its input every evaluation, as a coil does.
MOVE_VALUE (MOVE_VALUE)
A wire from a READ block to a WRITE block is the move.
CALL_ROUTINE (CALL_ROUTINE)
Calling a routine from inside a diagram is not in FBD v1.
STRING_LENGTH (STRING_LENGTH)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_EXTRACT_START (STRING_EXTRACT_START)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_EXTRACT_END (STRING_EXTRACT_END)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_EXTRACT_RANGE (STRING_EXTRACT_RANGE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_CONCATENATE (STRING_CONCATENATE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_INSERT_AFTER (STRING_INSERT_AFTER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_DELETE_RANGE (STRING_DELETE_RANGE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_REPLACE_RANGE (STRING_REPLACE_RANGE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_FIND_FIRST (STRING_FIND_FIRST)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
CHAR_TO_STRING (CHAR_TO_STRING)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_FIRST_CHARACTER (STRING_FIRST_CHARACTER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_READ_CHARACTER (STRING_READ_CHARACTER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_WRITE_CHARACTER (STRING_WRITE_CHARACTER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
STRING_CAPACITY (STRING_CAPACITY)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_SINT_DECIMAL (FORMAT_SINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_SINT_DECIMAL (PARSE_SINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_INT_DECIMAL (FORMAT_INT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_INT_DECIMAL (PARSE_INT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_DINT_DECIMAL (FORMAT_DINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_DINT_DECIMAL (PARSE_DINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_LINT_DECIMAL (FORMAT_LINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_LINT_DECIMAL (PARSE_LINT_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_REAL_DECIMAL (FORMAT_REAL_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_REAL_DECIMAL (PARSE_REAL_DECIMAL)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_DINT_HEX (FORMAT_DINT_HEX)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_DINT_HEX (PARSE_DINT_HEX)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FORMAT_DINT_BINARY (FORMAT_DINT_BINARY)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PARSE_DINT_BINARY (PARSE_DINT_BINARY)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
CHARACTER_TO_CODE (CHARACTER_TO_CODE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
CODE_TO_CHARACTER (CODE_TO_CHARACTER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
MASKED_EQUAL (MASKED_EQUAL)
Not available in FBD v1.
LIM (LIM)
Not available in FBD v1.
MODULO (MODULO)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
NEGATE (NEGATE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
ABSOLUTE_VALUE (ABSOLUTE_VALUE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
SQUARE_ROOT (SQUARE_ROOT)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
CLEAR (CLEAR)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
COMPUTE (COMPUTE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
BITWISE_AND (BITWISE_AND)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
BITWISE_OR (BITWISE_OR)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
BITWISE_XOR (BITWISE_XOR)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
BITWISE_NOT (BITWISE_NOT)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
INTEGER_TO_PACKED_BCD (INTEGER_TO_PACKED_BCD)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PACKED_BCD_TO_INTEGER (PACKED_BCD_TO_INTEGER)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
SCALE_LINEAR (SCALE_LINEAR)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
MASKED_MOVE (MASKED_MOVE)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
COPY_ARRAY (COPY_ARRAY)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
FILL_ARRAY (FILL_ARRAY)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
DISTRIBUTE_BITS (DISTRIBUTE_BITS)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
PID (PID_LOOP)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
LABEL (LABEL)
Routine and class calls are not in FBD v1.
JUMP_TO_LABEL (JUMP_TO_LABEL)
Routine and class calls are not in FBD v1.
CALL_ROUTINE_WITH_ARGUMENTS (CALL_ROUTINE_WITH_ARGUMENTS)
Routine and class calls are not in FBD v1.
ROUTINE_ENTRY (ROUTINE_ENTRY)
Routine and class calls are not in FBD v1.
RETURN_FROM_ROUTINE (RETURN_FROM_ROUTINE)
Routine and class calls are not in FBD v1.
MASTER_CONTROL (MASTER_CONTROL)
Routine and class calls are not in FBD v1.
END_PROGRAM_SCAN (END_PROGRAM_SCAN)
Routine and class calls are not in FBD v1.
MQTT (MQTT_PUBLISH)
Not in FBD v1. A wire from a READ block to a WRITE block moves a value.
NOP (NOP)
Routine and class calls are not in FBD v1.
AFI (AFI)
Routine and class calls are not in FBD v1.
SELECT_FIRST_IN_FIRST_OUT (SELECT_FIRST_IN_FIRST_OUT)
Routine and class calls are not in FBD v1.
SELECT_ROUND_ROBIN (SELECT_ROUND_ROBIN)
Routine and class calls are not in FBD v1.
SELECT_GREEDY (SELECT_GREEDY)
Routine and class calls are not in FBD v1.

The diagram above, block by block

READ, OR, NOT, AND and WRITE make a motor that stays on after Start is released.

  1. Place READ blocks for StartPB, MotorRun and StopPB.
  2. Wire StartPB and MotorRun into OR. Reading MotorRun holds the motor on.
  3. Wire StopPB into NOT.
  4. Wire OR and NOT into AND, and AND into a WRITE for MotorRun.
  5. Run. Press StartPB: MotorRun stays on until StopPB.

Good to know

  • Each input takes one wire. An output can feed several inputs.
  • The number in a block's corner is its order in the scan.

Related