2023-05-03 11:05:54 +03:00
[![JetBrains Research ](https://jb.gg/badges/research.svg )](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
# 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 ](https://github.com/mipt-npm/dataforge-core )
* [DataForge documentation ](http://npm.mipt.ru/dataforge/ )
* [Original implementation of DataForge ](https://bitbucket.org/Altavir/dataforge/src/default/ )
DataForge-control is a [Kotlin-multiplatform ](https://kotlinlang.org/docs/reference/multiplatform.html )
application. Asynchronous operations are implemented with
[kotlinx.coroutines ](https://github.com/Kotlin/kotlinx.coroutines ) library.
## Materials and publications
* Video - [A general overview seminar ](https://youtu.be/LO-qjWgXMWc )
* Video - [A seminar about the system mechanics ](https://youtu.be/wES0RV5GpoQ )
* Article - [A Novel Solution for Controlling Hardware Components of Accelerators and Beamlines ](https://www.preprints.org/manuscript/202108.0336/v1 )
### 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:
![](docs/pictures/demo-view.png)
2023-05-08 21:25:25 +03:00
## Documentation
* [Creating a device ](docs/Device%20and%20DeviceSpec.md )
2023-05-03 11:05:54 +03:00
## Modules
${modules}
### `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 ](https://github.com/mipt-npm/plotly.kt ) library.