All Together Now
Version Information
This documentation is for version 0.06.0
of the ATN library.
Overview
ATN provides an interface for reading distributed statuses and setting commands to distributed subsystems. It’s helpful to think of ATN as a broker that allows independent subsystems to communicate with each other by publishing and subscribing to certain topics on the broker. This may be reminiscent of the MQTT protocol for some, but here it is intended for communication between local processes on a single CPU. The core portion of ATN keeps track of the value of each topic, and it allows each Module in the system to publish a new value to that topic, or to subscribe to value changes for that topic.
The diagram below shows ‘Module A’ publishing a TRUE value to the “state1” topic. Because Modules B, C, and D have all subscribed to receive updates when the “state1” topic changes value, they are each notified of the change, and can act on the new value locally.
Terminology
This section defines some of the common terms that are used throughout the ATN documentation.
Registration and Subscription
Throughout this documentation, the terms registration and subscription occur frequently. A module is said to register/subscribe when it connects the value of a local variable to the value of an ATN topic. The difference between the two terms lies in the direction of information flow:
- Registration: This makes a variable available via the ATN core, for any module to read and use.
- Subscription: This performs the read on a variable that has already been registered with ATN.
Note that ATN does not cyclically store the value of a registered variable into its own memory. Instead, the value of the local variable itself is made available as a topic, meaning that as soon as the variable’s value is changed it is available for other modules to access and act upon.
Statuses use a registration model, while commands use a subscription model. These two concepts can be used separately with state checks and command sets, or can be used together in a PLCOpen interface for a clean handshaking mechanism between subsystems.
States and Commands
ATN is heavily based around the notion of states and commands. These are just special use cases for the topics that ATN core manages. They still function in the same manner, using a string to uniquely identify each one.
Models
ATN is extremely flexible, and leads to many possible implementation architectures. Models are described in certain sections of the documentation to better illustrate suggested design patterns.
Use Cases
- Machines with process logic that is distributed across several tasks
- Machines that can benefit from “loose coupling” of subsystems
- Machines that require “1 to many” or “many to 1” connections between subsystems
- Machines that have a process that requires steps to be performed in order
- Machines that have optional steps in a process
- Machines that need a configurable process
Overview
- Usage
- Functions
- Structures
Get started and basic library usage
Function APIs
Structures and enums