Introduction to the Distributed Control and Automation Framework (DCAF)


The Distributed Control and Automation Framework (DCAF) is an application framework designed to help developers by simplifying and accelerating the development of reliable and robust embedded control and test applications in LabVIEW and LabVIEW Real-Time. These applications range from embedded control systems in industrial machines to the automation of distributed motors, valves, pumps and other devices in large test environments.



While the primary deployment platform for applications developed using DCAF is CompactRIO, the same code modules and applications can be deployed to any LabVIEW and LabVIEW Real-Time target including PXI, CompactDAQ, and Single-Board RIO. Additionally, DCAF modules can interface with applications written in other programming languages and communicate to industrial devices using common industrial protocols such as Modbus and EthernetIP.

NI Systems Engineers created DCAF to enable developers to create new test and control systems in less time by combining out-of-box functionality, a configuration-based workflow, and clear points for extension. Using the open source framework, developers have full access to all of the code and are able to modify, customize, and extend the functionality of the framework and of the modules for their specific application needs.



The Distributed Control and Automation Framework is built around a core data engine that automates and manages handling data between sensors, actuators, network protocols, and data processing modules. Each of these modules is developed as a plugin component of the data engine; the framework package includes a variety of prebuilt modules including Modbus, UDP, Scan Engine, TDMS, PID, Alarming, Scaling, and CVT (Current Value Table), and this list will expand as the community creates additional modules (For a full list of available DCAF modules, see the List of Available DCAF Modules page). Developers can modify existing modules or create new modules for the framework in LabVIEW. Using provided templates, developers can also implement core logic for the framework in other programming languages.


Figure 1. DCAF Data Engine


All engine and plugin module functionality is exposed both programmatically and through a provided configuration editor. The editor enables developers to configure the engine, its modules, their data exchange, and appropriate error handling. The editor also allows developers to modify the parameters of deployed solutions without requiring code to be recompiled, greatly enhancing the flexibility of applications built with the framework. Custom-built modules can be configured in the same editor by developing the necessary configuration VIs as part of the module code.


Figure 2. DCAF Development to Deployment


In the Configuration Editor, each target system and the list of modules used in each system are shown and each module can be independently configured. The editor maintains the overall list of tags and channels used in the system and provides tools for auto-mapping as well as displaying a summary of the system configuration. The configuration is stored in a single file which is deployed to each of the target systems and used at runtime to instantiate and configure all of the modules.


Figure 3. DCAF Configuration Editor


Open Source Software

DCAF is provided free of charge under an open source code license (Apache 2.0). It is a community driven and community supported project. Additionally, as of 2017, NI has officially added R&D support for the DCAF core. NI encourages developers and users to participate in the development of DCAF modules and the core code base through the DCAF GitHub repository. Please share framework issues and improvements with the user community by posting your modifications at Questions and comments about DCAF can also be posted in the community group.


Benefits of DCAF

The design and architecture of DCAF provides many significant benefits to the application developer compared to building an application from scratch in LabVIEW or using other programming environments.


Scalable and extensible plugin architecture

Using a standard plugin architecture, developers can easily reuse existing modules and create new modules to meet their application needs. The framework has well defined extension points to enable seamless integration between existing and new modules.


Develop with module templates

Communication and data processing module templates provided with the framework enable developers to quickly create new modules that can be used in the framework. Basic modules can be created by LabVIEW developers with a basic proficiency level and do not require advanced programming skills.


Reuse existing modules

Reuse is the key benefit of most frameworks and architectures, greatly reducing the amount of new code that needs to be implemented for an application. As the library of available framework modules grows, the cost of developing new applications decreases.


Single point I/O, processing, and data services

DCAF is primarily designed to address the needs of applications containing many single-point data channels and tags, and to automate the communication and processing of such data across multiple system targets. Acquisition, communication, and processing of other types of data, including high speed waveforms and vision (image acquisition), can be implemented in parallel to the framework, and external code modules can easily communicate with the framework using defined interfaces.


Built-in best practices

DCAF manages the sequencing and execution of the various code modules on a target and thereby eliminates certain race conditions and significantly reduces the number of other common design and programming mistakes. Following the rules and design guidelines of DCAF, developers create more robust and reliable code in less time.


Optimized for real-time execution

The framework code and module templates have been optimized to run in LabVIEW Real-Time, following the best practices recommended by National Instruments to reduce execution jitter and improve reliability and performance.


Learn More

Together these benefits can help users build higher quality test and embedded software in a fraction of the time when compared to other approaches. To learn more, visit Understanding the Different Components of DCAF and When and How to Use DCAF. Visit Getting Started with DCAF for instructions on installing the framework packages.