# SimpleReadValue

## `SimpleReadValue` (FB)

`FUNCTION_BLOCK` SimpleReadValue

#### Kurzbeschreibung

Dient zum Auslesen eines Modbuswertes verschiedener Functions Codes sowie verschiedener Datentypen bis 64 Bit Werte. Die auszulesenden Adressen werden bei Werten größer 16 bit automatisch auf bis zu 4 Register erweitert. Über ein Array können die Rohwerte immer direkt verarbeitet werden. Als Parameter gibt es die Möglichkeit Werte direkt zu skalieren.

#### Darstellung

<figure><img src="/files/l5ICm2RYHiM6SWRB0Oa7" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/gn37Y2voQJRXWrn7hVZ6" alt=""><figcaption></figcaption></figure>

### Auswertung der Istwerte bei den Function-Codes 01 (Read Coils) bzw. 02 (Read Discrete Inputs)

Bei der Auswertung der Istwerte ist nur der Ausgang `arwRawValue` zu beachten. Es handelt sich dabei um ein Array, bestehend aus vier Variablen `arwRawValue[0]` - `arwRawValue[3]` vom Typ `WORD` (= 16 Bit). Die Festlegung der zu übertragenden Bits erfolgt primär durch die Wahl des Function-Codes (eFunctionCode) und der Start-Adresse (wRegisterAddr). Die Anzahl der zu übertragenden Bits wird durch die Wahl des zu erwartenden Datentyps (eExpectedType) festgelegt. Es werden daher je nach Datentyp 16, 32 oder 64 aufeinander folgende Bits übertragen. Es werden immer mindestens 16 aufeinander folgende Bits übertragen.

Die Istwerte stehen wie folgt zur Verfügung:

16 übertragene Bits: Istwerte in `arwRawValue[0]` 32 übertragene Bits: Istwerte in `arwRawValue[0]` und `arwRawValue[1]` 64 übertragene Bits: Istwerte in `arwRawValue[0]`, `arwRawValue[1]`, `arwRawValue[2]` und `arwRawValue[3]`

Aufgabe: Lese den Istwert von Coil 17

Einstellungen: eFunctionCode: ReadFunctionCodes.FC01\_ReadCoils wRegisterAddr = 17 eExpectedType = EXPECTED\_TYPE.TYPE\_BYTE (= 8 Bit)

Aufgrund der Tatsache, dass immer mindestens 16 aufeinander folgende Bits übertragen werden, werden die Istwerte der Coils 17 - 32 angefordert. Nach der erfolgreichen Übertragung stehen die Istwerte in der Variablen `arwRawValue[0]` zur Verfügung:

`arwRawValue[0].0`: Istwert von Coil 17 `arwRawValue[0].1`: Istwert von Coil 18 `arwRawValue[0].2`: Istwert von Coil 19 `arwRawValue[0].3`: Istwert von Coil 20 `arwRawValue[0].4`: Istwert von Coil 21 `arwRawValue[0].5`: Istwert von Coil 22 `arwRawValue[0].6`: Istwert von Coil 23 `arwRawValue[0].7`: Istwert von Coil 24 `arwRawValue[0].8`: Istwert von Coil 25 `arwRawValue[0].9`: Istwert von Coil 26 `arwRawValue[0].10`: Istwert von Coil 27 `arwRawValue[0].11`: Istwert von Coil 28 `arwRawValue[0].12`: Istwert von Coil 29 `arwRawValue[0].13`: Istwert von Coil 30 `arwRawValue[0].14`: Istwert von Coil 31 `arwRawValue[0].15`: Istwert von Coil 32

### CODESYS

InOut:

| Scope       | Name                | Type                             | Initial                                      | Comment                                                                                                                                                                 |
| ----------- | ------------------- | -------------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Input       | `xEn`               | `BOOL`                           | TRUE                                         | Freigabe / Sperrung der Kommunikation (TRUE = Freigabe)                                                                                                                 |
| Input       | `byUnitId`          | `BYTE`                           | 0                                            | Adresse des Geräts                                                                                                                                                      |
| Input       | `xUpdateActual`     | `BOOL`                           | FALSE                                        | Aktualisierung der Istwerte (bei jeder ansteigenden Flanke)                                                                                                             |
| Input       | `xResError`         | `BOOL`                           | FALSE                                        | <p>Reinitialisierung der Ausgänge <code>eErrorCodeCom</code> bzw.<br><code>eErrorCodeDev</code> auf den fehlerfreien Zustand (bei jeder<br>ansteigenden Flanke)</p>     |
| Inout       | `ModbusClient`      | `ModbusClientBase`               |                                              | Client des Geräts                                                                                                                                                       |
| Output      | `eExpectedTypeFb`   | EXPECTED\_TYPE                   |                                              | <p>Rückmeldung - Erwarteter Datentyp für die empfangenen<br>Modbus-Daten</p>                                                                                            |
| Output      | `eFunctionCodeFb`   | ReadFunctionCodes                |                                              | Rückmeldung - Modbus-Function-Code für das Modbus-Telegramm                                                                                                             |
| Output      | `wRegisterAddrFb`   | `WORD`                           |                                              | <p>Rückmeldung - Startadresse des Registers für das Modbus-<br>Telegramm</p>                                                                                            |
| Output      | `arwRawValue`       | `ARRAY` \[0 .. 3] `OF` `WORD`    |                                              | Rohwerte der Register des Modbus-Telegramms                                                                                                                             |
| Output      | `rScaleFactorFb`    | `REAL`                           |                                              | <p>Rückmeldung - Skalierungsfaktor — Formel: rValue = rawVal<br>\* rScaleFactor</p>                                                                                     |
| Output      | `xBigEndianFb`      | `BOOL`                           |                                              | <p>Rückmeldung - Position des höchstwertigen Elements in einem<br>Datum (TRUE = niedrigste Speicherstelle)</p>                                                          |
| Output      | `xSwapValueFb`      | `BOOL`                           |                                              | <p>Rückmeldung - Freigabe / Sperrung des Positionswechsels der<br>Bytes eines Registers (TRUE = Wechsel aktiv)</p>                                                      |
| Output      | `rValue`            | `REAL`                           |                                              | <p>Endwert (Formel: rValue = rawVal \* rScaleFactor),<br>Parameter: <em>eExpectedType</em>, <em>xSwapValue</em>, <em>xIsBigEndian</em> und<br><em>rScaleFactor</em></p> |
| Output      | `xAlarm`            | `BOOL`                           |                                              | Sammelstörung (TRUE = Störung)                                                                                                                                          |
| Output      | `xAlarmCom`         | `BOOL`                           |                                              | Sammelstörung - Kommunikation (TRUE = Störung)                                                                                                                          |
| Output      | `eErrorCodeCom`     | ModbusErrorCode                  |                                              | Fehlercode - Kommunikation (0 = kein Fehler)                                                                                                                            |
| Output      | `eErrorCodeDev`     | SIMPLE\_READ\_VALUE\_ERROR\_CODE |                                              | Fehlercode - Gerät (0 = kein Fehler)                                                                                                                                    |
| Output      | `xBusy`             | `BOOL`                           |                                              | Kommunikationsanzeige (TRUE = Kommunikation)                                                                                                                            |
| Input Const | `xBigEndian`        | `BOOL`                           | FALSE                                        | <p>Position der höchstwertigen 16 Bits in einem Datum (TRUE =<br>höchstwertigste 16 Bit zuerst) (nur relevant für 32 / 64<br>Bit)</p>                                   |
| Input Const | `xSwapValue`        | `BOOL`                           | TRUE                                         | <p>Freigabe / Sperrung des Positionswechsels der Bytes eines<br>Registers (TRUE = Wechsel aktiv) (nur relevant für 32 /<br>64 Bit)</p>                                  |
| Input Const | `rScaleFactor`      | `REAL`                           | 1.0                                          | Skalierungsfaktor — Formel: rValue = rawVal \* rScaleFactor                                                                                                             |
| Input Const | `eExpectedType`     | EXPECTED\_TYPE                   | EXPECTED\_TYPE.TYPE\_UINT16                  | Erwarteter Datentyp für die empfangenen Modbus-Daten                                                                                                                    |
| Input Const | `eFunctionCode`     | ReadFunctionCodes                | ReadFunctionCodes.FC03\_ReadHoldingRegisters | Modbus-Function-Code für das Modbus-Telegramm                                                                                                                           |
| Input Const | `wRegisterAddr`     | `WORD`                           |                                              | Startadresse des Registers für das Modbus-Telegramm                                                                                                                     |
| Input Const | `tTimeUpdateActual` | `TIME`                           | TIME#3s0ms                                   | <p>Updateintervall für die Vorgänge, die durch den Eingang<br><code>xUpdateActual</code> beeinflusst werden</p>                                                         |


---

# 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://support.powerio.com/hub/codesys-hvac/hvac-modbus-library/functionblocks/generic/simplereadvalue.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.
