1. Übersicht
Wenn eine S7-200 SMART SPS als Modbus-RTU-Master oder -Slave arbeitet, besteht eine feste Zuordnung zwischen ihren internen Speicherbereichen (I, Q, AIW, V) und den Standard-Modbus-Adressen. Auf Basis der offiziellen technischen Dokumentation von Siemens erläutert dieser Artikel die Adresszuordnungsregeln des S7-200 SMART ausführlich, einschließlich vollständiger Adressvergleichstabellen, Konfigurationsschritte, Kommunikationsbeispiele und eines Fehlersuchleitfadens.
Der S7-200 SMART unterstützt zwei Modbus-Betriebsmodi:
- Modbus-RTU-Master: initiiert aktiv Kommunikationsanfragen, um Slave-Geräte zu lesen oder zu steuern
- Modbus-RTU-Slave: antwortet passiv auf die Lese-/Schreibanfragen des Masters
2. Beschreibung der Modbus-Adresstypen
Das Modbus-Protokoll definiert vier Datenbereiche, jeweils mit festem Adressbereich und festen Funktionscodes:
| Modbus-Adressbereich | Funktionscode | Lese-/Schreibattribut | Datentyp | Entsprechender S7-200 SMART-Speicherbereich |
|---|---|---|---|---|
| 0xxxx (Coils) | 01 (Coils lesen) / 05 (Einzelnes Coil schreiben) / 15 (Mehrere Coils schreiben) | Lesen/Schreiben | Bit (1 Bit) | Q-Bereich digitale Ausgänge |
| 1xxxx (Diskrete Eingänge) | 02 (Diskrete Eingänge lesen) | Nur Lesen | Bit (1 Bit) | I-Bereich digitale Eingänge |
| 3xxxx (Eingangsregister) | 04 (Eingangsregister lesen) | Nur Lesen | Wort (16 Bit) | AIW-Analogeingänge |
| 4xxxx (Halteregister) | 03 (Halteregister lesen) / 06 (Einzelnes Register schreiben) / 16 (Mehrere Register schreiben) | Lesen/Schreiben | Wort (16 Bit) | V-Speicherbereich (konfigurierbar) |
Wichtiger Hinweis: Modbus-Adressen verwenden 1-basierte Nummerierung, d. h. die Zählung beginnt bei 1. PLC-interne Adressen sind üblicherweise 0-basiert und beginnen bei 0.
3. S7-200 SMART Modbus-Adresszuordnungstabelle
3.1 Digitaler Ausgangsbereich (Q-Bereich) → 0xxxx Coils
Der digitale Ausgangsbereich Q ist dem Modbus-0xxxx-Coilbereich zugeordnet und unterstützt Lese- und Schreiboperationen.
| Modbus-Adresse | S7-200 SMART-Adresse | Beschreibung |
|---|---|---|
| 00001 | Q0.0 | Kanal 0, Bit 0 |
| 00002 | Q0.1 | Kanal 0, Bit 1 |
| 00003 | Q0.2 | Kanal 0, Bit 2 |
| 00004 | Q0.3 | Kanal 0, Bit 3 |
| 00005 | Q0.4 | Kanal 0, Bit 4 |
| 00006 | Q0.5 | Kanal 0, Bit 5 |
| 00007 | Q0.6 | Kanal 0, Bit 6 |
| 00008 | Q0.7 | Kanal 0, Bit 7 |
| 00009 | Q1.0 | Kanal 1, Bit 0 |
| 00010 | Q1.1 | Kanal 1, Bit 1 |
| 00011 | Q1.2 | Kanal 1, Bit 2 |
| 00012 | Q1.3 | Kanal 1, Bit 3 |
| 00013 | Q1.4 | Kanal 1, Bit 4 |
| 00014 | Q1.5 | Kanal 1, Bit 5 |
| 00015 | Q1.6 | Kanal 1, Bit 6 |
| 00016 | Q1.7 | Kanal 1, Bit 7 |
| 00017 | Q2.0 | Kanal 2, Bit 0 |
| 00018 | Q2.1 | Kanal 2, Bit 1 |
| ... | ... | Und so weiter; jeweils 8 Adressen entsprechen einem Byte |
| 00256 | Q31.7 | Maximale Adresse (bis zu 32 Byte Ausgänge) |
Berechnungsformel: Modbus-Adresse = Kanalnummer × 8 + Bitnummer + 1
Beispiel: für den Zugriff auf Q2.3 gilt Modbus-Adresse = 2×8 + 3 + 1 = 00020
Funktionscodes:
- Coil-Status lesen: Funktionscode 01
- Einzelnes Coil schreiben: Funktionscode 05
- Mehrere Coils schreiben: Funktionscode 15 (0x0F)
Hinweise:
- Die Zuordnung des Q-Bereichs ist fest und erfordert keine zusätzliche Konfiguration
- Die tatsächlich verfügbare Anzahl an Q-Punkten hängt vom CPU-Typ und den Erweiterungsmodulen ab
- Existiert der entsprechende Q-Punkt in der Hardware nicht, ist der ausgelesene Wert immer 0
3.2 Digitaler Eingangsbereich (I-Bereich) → 1xxxx Diskrete Eingänge
Der digitale Eingangsbereich I ist dem Modbus-1xxxx-Bereich für diskrete Eingänge zugeordnet und ist nur lesbar.
| Modbus-Adresse | S7-200 SMART-Adresse | Beschreibung |
|---|---|---|
| 10001 | I0.0 | Kanal 0, Bit 0 |
| 10002 | I0.1 | Kanal 0, Bit 1 |
| 10003 | I0.2 | Kanal 0, Bit 2 |
| 10004 | I0.3 | Kanal 0, Bit 3 |
| 10005 | I0.4 | Kanal 0, Bit 4 |
| 10006 | I0.5 | Kanal 0, Bit 5 |
| 10007 | I0.6 | Kanal 0, Bit 6 |
| 10008 | I0.7 | Kanal 0, Bit 7 |
| 10009 | I1.0 | Kanal 1, Bit 0 |
| 10010 | I1.1 | Kanal 1, Bit 1 |
| 10011 | I1.2 | Kanal 1, Bit 2 |
| 10012 | I1.3 | Kanal 1, Bit 3 |
| 10013 | I1.4 | Kanal 1, Bit 4 |
| 10014 | I1.5 | Kanal 1, Bit 5 |
| 10015 | I1.6 | Kanal 1, Bit 6 |
| 10016 | I1.7 | Kanal 1, Bit 7 |
| 10017 | I2.0 | Kanal 2, Bit 0 |
| 10018 | I2.1 | Kanal 2, Bit 1 |
| ... | ... | Und so weiter; jeweils 8 Adressen entsprechen einem Byte |
| 10256 | I31.7 | Maximale Adresse (bis zu 32 Byte Eingänge) |
Berechnungsformel: Modbus-Adresse = 10000 + Kanalnummer × 8 + Bitnummer + 1
Beispiel: für den Zugriff auf I3.5 gilt Modbus-Adresse = 10000 + 3×8 + 5 + 1 = 10030
Funktionscode: zum Lesen diskreter Eingänge wird Funktionscode 02 verwendet
Hinweise:
- Die Zuordnung des I-Bereichs ist fest und erfordert keine zusätzliche Konfiguration
- Diskrete Eingänge sind nur lesbar; der Master kann sie nicht schreiben
- Die tatsächlich verfügbare Anzahl an I-Punkten hängt vom CPU-Typ und den Erweiterungsmodulen ab
3.3 Analogeingangsbereich (AIW-Bereich) → 3xxxx Eingangsregister
Der Analogeingangsbereich AIW ist dem Modbus-3xxxx-Eingangsregisterbereich zugeordnet und ist nur lesbar.
| Modbus-Adresse | S7-200 SMART-Adresse | Beschreibung |
|---|---|---|
| 30001 | AIW0 | 1. Analogeingangskanal |
| 30002 | AIW2 | 2. Analogeingangskanal |
| 30003 | AIW4 | 3. Analogeingangskanal |
| 30004 | AIW6 | 4. Analogeingangskanal |
| 30005 | AIW8 | 5. Analogeingangskanal |
| 30006 | AIW10 | 6. Analogeingangskanal |
| 30007 | AIW12 | 7. Analogeingangskanal |
| 30008 | AIW14 | 8. Analogeingangskanal |
| 30009 | AIW16 | 9. Analogeingangskanal |
| 30010 | AIW18 | 10. Analogeingangskanal |
| ... | ... | Und so weiter, mit einer Schrittweite von 2 |
| 30056 | AIW110 | 56. Analogeingangskanal (Maximum) |
Berechnungsformel: Modbus-Adresse = 30000 + AIW-Nummer / 2 + 1
Beispiel: zum Lesen von AIW20 gilt Modbus-Adresse = 30000 + 20/2 + 1 = 30011
Funktionscode: zum Lesen der Eingangsregister wird Funktionscode 04 verwendet
Hinweise:
- AIW verwendet Wortadressierung; jedes AIW belegt 2 Byte, sodass einer Adressschrittweite von 1 eine AIW-Schrittweite von 2 entspricht
- Eingangsregister sind nur lesbar; der Master kann sie nicht schreiben
- Der Wertebereich der Analogeingänge beträgt üblicherweise 0-32767 (unipolar) oder -32768 bis 32767 (bipolar)
- Die tatsächlich verfügbare Anzahl an AIW-Kanälen hängt von der Kanalzahl des Analogmoduls ab
3.4 V-Speicherbereich → 4xxxx Halteregister
Die Zuordnung des V-Speicherbereichs ist konfigurierbar und wird über zwei Parameter der Modbus-Slave-Anweisung MBUS_INIT definiert:
- HoldStart: die Start-V-Adresse des Halteregisterbereichs (z. B. &VB1000)
- MaxHold: die Anzahl der Wörter im Halteregisterbereich (Einheit: Wort, d. h. die Anzahl der VW)
Zuordnungsregeln:
| Modbus-Adresse | S7-200 SMART-Adresse | Beschreibung |
|---|---|---|
| 40001 | VW[HoldStart] | 1. Halteregister |
| 40002 | VW[HoldStart + 2] | 2. Halteregister |
| 40003 | VW[HoldStart + 4] | 3. Halteregister |
| 40004 | VW[HoldStart + 6] | 4. Halteregister |
| ... | ... | Und so weiter, mit einer Schrittweite von 2 Byte |
| 400XX | VW[HoldStart + 2 × (XX - 1)] | Das XX-te Halteregister |
Vollständiges Beispiel: wenn HoldStart = &VB1000 und MaxHold = 100 gilt
| Modbus-Adresse | V-Speicheradresse | Byte-Bereich | Beschreibung |
|---|---|---|---|
| 40001 | VW1000 | VB1000-VB1001 | 1. Halteregister |
| 40002 | VW1002 | VB1002-VB1003 | 2. Halteregister |
| 40003 | VW1004 | VB1004-VB1005 | 3. Halteregister |
| 40004 | VW1006 | VB1006-VB1007 | 4. Halteregister |
| 40005 | VW1008 | VB1008-VB1009 | 5. Halteregister |
| ... | ... | ... | ... |
| 40100 | VW1198 | VB1198-VB1199 | 100. Halteregister (das letzte) |
Funktionscodes:
- Halteregister lesen: Funktionscode 03
- Einzelnes Register schreiben: Funktionscode 06
- Mehrere Register schreiben: Funktionscode 16 (0x10)
Hinweise:
- Die Zuordnung des V-Speicherbereichs ist konfigurierbar und wird über die Parameter HoldStart und MaxHold der Anweisung MBUS_INIT eingestellt
- HoldStart muss auf eine VB-Adresse zeigen, z. B. &VB1000
- Die Einheit von MaxHold ist das Wort (VW), nicht das Byte (VB)
- Der Halteregisterbereich darf nicht mit bereits im SPS-Programm verwendetem V-Speicher kollidieren
- Ist MaxHold auf 100 gesetzt, belegt das VB1000-VB1199, insgesamt 200 Byte
4. SPS-Slave-Konfigurationsschritte
4.1 Modbus-Slave-Anweisungsbibliothek installieren
- Öffnen Sie die Programmiersoftware STEP 7-Micro/WIN SMART
- Suchen Sie im Anweisungsbaum den Ordner „Bibliotheken"
- Wenn keine Modbus-Slave-Bibliothek vorhanden ist, importieren Sie sie zuerst: Rechtsklick auf „Bibliotheken" → „Bibliothek importieren" → Modbus-Slave-Bibliotheksdatei auswählen
- Die Bibliotheksdatei wird üblicherweise von der offiziellen Siemens-Website heruntergeladen und heißt „Modbus Slave"
4.2 MBUS_INIT zur Slave-Initialisierung aufrufen
Rufen Sie die Anweisung MBUS_INIT im ersten Scan-Zyklus (SM0.1) auf. Die Parameter sind nachfolgend beschrieben:
| Parameter | Wertebereich | Beschreibung |
|---|---|---|
| Mode | 0 / 1 | 0 = Modbus-Slave deaktivieren und zum normalen Freeport zurückkehren; 1 = Modbus-Slave aktivieren |
| Baud | 1200-115200 | Baudrate; übliche Werte: 9600, 19200, 38400, 115200 |
| Parity | 0 / 1 / 2 | Parität: 0 = keine, 1 = ungerade, 2 = gerade |
| Port | 0 / 1 | Kommunikationsport: 0 = integrierter RS485-Port, 1 = RS485-Port des Signalboards SB CM01 |
| SlaveAddr | 1-247 | Modbus-Slave-Adresse; darf auf demselben Bus nicht doppelt vergeben sein |
| HoldStart | &VBxxx | Zeiger auf die Start-V-Adresse des Halteregisterbereichs, z. B. &VB1000 |
| MaxHold | 0-10000 | Anzahl der Wörter im Halteregisterbereich (Einheit: Wort); z. B. bedeutet 100 genau 100 VW |
| Done | BOOL | Initialisierung-abgeschlossen-Merkerbit |
| Error | BYTE | Fehlercode |
4.3 MBUS_SLAVE im Hauptprogramm zyklisch aufrufen
Die Anweisung MBUS_SLAVE muss in jedem Scan-Zyklus im Hauptprogramm aufgerufen werden:
- Diese Anweisung bearbeitet die Anfragen des Modbus-Masters
- Wird sie nicht aufgerufen, kann der Slave dem Master nicht antworten
- Parameter: Done (Abschluss-Merker), Error (Fehlercode)
4.4 V-Speicherbereichsdaten konfigurieren
Legen Sie die zu lesenden/schreibenden Daten im durch HoldStart angegebenen V-Adressbereich ab:
- Vom Master geschriebene Daten werden in diesem Bereich abgelegt
- Das SPS-Programm liest die Daten aus diesem Bereich zur Verarbeitung
- Stellen Sie sicher, dass keine Kollision mit anderen im Programm verwendeten V-Adressen auftritt
5. SPS-Master-Konfiguration und Lesebeispiel
5.1 MBUS_CTRL zur Master-Initialisierung aufrufen
Rufen Sie die Anweisung MBUS_CTRL im ersten Scan-Zyklus (SM0.1) auf, um den Modbus-Master zu initialisieren:
| Parameter | Wertebereich | Beschreibung |
|---|---|---|
| Mode | 0 / 1 | 0 = Modbus-Master deaktivieren, 1 = Modbus-Master aktivieren |
| Baud | 1200-115200 | Baudrate; muss mit dem Slave übereinstimmen |
| Parity | 0 / 1 / 2 | Parität; muss mit dem Slave übereinstimmen |
| Port | 0 / 1 | Kommunikationsport: 0 = integrierter RS485, 1 = Signalboard |
| Timeout | 1-32767 ms | Zeitüberschreitung beim Warten auf die Slave-Antwort; 1000 ms empfohlen |
| Done | BOOL | Initialisierung-abgeschlossen-Merkerbit |
| Error | BYTE | Fehlercode |
5.2 MBUS_MSG zum Auslösen von Lese-/Schreibanfragen aufrufen
Die Anweisung MBUS_MSG wird verwendet, um eine Modbus-Lese-/Schreibanfrage auszulösen:
| Parameter | Wertebereich | Beschreibung |
|---|---|---|
| First | BOOL | Erstausführungsimpuls; die Anfrage wird bei Erkennung einer steigenden Flanke ausgelöst |
| Slave | 1-247 | Slave-Adresse |
| RW | 0 / 1 | 0 = Leseanfrage, 1 = Schreibanfrage |
| Addr | Modbus-Adresse | Die zuzugreifende Modbus-Adresse; z. B. bedeutet 40001 das 1. Halteregister |
| Count | 1-120 | Anzahl der zu lesenden/schreibenden Register/Coils |
| DataPtr | &VBxxx | Zeiger auf den Datenpuffer, z. B. &VB2000 |
| Done | BOOL | Abschluss-Merker für diese Anfrage |
| Error | BYTE | Fehlercode |
5.3 Beispiel: Halteregister lesen
Angenommen, Sie möchten 10 Halteregister (40001-40010) vom Slave-Gerät mit der Adresse 1 lesen:
- First: mit einem Impulssignal auslösen
- Slave: 1
- RW: 0 (lesen)
- Addr: 40001
- Count: 10
- DataPtr: &VB2000
Nach erfolgreichem Lesen enthalten die 20 Byte ab VB2000 die Daten der 10 Register.
6. Häufige Probleme und Fehlersuchleitfaden
6.1 Keine Kommunikationsantwort; der Slave antwortet nicht
- Verdrahtung prüfen: ob A+ und B- von RS485 vertauscht sind — das ist der häufigste Fehler
- Parameterübereinstimmung prüfen: Baudrate, Datenbits, Stoppbits und Parität von Master und Slave müssen exakt übereinstimmen
- Slave-Adresse prüfen: ob SlaveAddr korrekt ist; auf dem Bus darf es keine doppelten Adressen geben
- Busspannung messen: die A-Leitung (D+) sollte etwa 200 mV oder mehr über der B-Leitung (D-) liegen
- Abschlusswiderstand prüfen: ob an beiden Busenden 120-Ω-Abschlusswiderstände angebracht sind (bei großen Entfernungen erforderlich)
- Port-Parameter prüfen: ob der richtige Kommunikationsport (0 oder 1) gewählt ist
6.2 Daten können nicht gelesen werden oder sind falsch
- Adressformat prüfen: Modbus-Adressen gibt es in 1-basierter und 0-basierter Schreibweise; sorgfältig unterscheiden
- HoldStart prüfen: bestätigen, dass die Startadresse des Halteregisters korrekt gesetzt ist
- MaxHold prüfen: bestätigen, dass die Anzahl der Halteregister ausreicht
- Adressbereich prüfen: ob die zu lesende Adresse innerhalb des durch MaxHold definierten Bereichs liegt
- Byte-Reihenfolge prüfen: ob die High-/Low-Wort-Reihenfolge von 32-Bit-Daten zum Master passt
6.3 Datenchaos oder falsche Zahlenwerte
- Datenformat prüfen: bestätigen, ob es sich um eine 16-Bit-Ganzzahl, 32-Bit-Ganzzahl oder Gleitkommazahl handelt
- Byte-Reihenfolge prüfen: ob Big-Endian und Little-Endian konsistent sind
- Wortreihenfolge prüfen: ob die High-/Low-Wort-Reihenfolge von 32-Bit-Daten korrekt ist
- Skalierung prüfen: ob ein Multiplikator erforderlich ist (z. B. Werte in 0,1-°C-Einheiten müssen durch 10 dividiert werden)
- Behandlung negativer Zahlen prüfen: negative Zahlen werden im Zweierkomplement dargestellt; Unterschied zwischen vorzeichenbehafteten und vorzeichenlosen Zahlen beachten
6.4 Gelegentliche Kommunikationsausfälle
- Schirmkabel prüfen: ob für die RS485-Leitung geschirmtes Twisted-Pair-Kabel verwendet wird und ob der Schirm einseitig geerdet ist
- Buslänge prüfen: maximal 1200 m bei 9600 bps, etwa 100 m bei 115200 bps
- Slave-Anzahl prüfen: ein RS485-Bus trägt höchstens 32 Slaves (ohne Repeater)
- Elektromagnetische Störungen prüfen: ob die Kommunikationsleitung parallel zu Leistungskabeln verläuft oder eine Störquelle vorhanden ist
- Timeout-Einstellung prüfen: ob der Timeout-Parameter zu klein gesetzt ist; versuchen Sie, ihn angemessen zu erhöhen
6.5 Fehlercode-Beschreibung
| Fehlercode | Beschreibung | Lösung |
|---|---|---|
| 0 | Kein Fehler | - |
| 1 | Paritätsfehler | Paritätseinstellung prüfen |
| 2 | Baudrate nicht unterstützt | Baudratenparameter prüfen |
| 3 | Zeitüberschreitungsfehler | Verdrahtung, Slave-Versorgung und Timeout prüfen |
| 4 | Slave-Adressfehler | SlaveAddr-Parameter prüfen |
| 5 | Keine Bestätigung erhalten | Der Slave antwortet nicht; Verdrahtung und Parameter prüfen |
| 10 | Gateway-Fehler | Gateway-Konfiguration prüfen |
7. Zusammenfassung
Die Modbus-Adresszuordnungsregeln des S7-200 SMART sind klar und eindeutig:
- 0xxxx-Coilbereich → entspricht den digitalen Ausgängen des Q-Bereichs, Lesen/Schreiben
- 1xxxx-Bereich diskreter Eingänge → entspricht den digitalen Eingängen des I-Bereichs, nur Lesen
- 3xxxx-Eingangsregisterbereich → entspricht den AIW-Analogeingängen, nur Lesen
- 4xxxx-Halteregisterbereich → entspricht dem V-Speicherbereich, konfigurierbar, Lesen/Schreiben
Wenn Sie diese Zuordnung beherrschen, können Sie schnell eine Modbus-RTU-Kommunikation zwischen einem S7-200 SMART und Drittgeräten realisieren. In der Praxis empfiehlt es sich, die Kommunikation zuerst mit Debugging-Software wie Modbus Poll zu testen und das SPS-Programm erst zu schreiben, nachdem die korrekte Adresszuordnung bestätigt ist.
8. Weiterführende Links
- Modbus-RTU-Kommunikations-Grundlagentutorial
- Ausführliche Erklärung der Modbus-Funktionscodes
- Konfigurationsbeispiel für den Siemens S7-200 SMART Modbus-Master
- RS485-Bus-Verdrahtungsrichtlinie
Antwort veröffentlichen