LabVIEW Design Patterns
LabVIEW Design Patterns
Agenda
What is a design pattern (what) Benefits of design patterns (why) Examples of design patterns (how)
More One features more feature, .. Small Uhh Ilast think one its Ibig promise! working Add Start aHow few features .. Ithappen? works! no deal did this
Reliability
Many have been used for years they are tried and true Refer to large development community and resources online
Caution
You can needlessly complicate your life if you use an unnecessarily complex design pattern. Do not forget the most common design pattern of all data flow!
Basic Tools
Loops Shift registers Case structures Enumerated constants Event structures
Todays Discussion
As we look at each design pattern, we will discuss
A problem we are trying to solve Background How it works Technical implementation Demonstration Use cases/considerations
Design Patterns
Basic State machine Event-driven user interface Producer/consumer Advanced Object-oriented programming
10
State Machine
I need to execute a sequence of events, but the order is determined programmatically.
Flexible
Oops, I forgot to include a step to do [y]!
Easily Maintained
Thank goodness John used a state machine, we can easily understand whats going on
12
Background
Static Sequence Dynamic Sequence: Distinct states can operate in a programmatically determined sequence
13
Vending Machine
Initialize Wait
Change Requested Quarter Deposited Total <50 Nickel Deposited Dime Deposited Total <50 Total <50 No Input
Change
Quarter
Total 50 Total >50
Dime
Total 50
Nickel
Total 50
Vend
Exit
Total = 50
14
15
Framework
Decide which state to execute Decide which state is next
16
17
Transition Logic
Figure out which state is next
18
19
20
State Machine
DEMO
21
Recommendations
Use Cases
Almost Always Any program with more than a few steps
Considerations
You need to make a state diagram LabVIEW Statechart module implements UML statecharts
22
LabVIEW Intermediate I
Background
Procedural-driven programming
Performs a set of instructions in sequence Requires polling to capture events Cannot determine order of multiple events
Event-driven programming
Determines execution at run time Waits for events to occur without consuming CPU Remembers order of multiple events
24
How It Works
Event structure nested within loop Blocking function until event registered or time-out Events that can be registered:
Notify events are only for interactions with the front panel Dynamic events implement programmatic registration Filter events help you to screen events before they are processed
25
How It Works
1. Operating system broadcasts system events (mouse click, keyboard) to applications Event structure captures registered events and executes appropriate case Event structure returns information about event to case Event structure enqueues events that occur while it is busy
2.
3. 4.
26
27
DEMO
28
Recommendations
Use Cases
UI: Conserve CPU usage UI: Ensure you never miss an event Drive slave processes
Considerations
Event structures eliminate determinism Avoid placing two event structures in one loop Remember to read the terminal of a latched Boolean control in its value change event case
29
LabVIEW Intermediate I
Producer/Consumer
I have two processes that need to execute at the same time, and I need to make sure one cannot slow the other down.
How It Works
Master loop tells one or more slave loops when they can run Allows for asynchronous execution of loops Data independence breaks data flow and permits multithreading Decouples processes Thread 1
Thread 2
Thread 3
31
32
Queues
Adding Elements to the Queue
Dequeueing Elements
34
Producer/Consumer
36
Producer/Consumer
DEMO
37
Recommendations
Use cases Handling multiple processes simultaneously Asynchronous operation of loops Considerations Multiple producers one consumer One queue per consumer If order of execution of parallel loop is critical, use occurrences
39
Object-Oriented Programming
Dynamic Allocation Inherited Functionality Polymoprhism
41
42
Copy Machine
Inkjet Printer
43
Laser Printer
Printer
Inkjet
Copy Machine
44
45
DEMO
46
Solution: Event-Based Design Pattern We should use an event-based design pattern because we need to limit the CPU usage while waiting for events. We should not encounter any race conditions because our actions are independent of each other.
48
Solution: Producer/consumer We should use the producer/consumer architecture because we have multiple tasks that run at different speeds and cannot afford to be slowed down. Each of the external readings will be in separate producer loops and the data processing and logging will be in the consumer loop.
50
DEMO
52
Resources
Example Finder New>>Frameworks>>Design Patterns ni.com/statechart ni.com/labview/power Training
LabVIEW Intermediate I and II
54
Experienced User
Advanced User
LabVIEW Advanced I
Certifications
Certified LabVIEW Associate Developer Exam
If you are unsure take the - Quick LabVIEW quiz - Fundamentals exam ni.com/training
55
Certification
56
57
Next Steps
Visit ni.com/training Identify your current expertise level and desired level Register for appropriate courses
$200 USD discount for attending LabVIEW Developer Education Day!
58
Advanced Intermediate
Specialty
Foundation
At Your Convenience
Self-paced course kits On-demand training modules located in the Services Resource Center
ONE PRICE
Questions?