Case Structure
Download
Report
Transcript Case Structure
Welcome!
Workshop
3 of 7
Today's Topics
Review of Workshop 2
Loops
While
For
Auto-indexing
Shift registers
Case Structure
Review Question 1
True or False?
1. Arrays can contain only one data type.
2. An array must contain at least one element.
3. The Bundle function can be used to add elements to a
cluster.
4. Clusters can contain both controls and indicators within
the same shell; however, arrays cannot.
5. It is possible to have clusters containing arrays as well as
arrays containing clusters.
3
Review Question 1
True or False?
1. Arrays can contain only one data type. TRUE
2. An array must contain at least one element. FALSE
3. The Bundle function can be used to add elements to a
cluster. FALSE
4. Clusters can contain both controls and indicators within
the same shell; however, arrays cannot. FALSE
5. It is possible to have clusters containing arrays as well as
arrays containing clusters. TRUE
4
Review Question 2
The Error Cluster contains which of the following?
a) Boolean
b) Array
c) String
d) Numeric
e) Cluster
5
Review Question 2
The Error Cluster contains which of the following?
a) Boolean - status
b) Array
c) String - source
d) Numeric - code
e) Cluster
6
Review Question 3
An enumeration is a list of ___ and ___ pairs and acts like a
____ to the computer and ____ to the user.
a) integer, string, integer, string
b) Boolean, string, boolean, string
c) Boolean, integer, boolean, integer
d) integer, string, string, integer
7
Review Question 3
An enumeration is a list of ___ and ___ pairs and acts like a
____ to the computer and ____ to the user.
a) integer, string, integer, string
b) Boolean, string, boolean, string
c) Boolean, integer, boolean, integer
d) integer, string, string, integer
8
Review Question 1
If I add a new element to an enum that is saved in
a *.ctl file, how would the file need to be saved in
order to update all of instances
a) Custom control
b) Strict Type Definition
c) Type Definition
Review Question 1
If I add a new element to an enum that is saved in
a *.ctl file, how would the file need to be saved in
order to update all of instances
a) Custom control
b) Strict Type Definition
c) Type Definition
Review Question 2
Which of the following always remain unique to
each instance?
a) Label
b) Default value
c) Size
d) Data type
e) Representation (numerics)
f)
Description
Review Question 2
Which of the following always remain unique to
each instance?
a) Label
b) Default value
c) Size
d) Data type
e) Representation (numerics)
f)
Description
Review Question 3
True or False?
A custom control can only be used for the project
within which it was created.
Review Question 3
True or False?
A custom control can only be used for the project
within which it was created.
FALSE
Loops
• Use loops when you want to repeat a
section of code
• Types:
• While – repeats until a condition is met
• For – repeats for X number of iterations
15
While Loops
•
terminal counts the number of iterations; zero indexed
• Always runs at least once (therefore, really a do-while loop)
• Runs until stop condition is met
• Stop if TRUE
• Continue if TRUE
While Loop
Iteration
terminal
Conditional
terminal
For Loops
•
•
i = zero indexed
N = one indexed
i Terminal counts iterations
Runs according to input N of count terminal
Count
terminal
For Loop
Iteration
terminal
Creating a Loop
2. Enclose code to be repeated
1. Select the structure
3. Drop or drag additional nodes and then wire
Demonstration:
Creating a Loop
Building Arrays with Loops
Auto-Indexing Enabled
Loops can accumulate arrays
at their boundaries with autoindexing
Wire becomes thicker
1D Array
For loops auto-index by
default
While loops output only the
final value by default
0
1
2
3
4
5
Auto-Indexing Disabled
Wire remains the same size
Right-click tunnel and
enable/disable auto-indexing
5
Only one value (last
iteration) is passed out of
the loop
Auto-Indexing Input
• If an array is passed into a For Loop and auto-indexing is enabled, the
number of elements in the array determines the number of iterations of
the For Loop (therefore, you are not required to wire the N terminal)
• If the iteration count terminal is wired and arrays of different sizes are
wired to auto-indexed tunnels, the actual number of iterations is the
smallest of the choices.
Shift Registers - Access Previous Loop Data
“Up and around the loop”
Left terminal provides
stored data at beginning
of next iteration
Right terminal stores data on
completion of current iteration
• Come in pairs that are always aligned with each other
• Available at left and right borders of loop structures
• To create:
• Right-click the border and select Add Shift Register
• Right-click an existing tunnel, select Replace with Shift Register,
and click the opposite loop border to create other half of pair
Shift Registers in action
Value
15
Initial
Value
Before
Loop
Begins
First
Iteration
Second
Iteration
Last
Iteration
Stacked Shift Registers
• Registers remember values from multiple previous iterations
and carry those values to the next iterations
• Values “bump down” with each iteration
• To create:
• Right-click » Add Element
• Expand the left side register (down arrows) up or down by
dragging the small square when the mouse is a double arrow
Initial
Value
Note: Still only
1 register on
right side
Shift Registers - Uninitialized
Run once
VI finishes
Block Diagram
Run again
1st run
2nd run
Initialized
Shift
Register
Output = 5
Output = 5
Not
Initialized
Shift
Register
Output = 4
Output = 8
Demonstration:
Operation of a Shift Register
Case Structure
Case Selector
Label
Selector
Terminal
• Have two or more subdiagrams or cases
• Execute and displays only one case at a time
• An input value determines which subdiagram to execute
• Similar to case statements or if...then...else
statements in text-based programming languages
Case Structure: Inputs
• You can create multiple input tunnels
• Inputs are available to all cases, but do not have
to be used in all cases
Case Structure: Outputs
• You can create multiple output tunnels
• You must define each output tunnel for each case,
otherwise
(1)
• Wire every case (2)
(2)
(3)
• Right-click » Use Default If Unwired (3)
Data Type
Default Value
Numeric
0
Boolean
FALSE
String
Empty
Case Structure
Case Structure
If the error cluster is wired to the selector, the
border of the case structure automatically turns
red or green for the error and non-error cases,
respectively
Holy automatic coloring, Batman!
Demonstration:
Creating a Case Structure and Adding
a Case
Diagram Disable Structure
Use to disable a section of code on the block diagram
Multiple subdiagrams possible – maximum of one enabled
Disabled subdiagrams appear grayed out
Great tool for troubleshooting – don’t have to re-write code
Conditional Disable Structure
Use to define conditions that indicate which code on the
block diagram executes
Examples:
If running as an executable, then programmatically close
LabVIEW when VI finishes
If running on Windows, look for file here; if running on Mac OSX
then look here.
Events
Event — An asynchronous notification that
something has occurred
• Events originate from the user interface, external I/O, or
other parts of the program
Example events:
• Button click
• Value change
• Mouse over
• Key press
35
Event Structure
Event Structure — LabVIEW’s programmatic tool
for handling events.
• Therefore, execution of code can be dependent
on whether or not an event has occurred
• Waits for an event to
occur indefinitely,
unless configured to
timeout.
36
Parts of an Event Structure
•
Event Data Node
Identifies the data
Timeout
Event Selector Label
LabVIEW provides
when the event occurs;
Event Data Node
Event Filter Node
similar to the Unbundle
By Name function
•
Event Filter Node
Identifies the subset of
data available in the
Event Data node that
the event case can
modify
37
Notify and Filter Events
Notify Events
• User action has already occurred
• LabVIEW has processed the event
• Available only in the Event Data node
Filter Events
• User action has already occurred
• LabVIEW has NOT processed the event
• Allows you to override default behavior for event
• Available in the Event Filter node and Event Data node
To Configure an Event Structure…
Right-click the
border and select
Edit Events
Handled by This
Case
Configuring Event Structures
Configured
Events
Event
Sources
Events
Notify and Filter Events in Config. Window
Notify Events (green arrow)
User action has already occurred
Filter Events (red arrow)
User performed action but event is not
processed. Allows you to customize event
handling.
Using Event Structures
• Normally used in a
While Loop
• Control/Indicator the
event configured for is
often placed inside
that event case
• Event structure
handles exactly one
event per iteration
• Sleeps when no
events occur
Event Structures Tips
• If no timeout is configured and an event never
occurs – stuck waiting indefinitely, must abort
VI; therefore, wire the timeout terminal with a
value other than -1 (at least while developing)
• “heavy” code within the Event Structure causes
the front panel to lock up, often confusing the
user – try to keep code in an event case to a
minimum
Demonstration:
Configuring an Event
Homework
• Homework 3 is post at ni.com/mst
• Create a Game
• Student Zone has a lot of ideas
• Email to [email protected]