beyond state machines: building modular applications in labview using public & private events
TRANSCRIPT
![Page 1: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/1.jpg)
Justin GoeresSenior Engineer & Product Marketing ManagerJKI
Beyond State Machines:Building Modular Applications in LabVIEW Using Public & Private Events
![Page 2: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/2.jpg)
Let’s Get This Straight
User Events are a very easy-to-use feature with a lot of cool functionality.
They form the basis of JKIʼs primary application frameworks & templates.
If we could get a couple things fixed/added to LabVIEW, we could do even better.
![Page 3: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/3.jpg)
A Public & Private Events Framework
![Page 4: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/4.jpg)
A Public & Private Events Framework
![Page 5: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/5.jpg)
Agenda
!What is it?
![Page 6: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/6.jpg)
Agenda
!What is it?!How does it work?
![Page 7: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/7.jpg)
Agenda
!What is it?!How does it work?!Whatʼs it good for?
![Page 8: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/8.jpg)
Agenda
!What is it?!How does it work?!Whatʼs it good for?!Whatʼs it bad at?
![Page 9: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/9.jpg)
Agenda
!What is it?!How does it work?!Whatʼs it good for?!Whatʼs it bad at?!How can you use it in your projects?
![Page 10: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/10.jpg)
What is it?
!Statefulness / private data!Asynchronous process(es)!Public API!Public Events
![Page 11: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/11.jpg)
Key Benefits
!Module knows nothing about whoʼs consuming the data it produces
!Lightweight & easy to use!Compatible with by-ref and by-val architectures!(Probably) scriptable
![Page 12: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/12.jpg)
How Does it Work?
![Page 13: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/13.jpg)
How Does it Work?
![Page 14: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/14.jpg)
Process VI & Public Events
![Page 15: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/15.jpg)
Process VI & Public Events
Shift register for private module data
![Page 16: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/16.jpg)
Process VI & Public Events
Shift register for private module data
Generate a “Public Event” when “something happens”
![Page 17: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/17.jpg)
Public Events: Sending Information OUT
![Page 18: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/18.jpg)
Public Events: Sending Information OUT
Process VI generates a Public Event...
![Page 19: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/19.jpg)
Public Events: Sending Information OUT
Process VI generates a Public Event...
...which is received by any other Event Structure that’s registered for it.
![Page 20: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/20.jpg)
Public Events: One to Many
Process VI generates a Public Event...
![Page 21: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/21.jpg)
Public Events: One to Many
Process VI generates a Public Event...
...that can be received by any number of consumers!
![Page 22: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/22.jpg)
Private Events: Getting Information IN
![Page 23: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/23.jpg)
Private Events: Getting Information IN
Process VI receives “Private Events” from outside the module
![Page 24: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/24.jpg)
Private Events Are Just Piping
Public API VIs...
...generate Private Events...
...that are handled by the asynchronous Process VI
![Page 25: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/25.jpg)
Private Events Are Just Piping
Public API VIs...
...generate Private Events...
...that are handled by the asynchronous Process VI
![Page 26: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/26.jpg)
Public API / Private Events
![Page 27: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/27.jpg)
Public API / Private Events
![Page 28: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/28.jpg)
Public API / Private Events
![Page 29: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/29.jpg)
Public API / Private Events
Only our Process VI can receive this event
![Page 30: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/30.jpg)
Putting it All Together
![Page 31: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/31.jpg)
Putting it All Together
Client code registers for Public Events
![Page 32: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/32.jpg)
Putting it All Together
Client code invokes Public API
Client code registers for Public Events
![Page 33: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/33.jpg)
Putting it All Together
Start Process & register for Public
Events
Invoke Public API as needed
Exit Module when done
![Page 34: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/34.jpg)
Everything is a Module
AnalogInput
![Page 35: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/35.jpg)
Everything is a Module
AnalogInput
LeakDetection
![Page 36: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/36.jpg)
Everything is a Module
AnalogInput
MotorController
LeakDetection
![Page 37: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/37.jpg)
Everything is a Module
AnalogInput
MotorController
LeakDetection
EKGAnalysis
![Page 38: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/38.jpg)
MainApp
Everything is a Module
AnalogInput
MotorController
LeakDetection
EKGAnalysis
![Page 39: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/39.jpg)
MainApp
Everything is a Module
AnalogInput
MotorController
LeakDetection
EKGAnalysis
![Page 40: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/40.jpg)
MainApp
Everything is a Module
AnalogInput
MotorController
LeakDetection
EKGAnalysis
MainApp UI
![Page 41: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/41.jpg)
Extensions & Tweaks
!Use with by-value & by-ref objects!Community & Protected Events!Dynamically unregister / reregister!Synchronous communication
![Page 42: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/42.jpg)
Things That Suck
!Most annoying bug ever.Fixed in LV2011!!No Event queue management or introspection!No Notifier-like behavior (“ignore previous”)!Memory leaks in Events for large / variable-sized data?
![Page 43: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/43.jpg)
Take Home Point
User Events are a very easy-to-use feature with a lot of cool functionality.
They form the basis of JKIʼs primary application frameworks & templates.
If we could get a couple things fixed/added to LabVIEW, we could do even better.
![Page 44: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/44.jpg)
Now You Try It!
Download the Templatehttp://tinyurl.com/jki-public-private
Discuss ithttp://forums.jki.net
![Page 45: Beyond State Machines: Building Modular Applications in LabVIEW Using Public & Private Events](https://reader034.vdocuments.mx/reader034/viewer/2022051413/5561e47cd8b42aa5068b4d33/html5/thumbnails/45.jpg)
The End!
Discussion!