# Tag Config

Tags configured for retrieval from Modbus registers to cloud signals, using a general structure that is common for all modules. The relevant parts of the tag configuration that are relevant to the Modbus retrieval are:

**ModuleId**: Name of the module, which is ModbusModule\
**Input.Source**: String that defines the address, datatype and unit to retrieve data from.\
**Input.Endpoint**: Slave Id that defines the slave the data must be retrieved from.\
**Input.SamplingRate**: Configuration that defines how often the signal is sampled from the Modbus slave\
**Input.MeasurementType**: Desired data type.

The ***Input.Source*** property, is the one that defines precisely where each value should be retrieved within the Modbus slave:

For example (fields are separated by ; just as OPC UA node configurations):

```
    Source = "adr=40003;unit=1;datatype=uint32;reg=0;blockid=1;"
```

***reg*** is the register that should be accessed, where:

| reg Value | Register         | Access     | Size    |
| --------- | ---------------- | ---------- | ------- |
| 0         | Holding Register | Read/write | 16 bits |
| 1         | Coils            | Read only  | 1 bit   |
| 2         | Discrete Inputs  | Read only  | 1 bit   |
| 3         | Input Registers  | Read/write | 16 bits |

***adr*** is the start address that you want to read from. Do not use 5- or 6- digit address space notation, but in stead without register offset (for example reg=0;adr=3; for address 3 in the Holding Register).\
\&#xNAN;***unit*** is the unit identifier, to identify the units attached to the slave\
\&#xNAN;***datatype*** is the type of data that should be read from register. It supports the following types:

| datatype | Bits | Range                    |
| -------- | ---- | ------------------------ |
| bit      | 1    | 0/1                      |
| uint16   | 16   | 0 -> 65535               |
| int16    | 16   | -32768 -> 32767          |
| uint32   | 32   | 0 -> 4294967295          |
| int32    | 32   | 2147483648 -> 2147483647 |
| float32  | 32   | 1.2E-38 to 3.4E+38       |

***blockid*** The client also supports block reads. This means that all tags configured with the same block id will be read in a single operation (from lowest to highest address). If no block id is specified, the value is read in a separate operation.

For example:

```
    Tag1: Source = "adr=3;unit=1;datatype=uint32;blockid=1"
    Tag2: Source = "adr=7;unit=1;datatype=int16;blockid=1"
    Tag3: Source = "adr=11;unit=1;datatype=uint32;blockid=1"
```

This will execute a block read between the smallest (3) and the highest (11 + 2 words) address, and assign the values to the desired signals (safeguards are present to make sure the block read is reasonable sized). Block reads must be within same unit, but data types can be different.

Multiple block reads are possible.

**Read of single bit from an analog register**\
If you want to read a single bit from a word in a register (holding register or input register), it can be done by specifying the desired bit using a '.' after the address. Bits are numbered 1 to 8.

As an example, this reads bit number 4 from a word at address 3 in the holding register:

```
    Source = "adr=3.4;unit=1;datatype=bit"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tricloudnexus.io/edge/nexus-modules/data-connector-modules/modbusmodule/tag-config.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
