.github/workflows | ||
.space | ||
controls-core | ||
controls-magix-client | ||
controls-modbus | ||
controls-opcua | ||
controls-pi | ||
controls-ports-ktor | ||
controls-serial | ||
controls-server | ||
controls-storage | ||
demo | ||
docs | ||
gradle/wrapper | ||
magix | ||
.gitignore | ||
.gitmodules | ||
.space.kts | ||
build.gradle.kts | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
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-core
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.
controls-ktor-tcp
Maturity: EXPERIMENTAL
controls-magix-client
Maturity: EXPERIMENTAL
controls-modbus
Maturity: EXPERIMENTAL
controls-opcua
Maturity: EXPERIMENTAL
controls-serial
Maturity: EXPERIMENTAL
controls-server
Maturity: EXPERIMENTAL
controls-storage
Maturity: PROTOTYPE
demo
Maturity: EXPERIMENTAL
magix
Maturity: EXPERIMENTAL
controls-storage/controls-xodus
Maturity: PROTOTYPE
demo/all-things
Maturity: EXPERIMENTAL
demo/car
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
Maturity: EXPERIMENTAL
magix/magix-java-client
Maturity: EXPERIMENTAL
magix/magix-mqtt
Maturity: PROTOTYPE
magix/magix-rabbit
Maturity: PROTOTYPE
magix/magix-rsocket
Maturity: EXPERIMENTAL
magix/magix-server
Maturity: EXPERIMENTAL
magix/magix-storage
Maturity: EXPERIMENTAL
magix/magix-zmq
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.