There is robust documentation on VI block diagrams, so please browse and read the source if you want to understand how and why it works.
To learn how to use it, install the framework and start with the examples at mva-framework-examples (a git repo next to this one).
This repo holds an open-source extension to the LabVIEW Actor Framework and includes the following features:
- Separation of Concerns design pattern (Model-View-ViewModel, in the author's opinion -- See https://blogs.msdn.microsoft.com/dphill/2009/01/31/the-viewmodel-pattern/)
- Mediated data bus with implicit type safety (Subscribers request data by type)
- Viewable class that allows nesting, launching, and event handling goodness
- API for publish and subscribe to transport data with low coupling
- Transport abstraction to allow painless interaction with non-Actor actors (i.e. actors that are not built on the LabVIEW Actor Framework)
- Policy-based subscriptions to decouple behavior of publishers and subscribers ("I want 'x' data of type DBL with these conditions..." --> details abstracted from Publisher and Mediator)
How do I get set up?
All dependencies will be automatically installed by GPM
- @cs/actor-framework-messages (used to implement framework messages)
- @cs/event-logger (for framework debug event logging)
- @cs/listbox (used by mediator bus monitor UI)
- @cs/lookup-table (used multiple places)
- @cs/variant (used in mediation to format unique and human-readable data types)
- Please contact the author if you want to contribute.
- Please report issues, bugs, and suggestions using the linked issue tracker.
Who do I talk to?
- Ethan Stern | Composed Systems, LLC
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[2.2.3] - 2019-09-12
- Updated Transport dependency to fix returning unnecessary error when Observers request formatted strings with no format specifier
[2.2.2] - 2019-09-09
- Incorrect Transport version dependency (should be 0.0.3)
[2.2.1] - 2019-09-09
- Broken ancestry for all Notification Msg descendants (temporary deprecated ancestor to be removed in major version 3)
[2.2.0] - 2019-09-06 - DO NOT USE THIS RELEASE (see 2.2.1)
- Default framework log state is no logging. Minor log format cleanup. To enable framework log, set ENABLE_FRAMEWORK_LOG conditional flag = True
- Community scoping issue (I somehow messed this up again in the last release)
- Old-fashioned polymorphic Request Synchronous Data API (replace calls with malleable method)
- Malleable Request Synchronous Data compatible with all types
[2.1.3] - 2019-08-02
- Incorrect default value of IViewable:Bind Terminal Enabled State (label and value now match Disabled and Grayed Out)
- Community scoping issue that broke deployments after LV2017 (added friend relationship)
[2.1.2] - 2019-05-10
(2.1.1 was an errant publication with an inaccurate Changelog version and date. Source is identical)
- Minor in-placeness optimization to MediatorBusMonitor
- Deprecated (and disabled) Observe Data method from concrete MediatorBusMonitor
- Stale dependency links in obsolete code and unit tests
[2.1.0] - 2019-05-02
- Framework logging now uses explicit log reference (now local, was global)
- Set Minimum Panel Size message to IViewable
- In-placeness optimization of subscription policy
[2.0.0] - 2019-03-21
- Debug logging (new dependency on @cs/event-logger)
- Project flag to conditionally remove all logging (REMOVE_DEBUG_LOGGING)
- Moved location of applicaiton template on disk so it installs with G Package
- Deprecated framework accessors
- ApplicationStyle injection (removed from framework API)
[1.9.1] - 2019-02-14
All prior GPM versions are incomplete, badly linked, or missing dependencies
- Replaced CurrentValueTable dependency (VIP) with malleable LookupTable (G Package)
- Moved all remaining tests out of Source folder
- Migrated from VI Package to G Package
- Relinked dependencies to G Packages
- TimedAverageBuffer and its associated SubscriptionPolicy (which no one used)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.