Lightweight SCADA device servers and integrations in Kotlin-Multiplatform
Go to file
2023-05-03 08:16:46 +00:00
.github/workflows Documentation update 2023-05-03 11:05:54 +03:00
.space Fix ktor imports 2022-01-18 17:37:25 +03:00
controls-core Documentation update 2023-05-03 11:05:54 +03:00
controls-ktor-tcp Documentation update 2023-05-03 11:05:54 +03:00
controls-magix-client Documentation update 2023-05-03 11:05:54 +03:00
controls-modbus Documentation update 2023-05-03 11:05:54 +03:00
controls-opcua Documentation update 2023-05-03 11:05:54 +03:00
controls-serial Documentation update 2023-05-03 11:05:54 +03:00
controls-server Documentation update 2023-05-03 11:05:54 +03:00
controls-storage Documentation update 2023-05-03 11:05:54 +03:00
demo Documentation update 2023-05-03 11:05:54 +03:00
docs Documentation update 2023-05-03 11:05:54 +03:00
gradle/wrapper Documentation update 2023-05-03 11:05:54 +03:00
magix Documentation update 2023-05-03 11:05:54 +03:00
.gitignore Add rsocket service 2020-11-03 18:54:52 +03:00
.gitmodules Add magix-rfc as a submodule 2023-02-25 10:55:21 +03:00
.space.kts Update space.kts JVM version 2023-05-03 08:16:46 +00:00
build.gradle.kts Documentation update 2023-05-03 11:05:54 +03:00
gradle.properties Add MQTT prototype (not tested) 2023-04-15 20:00:47 +03:00
gradlew Migrate to K-1.4.0 2020-08-31 12:40:49 +03:00
gradlew.bat Migrate to K-1.4.0 2020-08-31 12:40:49 +03:00
LICENSE Initial commit 2020-02-16 15:34:06 +03:00
README.md Documentation update 2023-05-03 11:05:54 +03:00
settings.gradle.kts Documentation update 2023-05-03 11:05:54 +03:00

JetBrains Research

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:

DataForge-control is a Kotlin-multiplatform application. Asynchronous operations are implemented with kotlinx.coroutines library.

Materials and publications

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:

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/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.