Expand description
RoboPLC
RoboPLC is an ultimate pack of a framework and tools for creating real-time micro-services, PLCs and industrial-grade robots in Rust.
The crate is designed to let using all its components both separately and together.
RoboPLC is a part of EVA ICS industrial automation platform.
§Technical documentation
Available at https://info.bma.ai/en/actual/roboplc/index.html
§Examples
Can be found at https://github.com/roboplc/roboplc/tree/main/examples
§DataBuffer
buf::DataBuffer
covers a typical data exchange pattern when data
frames are collected (cached) from a single or multiple producers, then taken
by a single consumer in bulk and submitted, e.g. into a local database or into
an external bus.
-
always has got a fixed capacity
-
thread-safe out-of-the-box
-
frames may be forcibly pushed, overriding the previous ones, like in a ring-buffer.
§Hub
hub::Hub
implements a data-hub (in-process pub/sub) model, when multiple
clients (usually thread workers) exchange data via a single virtual bus instead
of using direct channels.
This brings some additional overhead into data exchange, however makes the architecture significantly clearer, lowers code support costs and brings additional features.
-
classic pub/sub patterns with no data serialization overhead
-
based on
pchannel
which allows to mix different kinds of data and apply additional policies if required -
a fully passive model with no “server” thread.
§pdeque and pchannel
A policy-based deque pdeque::Deque
is a component to build policy-based
channels.
pchannel
is a channel module, based on the policy-based deque.
Data policies supported:
- Always a frame is always delivered
- Latest a frame is always delivered, previous are dropped if no room (acts like a ring-buffer)
- Optional a frame can be skipped if no room
- Single a frame must be delivered only once (the latest one)
- SingleOptional a frame must be delivered only once (the latest one) and is optional
Additionally, components support ordering by data priority and automatically drop expired data if the data type has got an expiration marker method implemented.
pchannel
is a real-time safe channel, mean it may be not so fast as popular
channel implementations (it may be even slower than channels provided by
std::sync::mpsc
). But it is completely safe for real-time applications,
mean there are no spin loops, data is always delivered with minimal latency and
threads do not block each other.
§Real-time
thread_rt::Builder
provides a thread builder component, which extends the
standard thread builder with real-time capabilities: scheduler policies and CPU
affinity (Linux only).
supervisor::Supervisor
provides a lightweight task supervisor to manage
launched threads.
§Controller
controller::Controller
is the primary component of mixing up all the
functionality together.
§I/O
io
module provides a set of tools to work with field devices and SCADA
buses.
Currently supported:
-
Modbus (RTU/TCP) via
io::modbus
(Modbus client/master example, Modbus server/slave example), requiresmodbus
crate feature. -
Raw UDP in/out via
io::raw_udp
(Raw UDP in/out example) -
Subprocess pipes via
io::pipe
(Subprocess pipe example) -
EVA ICS EAPI in/out via
io::eapi
(EVA ICS example), requireseapi
crate feature.
§Using on other platforms
The components thread_rt
, supervisor
and controller
can work on
Linux machines only.
Re-exports§
pub use parking_lot_rt as locking;
pub use metrics;
Modules§
- Event buffers
- Reliable TCP/Serial communications
- Controller and workers
- In-process data communication pub/sub hub, synchronous edition
- In-process data communication pub/sub hub, asynchronous edition
- I/O
- Policy-based channels, synchronous edition
- Policy-based channels, asynchronous edition
- Policy-based data storages
- A lighweight real-time safe semaphore
- Task supervisor to manage real-time threads
- Real-time thread functions to work with
supervisor::Supervisor
and standalone - Various time tools for real-time applications
- A memory cell with an expiring value
Macros§
- A macro which can be used to match an event with enum for
Hub
subscription condition
Enums§
- The crate error type
- An enum representing the available verbosity level filters of the logger.
Traits§
- Implements delivery policies for own data types
Functions§
- Configures stdout logger with the given filter. If started in production mode, does not logs timestamps
- Immediately kills the current process and all its subprocesses with a message to stderr
- Returns true if started in production mode (as a systemd unit)
- Sets panic handler to immediately kill the process and its childs with SIGKILL. The process is killed when panic happens in ANY thread
- Terminates the current process and all its subprocesses in the specified period of time with SIGKILL command. Useful if a process is unable to shut it down gracefully within a specified period of time.
Type Aliases§
Derive Macros§
- Automatically implements the
DataDeliveryPolicy
trait for an enum