Lightweight SCADA device servers and integrations in Kotlin-Multiplatform
Go to file
2024-12-19 12:11:51 +03:00
.github/workflows Documentation update 2023-05-03 11:05:54 +03:00
controls-constructor New hierarchical structure based on CompositeDeviceSpec and ConfigurableCompositeDevice. Also added new builders for PropertyDescriptor and ActionDescriptor 2024-12-19 03:34:01 +03:00
controls-core Added some examples of new API usage. Not all tests are passed. 2024-12-19 12:11:51 +03:00
controls-jupyter reademe update 2024-12-08 12:15:22 +03:00
controls-magix reademe update 2024-12-08 12:15:22 +03:00
controls-modbus reademe update 2024-12-08 12:15:22 +03:00
controls-opcua reademe update 2024-12-08 12:15:22 +03:00
controls-pi reademe update 2024-12-08 12:15:22 +03:00
controls-plc4x reademe update 2024-12-08 12:15:22 +03:00
controls-ports-ktor reademe update 2024-12-08 12:15:22 +03:00
controls-serial reademe update 2024-12-08 12:15:22 +03:00
controls-server reademe update 2024-12-08 12:15:22 +03:00
controls-storage reademe update 2024-12-08 12:15:22 +03:00
controls-vision reademe update 2024-12-08 12:15:22 +03:00
controls-visualisation-compose reademe update 2024-12-08 12:15:22 +03:00
demo Fix naming 2024-12-19 03:40:24 +03:00
docs [WIP] Refactor constructor 2024-05-15 22:49:08 +03:00
gradle GeneratingTimeline fully functional 2024-12-08 10:37:47 +03:00
magix reademe update 2024-12-08 12:15:22 +03:00
simulation-kt reademe update 2024-12-08 12:15:22 +03:00
.gitignore Implement visibility range for collective device 2024-06-07 20:20:39 +03:00
.gitmodules Add magix-rfc as a submodule 2023-02-25 10:55:21 +03:00
build.gradle.kts Change property delegates names 2024-11-29 12:58:24 +03:00
CHANGELOG.md Add lifecycle to ports. Suspended device start 2024-08-03 21:11:59 +03:00
gradle.properties Fix PID demo 2024-06-05 17:19:20 +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 reademe update 2024-12-08 12:15:22 +03:00
settings.gradle.kts GeneratingTimeline fully functional 2024-12-08 10:37:47 +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:

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-plc4x

A plugin for Controls-kt device server on top of plc4x library

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

controls-visualisation-compose

Visualisation extension using compose-multiplatform

Maturity: PROTOTYPE

demo

Maturity: EXPERIMENTAL

magix

Maturity: EXPERIMENTAL

simulation-kt

A framework for combination of asynchronous simulations.

Maturity: PROTOTYPE

Features:

  • timeline : Timeline is an ordered discrete history containing TimeLineEvent

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/device-collective

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-utils

Common utilities and services for Magix endpoints.

Maturity: EXPERIMENTAL

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.