10 KiB
10 KiB
🇩🇪 Deutsch | 🇬🇧 English | 🇫🇷 Français | 🇪🇸 Español
MODBUS Register Map Definition v1.0
1. Einleitung
Dieses Dokument definiert die MODBUS-Register für die universellen Slave-Nodes des Bewässerungssystems.
1.1. Adressierungs-Philosophie
Alle Register sind in einer einzigen, durchgehenden Liste pro Register-Typ (Input oder Holding) definiert. Eine Spalte "Zugehörigkeit" ordnet die Funktion logisch zu. Die Adressen sind in Blöcken gruppiert, um Raum für zukünftige Erweiterungen zu lassen und die Lesbarkeit zu erhöhen.
0x0000 - 0x000F: Ventilsteuerung & Status0x0010 - 0x001F: Digitale Ausgänge (LEDs / Relais)0x0020 - 0x002F: Digitale Eingänge (Taster / Sensoren)0x00F0 - 0x00FF: Allgemeine Gerätekonfiguration & Status0x0100 - 0x01FF: Firmware-Update-Mechanismus
1.2. Verwendete Funktionscodes
0x03(Read Holding Registers): Zum Lesen von4xxxxRegistern.0x04(Read Input Registers): Zum Lesen von3xxxxRegistern.0x06(Write Single Register): Zum Schreiben eines einzelnen4xxxxRegisters.0x10(Write Multiple Registers): Zum Schreiben mehrerer4xxxxRegister am Stück.
2. Input Registers (3xxxx, Read-Only)
| Adresse (hex) | Name | Zugehörigkeit | Beschreibung |
|---|---|---|---|
| 0x0000 | VENTIL_ZUSTAND_BEWEGUNG |
Ventil | Kombiniertes Status-Register. High-Byte: Bewegung (0=Idle, 1=Öffnet, 2=Schliesst, 3=Fehler). Low-Byte: Zustand (0=Geschlossen, 1=Geöffnet). |
| 0x0001 | MOTORSTROM_MA |
Ventil | Aktueller Motorstrom in Milliampere (mA). |
| 0x0020 | DIGITAL_EINGAENGE_ZUSTAND |
Eingänge | Bitmaske der digitalen Eingänge. Bit 0: Eingang 1, Bit 1: Eingang 2. 1=Aktiv. |
| 0x0021 | TASTER_EVENTS |
Eingänge | Event-Flags für Taster (Clear-on-Read). Bit 0: Taster 1 gedrückt. Bit 1: Taster 2 gedrückt. |
| 0x00F0 | FIRMWARE_VERSION_MAJOR_MINOR |
System | z.B. 0x0102 für v1.2. |
| 0x00F1 | FIRMWARE_VERSION_PATCH |
System | z.B. 3 für v1.2.3. |
| 0x00F2 | DEVICE_STATUS |
System | 0=OK, 1=Allgemeiner Fehler. |
| 0x00F3 | UPTIME_SECONDS_LOW |
System | Untere 16 Bit der Uptime in Sekunden. |
| 0x00F4 | UPTIME_SECONDS_HIGH |
System | Obere 16 Bit der Uptime. |
| 0x0100 | FWU_LAST_CHUNK_CRC |
Firmware-Update | Enthält den CRC16 des zuletzt im Puffer empfangenen Daten-Chunks. |
3. Holding Registers (4xxxx, Read/Write)
| Adresse (hex) | Name | Zugehörigkeit | Beschreibung |
|---|---|---|---|
| 0x0000 | VENTIL_BEFEHL |
Ventil | 1=Öffnen, 2=Schliessen, 0=Bewegung stoppen. |
| 0x0001 | MAX_OEFFNUNGSZEIT_S |
Ventil | Sicherheits-Timeout in Sekunden für den Öffnen-Vorgang. |
| 0x0002 | MAX_SCHLIESSZEIT_S |
Ventil | Sicherheits-Timeout in Sekunden für den Schliessen-Vorgang. |
| 0x0010 | DIGITAL_AUSGAENGE_ZUSTAND |
Ausgänge | Bitmaske zum Lesen und Schreiben der Ausgänge. Bit 0: Ausgang 1, Bit 1: Ausgang 2. 1=AN, 0=AUS. |
| 0x00F0 | WATCHDOG_TIMEOUT_S |
System | Timeout des Fail-Safe-Watchdogs in Sekunden. 0=Deaktiviert. |
| 0x00F1 | DEVICE_RESET |
System | Schreibt 1 um das Gerät neu zu starten. |
| 0x0100 | FWU_COMMAND |
Firmware-Update | 1: Verify Chunk: Der zuletzt übertragene Chunk wurde vom Client als gültig befunden. Der Slave soll ihn nun ins Flash schreiben. 2: Finalize Update: Alle Chunks sind übertragen. Installation abschliessen und neu starten. |
| 0x0101 | FWU_CHUNK_OFFSET_LOW |
Firmware-Update | Untere 16 Bit des 32-Bit-Offsets, an den der nächste Chunk geschrieben werden soll. |
| 0x0102 | FWU_CHUNK_OFFSET_HIGH |
Firmware-Update | Obere 16 Bit des 32-Bit-Offsets. |
| 0x0103 | FWU_CHUNK_SIZE |
Firmware-Update | Grösse des nächsten Chunks in Bytes (max. 256). |
| 0x0180 | FWU_DATA_BUFFER |
Firmware-Update | Startadresse eines 128x16-bit Puffers (256 Bytes). Entspricht den Registern 40384 bis 40511. |
4. Detaillierter Firmware-Update-Prozess
Dieser Prozess ist zustandslos und robust gegen Übertragungsfehler.
- Client: Wählt einen Chunk (max. 256 Bytes) aus der Firmware-Datei und berechnet dessen CRC16.
- Client: Schreibt den Ziel-Offset (z.B.
0) inFWU_CHUNK_OFFSET_...und die Grösse inFWU_CHUNK_SIZE. - Client: Schreibt die Chunk-Daten in den
FWU_DATA_BUFFER(ab Adresse0x0180). - Slave: Empfängt die Daten, legt sie im RAM-Puffer ab und berechnet den CRC. Das Ergebnis wird in
FWU_LAST_CHUNK_CRC(30256) bereitgestellt. - Client: Liest
FWU_LAST_CHUNK_CRCund vergleicht den Wert mit dem selbst berechneten CRC.- Fehler: Gehe zurück zu Schritt 3, um den gleichen Chunk erneut zu senden.
- Erfolg: Fährt mit dem nächsten Schritt fort.
- Client: Schreibt den Befehl
1("Verify Chunk") inFWU_COMMAND(40256). - Slave: Empfängt den Befehl, nimmt den verifizierten Chunk aus dem RAM-Puffer und schreibt ihn an die richtige Stelle im Flash-Speicher.
- Client: Fährt mit dem nächsten Chunk fort (zurück zu Schritt 1 mit neuem Offset und Daten).
- Letzter Chunk: Nachdem der letzte Chunk übertragen und mit Befehl
1ins Flash geschrieben wurde, schreibt der Client den Befehl2("Finalize Update") inFWU_COMMAND. - Slave: Führt Abschlussprüfungen durch und startet neu, damit MCUBoot die Installation durchführt.
Anhang: QDY30A Füllstandsensor Register
Diese Register gehören zum externen Füllstandsensor und können auf dem Bus ebenfalls adressiert werden. Es handelt sich laut Hersteller um Holding Registers (4xxxx), die mit Funktionscode 0x03 gelesen werden.
| Adresse (hex) | Name | R/W | Beschreibung |
|---|---|---|---|
| 0x0000 | NODE_ADRESSE |
R/W | Geräteadresse des Sensors (1-255). |
| 0x0001 | BAUDRATE |
R/W | 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200. |
| 0x0002 | EINHEIT |
R/W | 0=Keine, 1=cm, 2=mm, 3=MPa, 4=Pa, 5=kPa. |
| 0x0003 | NACHKOMMASTELLEN |
R/W | Anzahl der Dezimalstellen für den Messwert (0-3). |
| 0x0004 | MESSWERT_AKTUELL |
R | Der skalierte Messwert als vorzeichenbehafteter 16-Bit-Integer. |
| 0x0005 | MESSBEREICH_NULLPUNKT |
R/W | Rohwert für den Nullpunkt der Skala. |
| 0x0006 | MESSBEREICH_ENDPUNKT |
R/W | Rohwert für den Endpunkt der Skala. |