# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University # SPDX-License-Identifier: Apache-2.0 nodes = { modbus_node = { type = "modbus" # Required transport type. Can be either "rtu" or "tcp" transport = "tcp" # Optional timeout in seconds when waiting for responses from a modbus server. # Default is 1.0. response_timeout = 1.0 # # Settings for transport = "tcp". # # Required remote IP address. remote = "127.0.0.1" # Optional remote port. # Default is 502. port = 502 # # Settings for transport = "rtu" # # Required device file. device = "/dev/ttyS0" # Required baudrate. baudrate = 9600 # Required parity. One of "none", "even" and "odd" parity = "none" # Required data bits. One of 5, 6, 7, 8 data_bits = 5 # Required stop bits. One of 1, 2 stop_bits = 1 # The modbus unit ID. # Required for transport = "rtu". # Optional for transport = "tcp". unit = 1 # Optional polling rate for the modbus remote reads. # Defaults to 10. rate = 10 in = { signals = ( # A 32-bit IEEE 754 floating point value. # This spans 2 registers. { # Required type = "float". type = "float" # Required address of the lowest register. address = 0x50 # Optional endianess for joining the 2 16-bit registers into a 32-bit value. # Defaults to "big". word_endianess = "big" # Optional endianess for the 2 bytes within a register. # Defaults to "big". byte_endianess = "big" # Optional scale that should be applied to the integer value. # Defaults to 1. scale = 10 # Optional offset that should be applied to the integer value after scaling. # Defaults to 0. offset = 2 }, # A single bit within a register as a boolean value. { # Required type = "boolean". type = "boolean" # Required address of the register. address = 0x54 # Required bit within the register. # Starting at 0. bit = 0 }, # An integer value. # This may span multiple registers. { # Required type = "integer". type = "integer" # Required address of the lowest register. address = 0x52 # Optional number of registers that should be joined to form the value. # Defaults to 1. integer_registers = 1 # Optional endianess for joining the 16-bit registers into a 32-bit value. # Defaults to "big". word_endianess = "big" # Optional endianess for the 2 bytes within a register. # Defaults to "big". byte_endianess = "big" }, # An float value created by reading an integer and applying an optional offset and scale. # This may span multiple registers. { # Required type = "float". type = "float" # Required address of the lowest register. address = 0x52 # Required number of registers that should be joined to form the value. # A "float" value without the "integer_registers" settings is considered an IEEE 754 float, spanning 2 registers. integer_registers = 1 # Optional endianess for joining the 16-bit registers into a 32-bit value. # Defaults to "big". word_endianess = "big" # Optional endianess for the 2 bytes within a register. # Defaults to "big". byte_endianess = "big" # Optional scale that should be applied to the integer value. # Defaults to 1. scale = 10 # Optional offset that should be applied to the integer value after scaling. # Defaults to 0. offset = 2 } ) } out = { signals = ( # All register mappings described for "in" except for "boolean" are supported in the "out" signals. { type = "float" address = 0x50 # Scale and offset a applied as attributes of the register that is written to. # This means the value written to "register" for a "signal" with "offset" and "scale" will be: # # register = (signal - offset) / scale # # It is fairly common to specify a scale and offset for modbus registers in a device manual. # You should be able to plug those values into this configuration without conversion. scale = 10 offset = 2 }, ) } } }