# Modbus

### Beschreibung

Die powerIO-Box T1.B100 wird als Gateway zwischen Modbus TCP und Modbus RTU eingesetzt. Die Konfiguration der seriellen Ports für Modbus RTU kann flexibel vorgenommen werden.

Die Unit ID des anzusprechenden Modbus-Geräts muss vom Modbus-Client (typischerweise eine Steuerung) angegeben werden. Durch einen automatischen Scan werden die Modbus-Geräte den entsprechenden seriellen Ports zugeordnet. Diese Zuordnung wird in einer internen Liste gespeichert.

#### Besonderheiten:

* **Verhalten bei nicht verfügbaren Geräten**\
  Bei nicht verfügbaren Geräten werden keine blockierenden Timeouts erzeugt, wodurch die Kommunikation mit anderen Teilnehmern ungestört fortgesetzt werden kann.
* **Test der angeschlossenen Geräte**\
  Die angeschlossenen Geräte können autark ohne vorher fertiggestellte Modbus-TCP-Client-Logik über einen internen Modbus-Test getestet und überprüft werden.
* **Modbus-Trace-Log für die Fehleranalyse**\
  Für die Fehleranalyse wird ein Modbus-Trace-Log zur Verfügung gestellt. Dieses zeichnet die Abfragen von allen Modbus-TCP-Clients auf. Dabei werden auch Performancewerte bereitgestellt.
* **Unterstützung von Multi-Master-Abfragen**\
  Es können Abfragen von mehreren Modbus-TCP-Clients parallel durchgeführt werden. Die Abfragen werden in einer Warteschlange abgearbeitet und dem entsprechenden Modbus-TCP-Client zugewiesen.

### Auswahl für Modbus Protokoll

* Modbus wird immer als Standardeinstellung für einen seriellen Port ausgewählt. Wurde jedoch zuvor ein anderes Protokoll ausgewählt, kann über das Dropdown-Menü "Feldbus" der Modus Modbus ausgewählt werden.

<figure><img src="/files/kVZau0uT7zrdsdyJzhRl" alt=""><figcaption><p>Serial Settings Übersicht - Auswahl über Drop Down Menü "Fieldbus"</p></figcaption></figure>

### Modbus Test

Auf dem Gerät powerIO-Box T1.B100 ist ein vollständiger Modbus Test Client implementiert. Dieser funktioniert, auch wenn von einem anderen bestehenden Modbus TCP Client abgerufen wird.

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

#### Unterstützte Function Codes des Modbus Test

Lesen:

* FC 1 - Read Coil Status
* FC 2 - Read Input Status
* FC 3 - Read Holding Register
* FC 4 - Read Input Register

Schreiben:

* FC 5 - Write Coil
* FC 6 - Write Register
* FC 15 - Write Multiple Coil
* FC 16 - Write Multiple Register

{% hint style="info" %}
Es ist zu beachten, dass der Modbus-Stack alle Modbus-Funktionscodes unterstützt, die zur Verfügung stehen und von den angeschlossenen Modbus-RTU-Geräten unterstützt werden. Der Modbus-Test unterstützt dabei jedoch nur die gängigsten Funktionscodes.
{% endhint %}

#### Weitere Funktionen

* Darstellung für unterschiedliche Datentypen: *boolean, byte, sbyte,* *uint16, int16,* *uint32, int32,* *float32, uint64, int64,* *float64*, *double*, *string*
* Byte Swapping
* Little and Big Endian

### Modbus Log

Die Modbus Trace Log ermöglicht, die Modbus-Kommunikationsdaten in Echtzeit zu überwachen und zu analysieren. Dabei können Filter verwendet werden, um spezifische Daten anzuzeigen, und die Log-Daten können für eine weiterführende Analyse exportiert werden.

<figure><img src="/files/1gLdDW1XHtylqwhrnpei" alt=""><figcaption></figcaption></figure>

**Aktivierung/Deaktivierung des Modbus-Logs:**

* Das Modbus-Logging wird über den **"DISABLE MODBUS LOG"**-Button deaktiviert.
* Der Timer oben rechts gibt die verbleibende Zeit an, bevor das Logging automatisch deaktiviert wird.

**Filteroptionen:** Zur gezielten Analyse der Log-Daten werden verschiedene Filteroptionen bereitgestellt:

* **State**: Es wird nach Status gefiltert (erfolgreich/fehlgeschlagen).
* **Unit ID**: Es erfolgt eine Eingrenzung nach einer spezifischen Geräte-ID.
* **Type**: Serial oder interne Register des Modbus TCP Gateways T1.B100
* **Serial Port**: Zugeordneter Serial Port
* **Function Code**: Filter nach Function Code
* **Start Address**: Die Register Adresse
* **Quantity**: Die Anzahl der Register

Die angezeigten Logs werden durch die Filterauswahl entsprechend angepasst.

**Aktionen:**

* **RESET FILTER**: Es werden alle Filtereinstellungen zurückgesetzt.
* **CLEAR DATA**: Die angezeigten Log-Daten werden aus der Oberfläche gelöscht.
* **EXPORT DATA**: Die gefilterten Log-Daten werden im CSV Format exportiert, um sie extern weiterzuverarbeiten.

**Anzeige der Log-Daten**

Die angezeigten Logs enthalten folgende Informationen:

* **Timestamp**: Der Zeitstempel der Modbus-Anfrage wird dargestellt.
* **State**: Der Status der Anfrage wird angezeigt (z. B. ✅ für erfolgreich).
* **Info**: Details zur Anfrage werden bereitgestellt, einschließlich:
  * Unit ID: Die Unit ID
  * Type: Gerätetyp (z. B. T1.B100 oder Serial mit Port Zuordnung).
* **Request Data**:
  * FC (Function Code): Der genutzte Modbus-Befehl wird angezeigt.
  * Address: Die Startadresse des Zugriffs wird angegeben.
  * Quantity: Die Anzahl der gelesenen Register wird dargestellt.
* **Response Data**:
  * Read Value: Die vom Zielgerät zurückgegebenen Werte werden angezeigt (RTU).
* **Processing Time**: Die Dauer der Anfragebearbeitung wird in Millisekunden angegeben.

### Interner Register

Die powerIO-Box T1.B100 hat eine interne Modbus TCP Unit ID. Diese Unit ID ist **248**

{% hint style="danger" %}
**Achtung:**\
**Ab Firmware-Version v4.0** wurde die Unit-ID auf **248** geändert. In früheren Firmware-Versionen (vor v4.0) betrug die Unit-ID 240.

Diese Änderung wurde vorgenommen, da die Unit-ID 240 eine gültige Serial-Unit-ID ist. Der Wertebereich für Serial-Unit-IDs liegt zwischen 1 und 247.
{% endhint %}

FC3 / FC4

<table><thead><tr><th>Adresse</th><th>Länge</th><th width="376">Beschreibung</th><th>Datentyp</th></tr></thead><tbody><tr><td>1000</td><td>20</td><td>Hostname</td><td>string</td></tr><tr><td>1020</td><td>20</td><td>Box Name</td><td>string</td></tr><tr><td>1040</td><td>20</td><td>Box Comment</td><td>string</td></tr><tr><td>1060</td><td>1</td><td>CPU Auslastung</td><td>UINT16 (0,1)</td></tr><tr><td>1061</td><td>1</td><td>RAM Auslastung</td><td>UINT16 (0,1)</td></tr><tr><td>1062</td><td>6</td><td>System Zeit</td><td>UINT16</td></tr><tr><td>1068</td><td>4</td><td>Uptime</td><td>UINT16</td></tr><tr><td>1072</td><td>1</td><td>Temperatur CPU</td><td>UINT16 (0,1)</td></tr><tr><td>1073</td><td>1</td><td>Temperatur System 1</td><td>UINT16 (0,1)</td></tr><tr><td>1074</td><td>1</td><td>Temperatur System 2 5V</td><td>UINT16 (0,1)</td></tr><tr><td>1075</td><td>1</td><td>Temperatur System 3 Compute Module</td><td>UINT16 (0,1)</td></tr><tr><td>1080</td><td>20</td><td>Seriennummer</td><td>string</td></tr><tr><td>1100</td><td>20</td><td>System ID1</td><td>string</td></tr><tr><td>1120</td><td>20</td><td>System ID2</td><td>string</td></tr><tr><td>1150</td><td>1</td><td>Strom 24V Spannungsversorgung</td><td>UINT16 (0,01)</td></tr><tr><td>1151</td><td>1</td><td>Spannung 24V Spannungsversorgung</td><td>UINT16 (0,01)</td></tr><tr><td>1152</td><td>1</td><td>Leistung 24V Spannungsversorgung</td><td>UINT16 (0,01)</td></tr><tr><td>1153</td><td>1</td><td>Spannung 5V Spannungsversorgung</td><td>UINT16 (0,01)</td></tr><tr><td>1154</td><td>1</td><td>Spannung 3,3V Spannungsversorgung</td><td>UINT16 (0,01)</td></tr><tr><td>1155</td><td>1</td><td>Spannung 3,3V Compute Module</td><td>UINT16 (0,01)</td></tr><tr><td>1156</td><td>1</td><td>Spannung 1,8V Compute Module</td><td>UINT16 (0,01)</td></tr><tr><td>1160</td><td>1</td><td>Störung Ampere 24V Spannungsversorgung</td><td>UINT16</td></tr><tr><td>1161</td><td>1</td><td>Störung Spannung 24V Spannungsversorgung</td><td>UINT16</td></tr><tr><td>1162</td><td>1</td><td>Störung Leistung 24V Spannungsversorgung</td><td>UINT16</td></tr><tr><td>1163</td><td>1</td><td>Störung Spannung 5V Spannungsversorgung</td><td>UINT16</td></tr><tr><td>1164</td><td>1</td><td>Störung Spannung 3,3V Spannungsversorgung</td><td>UINT16</td></tr><tr><td>1165</td><td>1</td><td>Störung Spannung 3,3V Compute Module</td><td>UINT16</td></tr><tr><td>1166</td><td>1</td><td>Störung Spannung 1,8V Compute Module</td><td>UINT16</td></tr><tr><td>2021</td><td>1</td><td>Bus Port 1 Konfiguration</td><td>UINT16</td></tr><tr><td>2022</td><td>1</td><td>Bus Port 2 Konfiguration</td><td>UINT16</td></tr><tr><td>2023</td><td>1</td><td>Bus Port 3 Konfiguration</td><td>UINT16</td></tr><tr><td>2024</td><td>1</td><td>Bus Port 4 Konfiguration</td><td>UINT16</td></tr><tr><td>2025</td><td>1</td><td>Bus Port 5 Konfiguration</td><td>UINT16</td></tr><tr><td>3000</td><td>20</td><td>Ethernet Adapter</td><td>string</td></tr><tr><td>3020</td><td>20</td><td>Link</td><td>string</td></tr><tr><td>3040</td><td>20</td><td>Mode</td><td>string</td></tr><tr><td>3060</td><td>20</td><td>MAC</td><td>string</td></tr><tr><td>3080</td><td>1</td><td>Link</td><td>UINT16</td></tr><tr><td>3081</td><td>1</td><td>Netzwerkmodus (Zahl)</td><td>UINT16</td></tr><tr><td>3090</td><td>6</td><td>MAC</td><td>string</td></tr><tr><td>3100</td><td>4</td><td>IP Adresse</td><td>UINT16</td></tr><tr><td>3104</td><td>4</td><td>Subnetzmaske</td><td>UINT16</td></tr><tr><td>3108</td><td>4</td><td>Gateway IP</td><td>UINT16</td></tr><tr><td>3112</td><td>4</td><td>DNS1 IP</td><td>UINT16</td></tr><tr><td>3116</td><td>4</td><td>DNS2 IP</td><td>UINT16</td></tr><tr><td>3120</td><td>4</td><td>Broadcast IP</td><td>UINT16</td></tr><tr><td>3130</td><td>10</td><td>IP Adress</td><td>string</td></tr><tr><td>3140</td><td>10</td><td>Subnetzmaske</td><td>string</td></tr><tr><td>3150</td><td>10</td><td>Gateway IP</td><td>string</td></tr><tr><td>3160</td><td>10</td><td>DNS1 IP</td><td>string</td></tr><tr><td>3170</td><td>10</td><td>DNS2 IP</td><td>string</td></tr><tr><td>3180</td><td>10</td><td>Broadcast IP</td><td>string</td></tr></tbody></table>

Beispiel - Abfrage IP - Adresse

<figure><img src="/files/HuVeVjTVVIwPth7oJisZ" alt=""><figcaption><p>Beispiel Abfrage IP-Adresse</p></figcaption></figure>

### Modbus Exception Codes

| **Code** | **Name**                                | **Beschreibung**                                                                                                                                    |
| -------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| 01       | Illegal Function                        | Der Function Code wird vom Slave nicht unterstützt.                                                                                                 |
| 02       | Illegal Data Address                    | Die angeforderte Adresse ist ungültig. Möglicherweise ist die Länge falsch, oder es ist eine ungültige Register Adresse.                            |
| 03       | Illegal Data Value                      | Ein Wert im Datenfeld der Anfrage ist ungültig. Die Struktur der Anfrage ist fehlerhaft, z. B. falsche Länge oder nicht zulässige Werte.            |
| 04       | Slave Device Failure                    | Ein nicht behebbarer Fehler ist während der Verarbeitung aufgetreten.                                                                               |
| 05       | Acknowledge                             | Die Anfrage wurde angenommen, aber die Verarbeitung dauert länger. Der Master sollte später erneut anfragen, ob die Verarbeitung abgeschlossen ist. |
| 06       | Slave Device Busy                       | Das Gerät ist momentan beschäftigt und kann die Anfrage nicht ausführen. Der Master sollte die Anfrage später wiederholen.                          |
| 07       | Negative Acknowledge                    | Das Gerät kann die Anfrage nicht ausführen, z. B. bei fehlerhaften Programmieranfragen.                                                             |
| 08       | Memory Parity Error                     | Ein Konsistenzfehler wurde im Speicher erkannt. Das Gerät kann die Anfrage erneut versuchen, eventuell ist jedoch ein Service erforderlich.         |
| 10 (0A)  | Gateway Path Unavailable                | Dieser Fehler tritt i.d.R. auf, wenn die TCP Abfrage zum Gateway zwar erfolgreich ist, aber das Gerät nicht zugeordnet werden kann.                 |
| 11 (0B)  | Gateway Target Device Failed to Respond | Dieser Fehlercode tritt auf, wenn das Gerät bereits zugeordnet ist, aber nicht mehr antwortet.                                                      |


---

# 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/t1.b100/feldbus-protokolle/modbus.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.
