Program Organization Units (POUs) help you organize your PLC code into smaller, manageable parts. This makes your program easier to understand and maintain.
When you want to split a large PLC program into smaller sections.
When you need to reuse code blocks in different parts of your program.
When you want to separate different tasks like input reading, logic processing, and output control.
When you want to improve program clarity by grouping related instructions.
When you want to debug or test parts of your program independently.
Syntax
PLC Programming
POU_TYPE POU_NAME
(* POU code here *)
END_POU
POU_TYPE can be PROGRAM, FUNCTION_BLOCK, or FUNCTION.
POU_NAME is the name you give to this unit, like 'MainProgram' or 'MotorControl'.
Examples
This defines a main program POU where you write the main logic.
PLC Programming
PROGRAM MainProgram
(* Main program code here *)
END_PROGRAM
This defines a function block POU to control a motor with its own variables.
PLC Programming
FUNCTION_BLOCK MotorControl
VAR
Speed: INT;
END_VAR
(* Motor control logic here *)
END_FUNCTION_BLOCK
This defines a function POU that takes inputs and returns a value.
PLC Programming
FUNCTION CalculateSum : INT
VAR_INPUT
A: INT;
B: INT;
END_VAR
CalculateSum := A + B;
END_FUNCTION
Sample Program
This program uses a main program POU that calls a function POU to add two numbers and store the result.
PLC Programming
PROGRAM MainProgram
VAR
Result: INT;
END_VAR
Result := CalculateSum(5, 7);
END_PROGRAM
FUNCTION CalculateSum : INT
VAR_INPUT
A: INT;
B: INT;
END_VAR
CalculateSum := A + B;
END_FUNCTION
OutputSuccess
Important Notes
Each POU type serves a different purpose: PROGRAM for main logic, FUNCTION_BLOCK for reusable blocks with memory, FUNCTION for calculations.
POUs help keep your PLC code clean and easier to debug.
Summary
POUs organize PLC code into smaller parts.
Use PROGRAM, FUNCTION_BLOCK, or FUNCTION depending on your needs.
POUs make your code easier to read, reuse, and maintain.
Practice
(1/5)
1. Which of the following is NOT a type of Program Organization Unit (POU) in PLC programming?
easy
A. MODULE
B. PROGRAM
C. FUNCTION
D. FUNCTION_BLOCK
Solution
Step 1: Recall POU types
The three main POUs are PROGRAM, FUNCTION_BLOCK, and FUNCTION.
Step 2: Identify the incorrect option
MODULE is not a standard POU type in PLC programming.
Final Answer:
MODULE -> Option A
Quick Check:
POUs = PROGRAM, FUNCTION_BLOCK, FUNCTION [OK]
Hint: Remember only three POUs: PROGRAM, FUNCTION_BLOCK, FUNCTION [OK]
Common Mistakes:
Confusing MODULE with FUNCTION_BLOCK
Thinking FUNCTION_BLOCK is not a POU
Mixing hardware modules with POUs
2. Which syntax correctly declares a FUNCTION_BLOCK named MotorControl in IEC 61131-3 standard?
easy
A. PROGRAM MotorControl
END_PROGRAM
B. FUNCTION MotorControl
END_FUNCTION
C. FUNCTION_BLOCK MotorControl
END_FUNCTION_BLOCK
D. FUNCTION_BLOCK MotorControl() END_FUNCTION_BLOCK
Solution
Step 1: Identify correct POU declaration syntax
FUNCTION_BLOCK declaration starts with 'FUNCTION_BLOCK Name' and ends with 'END_FUNCTION_BLOCK'.
Step 2: Check each option
FUNCTION_BLOCK MotorControl
END_FUNCTION_BLOCK matches correct syntax; PROGRAM and FUNCTION declare different POUs; the version with parentheses is invalid.
Final Answer:
FUNCTION_BLOCK MotorControl\nEND_FUNCTION_BLOCK -> Option C
A. METHOD keyword is not allowed inside FUNCTION_BLOCK
B. TIME() is not a valid way to get current time
C. StartTime variable must be VAR_INPUT
D. FUNCTION_BLOCK must not have variables
Solution
Step 1: Check METHOD usage in FUNCTION_BLOCK
METHODs are allowed inside FUNCTION_BLOCKs to define actions.
Step 2: Verify TIME() usage
TIME() is not a standard function to get current time in PLC; this causes an error.
Final Answer:
TIME() is not a valid way to get current time -> Option B
Quick Check:
Invalid TIME() call = TIME() is not a valid way to get current time [OK]
Hint: Check if functions used are standard PLC functions [OK]
Common Mistakes:
Assuming METHODs are disallowed
Thinking all variables must be inputs
Believing FUNCTION_BLOCKs can't have variables
5. You want to create reusable code that holds internal state and can be called multiple times with different inputs. Which POU type should you choose and why?
hard
A. FUNCTION, because it can be called multiple times with different inputs
B. PROGRAM, because it organizes the entire PLC project
C. FUNCTION, because it returns a value and holds state internally
D. FUNCTION_BLOCK, because it can hold data and be reused with different instances
Solution
Step 1: Understand POU types and their features
FUNCTION_BLOCKs can hold internal data/state and be instantiated multiple times.
Step 2: Compare with other POUs
FUNCTIONs return values but do not hold state; PROGRAMs organize code but are not reusable units with state.
Final Answer:
FUNCTION_BLOCK, because it can hold data and be reused with different instances -> Option D
Quick Check:
Reusable with state = FUNCTION_BLOCK [OK]
Hint: Use FUNCTION_BLOCK for reusable code with internal state [OK]
Common Mistakes:
Choosing FUNCTION for holding state
Confusing PROGRAM with reusable unit
Ignoring difference between FUNCTION and FUNCTION_BLOCK
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.