.github/workflows | ||
.space | ||
controls-constructor | ||
controls-core | ||
controls-jupyter | ||
controls-magix | ||
controls-modbus | ||
controls-opcua | ||
controls-pi | ||
controls-plc4x | ||
controls-ports-ktor | ||
controls-serial | ||
controls-server | ||
controls-storage | ||
controls-vision | ||
demo | ||
docs | ||
gradle | ||
magix | ||
.gitignore | ||
.gitmodules | ||
.space.kts | ||
build.gradle.kts | ||
CHANGELOG.md | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
ktstemplate_generator.kts | ||
LICENSE | ||
README.md | ||
settings.gradle.kts |
Controls.kt
Controls.kt (former DataForge-control) is a data acquisition framework (work in progress). It is based on DataForge, a software framework for automated data processing. This repository contains a prototype of API and simple implementation of a slow control system, including a demo.
Controls.kt uses some concepts and modules of DataForge,
such as Meta
(tree-like value structure).
To learn more about DataForge, please consult the following URLs:
- Kotlin multiplatform implementation of DataForge
- DataForge documentation
- Original implementation of DataForge
DataForge-control is a Kotlin-multiplatform application. Asynchronous operations are implemented with kotlinx.coroutines library.
Materials and publications
- Video - A general overview seminar
- Video - A seminar about the system mechanics
- Article - A Novel Solution for Controlling Hardware Components of Accelerators and Beamlines
Features
Among other things, you can:
- Describe devices and their properties.
- Collect data from devices and execute arbitrary actions supported by a device.
- Property values can be cached in the system and requested from devices as needed, asynchronously.
- Connect devices to event bus via bidirectional message flows.
Example view of a demo:
Documentation
Modules
controls-constructor
A low-code constructor for composite devices simulation
Maturity: PROTOTYPE
controls-core
Core interfaces for building a device server
Maturity: EXPERIMENTAL
Features:
- device : Device API with subscription (asynchronous and pseudo-synchronous properties)
- deviceMessage : Specification for messages used to communicate between Controls-kt devices.
- deviceHub : Grouping of devices into local tree-like hubs.
- deviceSpec : Mechanics and type-safe builders for devices. Including separation of device specification and device state.
- deviceManager : DataForge DI integration for devices. Includes device builders.
- ports : Working with asynchronous data sending and receiving raw byte arrays
controls-jupyter
Maturity: EXPERIMENTAL
controls-magix
Magix service for binding controls devices (both as RPC client and server)
Maturity: EXPERIMENTAL
Features:
- controlsMagix : Connect a
DeviceManage
with one or many devices to the Magix endpoint- DeviceClient : A remote connector to Controls-kt device via Magix
controls-modbus
A plugin for Controls-kt device server on top of modbus-rtu/modbus-tcp protocols
Maturity: EXPERIMENTAL
Features:
- modbusRegistryMap : Type-safe modbus registry map. Allows to define both single-register and multi-register entries (using DataForge IO). Automatically checks consistency.
- modbusProcessImage : Binding of slave (server) modbus device to Controls-kt device
- modbusDevice : A device with additional methods to work with modbus registers.
controls-opcua
A client and server connectors for OPC-UA via Eclipse Milo
Maturity: EXPERIMENTAL
Features:
- opcuaClient : Connect a Controls-kt as a client to OPC UA server
- opcuaServer : Create an OPC UA server on top of Controls-kt device (or device hub)
controls-pi
Utils to work with controls-kt on Raspberry pi
Maturity: EXPERIMENTAL
controls-ports-ktor
Implementation of byte ports on top os ktor-io asynchronous API
Maturity: PROTOTYPE
controls-serial
Implementation of direct serial port communication with JSerialComm
Maturity: EXPERIMENTAL
controls-server
A combined Magix event loop server with web server for visualization.
Maturity: PROTOTYPE
controls-storage
An API for stand-alone Controls-kt device or a hub.
Maturity: PROTOTYPE
controls-vision
Dashboard and visualization extensions for devices
Maturity: PROTOTYPE
demo
Maturity: EXPERIMENTAL
magix
Maturity: EXPERIMENTAL
controls-storage/controls-xodus
An implementation of controls-storage on top of JetBrains Xodus.
Maturity: PROTOTYPE
demo/all-things
Maturity: EXPERIMENTAL
demo/car
Maturity: EXPERIMENTAL
demo/constructor
Maturity: EXPERIMENTAL
demo/echo
Maturity: EXPERIMENTAL
demo/magix-demo
Maturity: EXPERIMENTAL
demo/many-devices
Maturity: EXPERIMENTAL
demo/mks-pdr900
Maturity: EXPERIMENTAL
demo/motors
Maturity: EXPERIMENTAL
magix/magix-api
A kotlin API for magix standard and some zero-dependency magix services
Maturity: EXPERIMENTAL
magix/magix-java-endpoint
Java API to work with magix endpoints without Kotlin
Maturity: EXPERIMENTAL
magix/magix-mqtt
MQTT client magix endpoint
Maturity: PROTOTYPE
magix/magix-rabbit
RabbitMQ client magix endpoint
Maturity: PROTOTYPE
magix/magix-rsocket
Magix endpoint (client) based on RSocket
Maturity: EXPERIMENTAL
magix/magix-server
A magix event loop implementation in Kotlin. Includes HTTP/SSE and RSocket routes.
Maturity: EXPERIMENTAL
magix/magix-storage
Magix history database API
Maturity: PROTOTYPE
magix/magix-zmq
ZMQ client endpoint for Magix
Maturity: EXPERIMENTAL
magix/magix-storage/magix-storage-xodus
Maturity: PROTOTYPE
demo
module
The demo includes a simple mock device with a few properties changing as sin
and cos
of
the current time. The device is configurable via a simple TornadoFX-based control panel.
You can run a demo by executing application/run
Gradle task.
The graphs are displayed using plotly.kt library.
Templates
This feature required kotlin
to be installed in your system. Read more
You may run gradle task generateKTStemplates
instead of raw launch, but it will work slowly. Sample ./gradlew generateKTStemplates
This project supports generating of files from .ktstemplate.
files. Current docs:
Using
- Create file contains
.ktstemplate
in its name - Write variables before the first
H*
(starting with#
) section - Launch
kotlin ${thisscriptname}
with required args
File sample
first = hello
second = world
# Sample
This is sample of $first $second
Will have next result:
# Sample
This is sample of hello world
Launch
This script accept next args:
[...paths] [--plain] [--recursive]
Where:
...paths
- Paths to the files-templates or folders with files-templates--plain
- will look only into the folders frompaths
--recursive
- (default) will look into the folders frompaths
and recursively in subfolders