digitaltwin1/readme.md

1.8 KiB

DigitalTwin1

Digital twin for Beckhoff BK-9000 Modbus-TCP coupler (and compatible Wago device)

Overview

This tool connects to a Modbus-TCP coupler, reads it process image and publishes

  • the new state of a discrete input register (digital input) after a change
  • the new value of an input register (analog input) after a change
  • periodically publishes the current values of all input registers (analog inputs)

using MQTT messages. The topic is built from a configured prefix and the index of the particular registers.

Furthermore it subscribes to MQTT messages related to the coils for the setup and anytime a message is received, it set the particular coils accordingly.

Configuration

Configuration is done using a configuration file

[modbus]
client = 172.16.2.157
scanrate = 0.25

[mqtt]
broker = 172.16.2.16
digitalOutputTopicPrefix = dt1/coil
digitalInputTopicPrefix = dt1/di
analogInputEventTopicPrefix = dt1/ai/event
analogInputPeriodicTopicPrefix = dt1/ai/periodic
analogInputPublishPeriod = 10.0

Operation details

While the input and discrete input registers are scanned with the configured scanrate, an action on a coil according to a received message is issued immediately. At the same time the all input registers are scanned.

The MQTT messages related to change events of input or discrete input registers are marked as //retained//.

Usage

The tool is simply started using

python digitaltwin1.py

On default it searches the configuration file at $PWD/config. This can be changed using the commandline argument -f.

The Python modules pymodbus, loguru and paho-mqtt are required.

A docker image with the required dependencies, the tool and a prepared default configuration in a volume is provided at registry.hottis.de/wolutator/digitaltwin1.