📖 Scenario: You are programming a simple PLC to control two water pumps in a factory. Each pump needs to be controlled separately using the same function block, but with different settings.
🎯 Goal: Create two instances of a function block called PumpControl. Set different speed values for each pump and then read their status.
📋 What You'll Learn
Create a function block instance named pump1 of type PumpControl
Create a function block instance named pump2 of type PumpControl
Set the speed input of pump1 to 100
Set the speed input of pump2 to 150
Call the function blocks to update their status
Print the status output of both pump1 and pump2
💡 Why This Matters
🌍 Real World
In factories, multiple devices often use the same control logic but need separate settings. Function block instances let you reuse code easily.
💼 Career
PLC programmers use function block instances daily to manage multiple machines efficiently without rewriting code.
Progress0 / 4 steps
1
Create function block instances
Create two function block instances named pump1 and pump2 of type PumpControl.
PLC Programming
Hint
Use the VAR section to declare your function block instances.
2
Set speed inputs for pumps
Set the speed input of pump1 to 100 and the speed input of pump2 to 150.
PLC Programming
Hint
Use the assignment operator := to set the speed inputs.
3
Call the function blocks
Call the function blocks pump1 and pump2 to update their status.
PLC Programming
Hint
Call the function blocks by writing their names followed by parentheses.
4
Print pump statuses
Print the status output of pump1 and pump2 using WriteLn statements.
PLC Programming
Hint
Use WriteLn and CONCAT to print the status messages.
Practice
(1/5)
1. What is the main purpose of using function block instances in PLC programming?
easy
A. To reuse code with separate memory for each instance
B. To write code that runs only once
C. To combine multiple programs into one file
D. To create global variables accessible everywhere
Solution
Step 1: Understand function block instances
Function block instances allow you to reuse the same code but keep data separate for each instance.
Step 2: Compare options
Only To reuse code with separate memory for each instance correctly describes this purpose. Other options describe unrelated concepts.
Final Answer:
To reuse code with separate memory for each instance -> Option A
Quick Check:
Function block instances = separate memory reuse [OK]
Hint: Think: same code, different data for each instance [OK]
Common Mistakes:
Confusing instances with global variables
Thinking instances run only once
Mixing instances with program files
2. Which of the following is the correct syntax to declare two separate instances of a function block named TimerFB in IEC 61131-3 style?
easy
A. Timer1 -> TimerFB; Timer2 -> TimerFB;
B. Timer1 : TimerFB; Timer2 : TimerFB;
C. Timer1 = TimerFB(); Timer2 = TimerFB();
D. Timer1 : TimerFB() Timer2 : TimerFB()
Solution
Step 1: Recall IEC 61131-3 instance declaration
Instances are declared with name : FunctionBlockName; syntax.
Step 2: Check options
Timer1 : TimerFB; Timer2 : TimerFB; uses correct syntax with semicolons. Others use invalid or incorrect syntax.
Final Answer:
Timer1 : TimerFB; Timer2 : TimerFB; -> Option B
Quick Check:
Instance declaration uses colon and semicolon [OK]
Hint: Use colon and semicolon to declare instances [OK]
Common Mistakes:
Using equal sign instead of colon
Omitting semicolons
Adding parentheses after function block name
3. Given the following code snippet in a PLC program:
Timer1 : TimerFB;
Timer2 : TimerFB;
Timer1(IN := TRUE);
Timer2(IN := FALSE);
// After one cycle, what is the state of Timer1.Q and Timer2.Q?
medium
A. Timer1.Q = TRUE, Timer2.Q = FALSE
B. Timer1.Q = FALSE, Timer2.Q = TRUE
C. Timer1.Q = TRUE, Timer2.Q = TRUE
D. Timer1.Q = FALSE, Timer2.Q = FALSE
Solution
Step 1: Understand instance independence
Timer1 and Timer2 are separate instances with their own inputs and outputs.
Step 2: Analyze input signals
Timer1.IN is TRUE, so Timer1.Q will become TRUE after timing. Timer2.IN is FALSE, so Timer2.Q remains FALSE.
Final Answer:
Timer1.Q = TRUE, Timer2.Q = FALSE -> Option A
Quick Check:
Separate instances keep outputs independent [OK]
Hint: Each instance acts independently with its own inputs [OK]
Common Mistakes:
Assuming outputs share state between instances
Confusing input signals for both instances
Ignoring instance separation
4. Identify the error in this function block instance declaration:
Timer1 : TimerFB
Timer2 : TimerFB;
medium
A. Incorrect function block name
B. Extra semicolon after Timer2 declaration
C. Using colon instead of equal sign
D. Missing semicolon after Timer1 declaration
Solution
Step 1: Check syntax for instance declarations
Each instance declaration must end with a semicolon.
Step 2: Locate the missing semicolon
Timer1 declaration lacks a semicolon at the end, causing syntax error.
Final Answer:
Missing semicolon after Timer1 declaration -> Option D
Quick Check:
Each declaration ends with semicolon [OK]
Hint: Always end instance declarations with semicolon [OK]
Common Mistakes:
Omitting semicolon after each instance
Confusing colon with equal sign
Assuming semicolon is optional
5. You want to control three independent motors using the same function block MotorControlFB. Which approach correctly uses function block instances to achieve this?
hard
A. Create three copies of MotorControlFB code with different names
B. Declare one instance MotorControlFB and call it three times with different inputs
C. Declare three instances: Motor1, Motor2, Motor3 of MotorControlFB and call each separately
D. Use global variables inside MotorControlFB to handle all three motors
Solution
Step 1: Understand instance independence for multiple devices
Each motor needs its own instance to keep control data separate.
Step 2: Evaluate options
Declare three instances: Motor1, Motor2, Motor3 of MotorControlFB and call each separately declares three separate instances, allowing independent control. Declare one instance MotorControlFB and call it three times with different inputs reuses one instance incorrectly. Use global variables inside MotorControlFB to handle all three motors uses globals, which mixes data. Create three copies of MotorControlFB code with different names duplicates code, which is inefficient.
Final Answer:
Declare three instances: Motor1, Motor2, Motor3 of MotorControlFB and call each separately -> Option C
Quick Check:
Multiple devices = multiple instances [OK]
Hint: One instance per device keeps data separate [OK]
Common Mistakes:
Trying to reuse one instance for multiple devices
Using global variables inside function block
Copy-pasting code instead of using instances
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.