TOPICS
ni.com/training
0
TOPICS
ni.com/training
Programming Designs
A. Event-Driven Programming
B. Sequential Programming
C. State Machine Design Pattern
D. Multiple Loop Design Patterns
1
ni.com/training
A. Event-Driven Programming
Events and Event Structure
Parts of an Event Structure
Configuring the Event Structure
Recommendations
ni.com/training
Events
Events originate from the user interface, external
I/O, or other parts of the program.
Examples of events:
changing value of a control, pressing a key, clicking the
mouse, resizing the window, closing the window.
Event
—An asynchronous notification that
something has occurred
ni.com/training
Using Event Structures for Event-Driven
Programming
Event Structure
— LabVIEW’s programmatic tool for
handling events.
By using it, execution of code can be made dependent
on whether or not an event has occurred.
Use an Event structure
to handle user-interface
events such as:
• Pressing a button
on the mouse.
• Pressing a key on
the keyboard.
• Changing the value
of a numeric control.
ni.com/training
Parts of an Event Structure
•
Event Selector Label
—Identifies the event case viewed.
•
Timeout
—Specifies time in ms to wait for events.
Default value is
–
1 (indefinite).
Timeou
t
Event Selector Label
ni.com/training
Parts of an Event Structure
(continued)
• Event Data Node—Identifies the data LabVIEW provides
when the event occurs; similar to Unbundle By Name
function.
• Event Filter Node—Identifies the subset of data available in
the Event Data node that the event case can modify.
Event
Data
Node
Event
Filter
Node
ni.com/training
Using an Event Structure
•
In general, place Event structures inside While
Loops.
•
Event structures
handle exactly
one event per
iteration of
the While Loop.
•
Event structures
sleep when no
events occur.
ni.com/training
Configuring the Event Structure
Use a dialog box to configure
each event by right-clicking the
Event structure border and
selecting Edit Events
Handled by This Case from
the shortcut menu.
ni.com/training
Edit Events Dialog Box
Events
Event
Sources
Configured
Events
ni.com/training
Notify and Filter Events
Notify Events (
green
arrow)
• User action has already occurred
and LabVIEW has processed the
event.
Filter Events (
red
arrow)
• User action has already occurred
and LabVIEW has NOT
processed the event.
• Filter events allow you to override
default behavior for event.
DEMONSTRATION
Configure and Use Events
Demonstrate configuring and using an Event
structure.
ni.com/training
Recommendations
•If no timeout is configured and an event never
occurs
– event loop is stuck waiting indefinitely.
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.
ni.com/training
Recommendations (Continued)
•If your event-driven application has a STOP
button, add a Value change event for the button
–
otherwise stopping the VI might be delayed.
•Event structure may be used in a state machine
design pattern. One state is waiting for events and
depending on which of them occurs, the next state
to execute is chosen.
ni.com/training
B. Sequential Programming
Using Sequential Programming
Flow-Through Parameters
Sequence Structures
Flat Sequence Structure
Stacked Sequence Structure
Error Case Structures
ni.com/training
Using Sequential Programming
•
Many of the VIs you write accomplish sequential tasks.
•
By default, LabVIEW does not force sequential
programming.
•
Example: Nothing forces the execution order of these tasks.
Any one of these tasks could happen first
.
ni.com/training
Flow-Through Parameters Force
Execution Order
Use error clusters and refnums to force order of
execution.
ni.com/training
Sequence Structures Force
Execution Order
•
Sequence structures are a structure with frames,
where each frame executes in order.
•
The second frame cannot begin execution until
everything in the first frame completes execution.
ni.com/training
Flat Sequence Structure
Executes each frame beginning with the left-most
frame and ending with the right-most frame.
The previous frame must complete before the next
frame executes.
Data can be passed out of or between frames using
tunnels.
Once the sequence
begins, it cannot be
stopped.
1st
2nd
3rd
ni.com/training
Stacked Sequence Structure
Stacks each frame so you see only one frame at a time.
Executes frame 0, then frame 1, etc. until the last frame
executes.
Returns data only after the last frame executes.
To transfer data from frame to frame, a Sequence Local
must be created (right-
click » Add
Sequence Local).
Once the sequence begins,
it cannot be stopped.
Sequence Local
DEMONSTRATION
Flat Sequence and Stacked
Sequence Structures
• passing data between frames
• tunnel outputs
• shifting between Flat and Stacked Sequence
ni.com/training
Avoid Overuse of Sequence
Structures
… because you cannot stop the execution in the
middle of a sequence.
Single frame sequence structures are better than
multi-sequence frames.
ni.com/training
Better to Use Error Case Structures
Instead, write this VI to enclose the dialog boxes in
Case structures, wiring the error cluster to the case
selectors.
ni.com/training
C. State Machine Design
Pattern
State Programming
State Transition Diagrams
State Machines
Infrastructure
Transitions
Event-Based State Machine
ni.com/training
State Programming
State programming helps you solve the following
issues that sequential programming or flow-
through parameters do not:
•
What if you need to change the order of the sequence?
•
What if you need to repeat one item in the sequence more
often than other items?
•
What if some items in the sequence execute only when
certain conditions are met?
•
What if you need to stop the program immediately, rather
than waiting until the end of the sequence?
ni.com/training
State Transition Diagram
A state transition diagram is a type of flowchart
that indicates the states of a program and
transitions between states.
25
Transition
— Condition, action, or event that
causes the program to move to the next state
State
— Part of a program that satisfies
a condition, performs an action or waits for
an event
ni.com/training
State Transition Diagram Example:
Coffee Vending Machine
initialize:
money=0
€
wait for
event
money=money+coin
dispense money;
money=0
€
dispense coffee;
money=money
–0.50€
coin
inserted
money
≥0.50€
money<0.50
€
money>0
€
money=0
€
cancel button
pressed
ni.com/training
State Machines
•
The state machine design pattern implements
a state diagram or flow chart.
•
It can programmatically determine which state to
execute next.
ni.com/training
State Machines
– Infrastructure
•
State machine is a set of states and transitions between them.
•
Each state can lead to one or multiple states or end the process
flow.
•
State Functionality Code = which action would you like to
perform in this state?
•
Transition Code = which state is next?
While Loop
Case Structure
Shift Register
Type-Defined
Enum
ni.com/training
State Machines
– Transition Code
ni.com/training
Event-Based State Machine
•
Combines event programming with a State
Machine design.
•
Includes a “Wait on Event” case to processes user-
interface events.
ni.com/training
D. Multiple Loop Design
Patterns
Parallelism
Master/Slave Design Pattern
Notifiers
Producer/Consumer Design Pattern
Queues
Notifiers vs. Queues Summary
ni.com/training
Parallelism
• Some tasks require multiple actions to be run in
parallel on several processor cores.
• LabVIEW has built-in methods for communicating
between parallel loops that execute these actions.
32
Parallelism
—executing multiple
tasks at the same time
ni.com/training
Multiple Loop Design Pattern
Parallel Loops
33
ni.com/training
Multiple Loop Design Pattern
Producer/Consumer
34
ni.com/training
Master/Slave Framework
Master/Slave: a type of Producer/Consumer
35
• Master loop
tells the slave
loop(s) when
to execute.
• Notifiers
allow loops to
run at different
rates.
DEMONSTRATION
Notifiers in Action
Build a simple VI following the Master/Slave
design pattern.
ni.com/training
Notifiers
Pros:
• Both loops are synchronized to the master loop—the slave loop
only executes when the master loop sends a notification.
• You can use notifiers to create globally available data, since it is
possible to send data with a notification.
• Using notifiers creates efficient code—there is no need to poll to
determine when data is available from the master loop.
Cons:
• Notifiers do not buffer data.
• If the master loop sends another piece of data before the first piece
of data has been read by the slave loops, that data is overwritten
and lost.
37
ni.com/training
Queues
• Queues are similar to notifiers, except that a queue can
store multiple pieces of data.
• By default, queues work in a FIFO (first in, first out)
manner.
• Use a queue
when you want
to process all data
placed in the queue.
• Use a notifier if you only want to process current data.
• Use the Queue Operations functions to create a queue
for communicating data between sections of a block
diagram or between VIs.
38
ni.com/training
Producer/Consumer Framework (Data)
Data type here
determines the
data type that
can be placed
in the queue
DEMONSTRATION
Queues in Action
Build a simple VI following the Producer/Consumer
design pattern.
ni.com/training
41
Producer/Consumer Framework
(Events)
• Efficiently responds
asynchronously to the
user interface
ni.com/training
Notifiers vs. Queues
– Summary
Tool
Function
Use when
…
Notifier
–
sends alert to helps
control timing of parallel
loops
–
can transfer data
between loops
–
data NOT buffered
(lossy)
–
you have parallel loops that
are running at different
rates and 1+ loop is
dependent on another
–
you want to transfer data
from one loop to another
Queue
–
helps control timing of
parallel loops
–
transfers data between
loops
–
buffers data to be
transferred (FIFO)
–
you have parallel loops that
are running at different
rates and 1+ loop is
dependent on another
–
you want to transfer ALL
data from one loop to
another
ni.com/trainin
g
Create a VI using events. Its front panel should
contain:
• Numeric
Control (I32)
• Numeric
Indicator (I32)
• 2 x String
Indicator
• Stop Button
Homework: Events
ni.com/trainin
g
One string indicator should display the coordinates
of each mouse click.
You could use two numeric indicators as well,
but I recommend playing with string functions (Concatenate,
Number to String) for practice.
Homework: Events
ni.com/trainin
g
When you enter a value in the numeric control, the
remaining indicators should display the difference between
old and new value (positive, negative or 0) and tell if the
number has grown, decreased or remained unchanged.
Homework: Events
ni.com/trainin
g
If nothing happens for 5 seconds, display
a message to the user.
Hint: Functions
» Programming » Dialog & User Interface
Homework: Events
ni.com/trainin
g
Ask for confirmation when the user attempts to
close the window.
Homework: Events
ni.com/trainin
g
Pressing the STOP button ends the program.
Try executing the VI without an event for STOP button
configured. Then add the Value Change event for the button and
observe the difference.
Homework: Events
ni.com/trainin
g
• Write a program using a simple state machine
to familiarize yourself with this design pattern.
• You may use your own ideas or follow the
instructions on the website and create a simple
traffic light.
Homework: Simple State Machine
ni.com/trainin
g
• Create an event-driven state machine.
• The instructions for writing an alarm clock
application are provided on the website. You
might also implement the coffee vending
machine from slide 26 or use your own ideas.
Homework:
Event-Based State Machine
ni.com/trainin
g
Create a VI using the Producer/Consumer
Template.
Homework: Producer/Consumer