2020-06-07 21:16:19 +03:00
|
|
|
[![JetBrains Research](https://jb.gg/badges/research.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
|
|
|
|
|
2021-01-07 20:13:10 +03:00
|
|
|
# Controls.kt
|
2020-06-10 22:37:20 +03:00
|
|
|
|
2021-01-07 20:13:10 +03:00
|
|
|
Controls.kt (former DataForge-control) is a data acquisition framework (work in progress). It is
|
2020-06-10 22:37:20 +03:00
|
|
|
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.
|
|
|
|
|
2021-01-07 20:13:10 +03:00
|
|
|
Controls.kt uses some concepts and modules of DataForge,
|
2020-06-10 22:37:20 +03:00
|
|
|
such as `Meta` (immutable tree-like structure) and `MetaItem` (which
|
|
|
|
includes a scalar value, or a tree of values, easily convertable to/from JSON
|
|
|
|
if needed).
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
2021-10-06 22:39:38 +03:00
|
|
|
## 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)
|
2020-06-10 22:37:20 +03:00
|
|
|
|
|
|
|
### 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.
|
|
|
|
|
|
|
|
### `dataforge-control-core` module packages
|
|
|
|
|
|
|
|
- `api` - defines API for device management. The main class here is
|
2020-07-19 20:37:44 +03:00
|
|
|
[`Device`](dataforge-device-core/src/commonMain/kotlin/hep/dataforge/control/api/Device.kt).
|
2020-06-10 22:37:20 +03:00
|
|
|
Generally, a Device has Properties that can be read and written. Also, some Actions
|
|
|
|
can optionally be applied on a device (may or may not affect properties).
|
|
|
|
|
|
|
|
- `base` - contains baseline `Device` implementation
|
|
|
|
[`DeviceBase`](dataforge-control-core/src/commonMain/kotlin/hep/dataforge/control/base/DeviceBase.kt)
|
|
|
|
and property implementation, including property asynchronous flows.
|
|
|
|
|
|
|
|
- `controllers` - implements Message Controller that can be attached to the event bus, Message
|
|
|
|
and Property flows.
|
|
|
|
|
|
|
|
### `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.
|
|
|
|
|
|
|
|
Example view of a demo:
|
|
|
|
|
|
|
|
![](docs/pictures/demo-view.png)
|