Siemens - STEP 7 - TIA Portal

Quellen: Industry Support Siemens

Soll mit einer Siemens Steuerung eine Modbus-Kommunikation aufgebaut werden,
so finden Sie hier ein paar nützliche Informationen.

Es können Client und Server Schnittstellen mit Modbus TCP und RTU realisiert werden.
Hierzu gibt es die Bausteine MB_CLIENT unr MB_SERVER für Modbus TCP, und Modbus_Master, Modbus_Slave und Modbus_Comm_Load für Modbus RTU.

 

Modbus TCP

Server

Der Baustein MB_SERVER stellt sehr einfach einen Modbus Server bereit.
Es muss lediglich ein Datenbaustein für den Datenaustausch (lesen und schreiben) bereit gestellt werden.

💡 Modbus sieht keine Berechtigungen für Schreib- und Lesevorgänge vor. Im entsprechenden Datenbaustein sollten deshalb nur Daten bereit gestellt werden, die gelesen werden dürfen. Daten die geschrieben werden und daraufhin in der Steuerung weiterverwendet werden, sollten aus sicherheitsgründen nicht direkt verwendet werden sondern vom SPS-Programm vor deren Verwendung geprüft und außerhalb gespeichert werden.

Auch wenn Siemens das behauptet: Auf den Server kann nur von EINEM Client zugegriffen werden.
Besteht eine Verbindung, so wird jede weitere abgewiesen.
Die einzige Möglichkeit besteht darin, einen weiteren Server auf einem anderen IP Port zu starten.

Client

Hierfür wird der Baustein MB_CLIENT verwendet.

Fehlercodes

Jeder Baustein liefert über den Output STATUS "Detaillierte Statusinformation der Anweisung".

Die Sache stellt sich in der Praxis nicht so einfach dar, da die Bausteine intern weitere Bausteine verwenden.
  MB_SERVER: TCON, TSEND, TRCV, TDIAG, TRESET, TDISCON, TDIAG_Status
  MB_CLIENT: TCON, TDISCON, TSEND, TRECEIVE, TRESET, TDIAG, TDIAG_Status

Somit werden je nach Problem auch die STATUS Werte dieser Bausteine geliefert !

Die Bedeutung der Fehlercodes entnehmen Sie der Dokumentation der entsprechenden Kommunikations-Anweisung.

🛈 Hinweis: Kommunikationsfehler beim Senden oder Empfangen von Daten
Wenn beim Senden bzw. Empfangen von Daten ein Kommunikationsfehler auftritt (80C4 (Temporary communications error. The specified connection is temporarily down.), 80C5 (Remote partner closed connection actively.), 80A1 (The specified connection is disconnected or is not yet established.)), dann wird die bestehende Verbindung abgebaut.
Das bedeutet auch, dass Sie alle STATUS-Werte sehen, die beim Verbindungsabbau zurückgegeben werden, und erst wenn die Verbindung abgebaut ist, wird der STATUS-Code ausgegeben, der die Ursache für den Verbindungsabbau gewesen ist.
Beispiel: Tritt beim Empfangen der Daten ein temporärer Kommunikationsfehler auf, dann wird zunächst der STATUS 7003 (ERROR=false) ausgegeben und dann 80C4 (ERROR=true).

Statusinformationen

STATUS
(hex)
Beschreibung
0000 Anweisung fehlerfrei ausgeführt
0001 Verbindung hergestellt
0003 Verbindungsabbau durchgeführt
7000 Kein Auftrag aktiv und keine Verbindung aufgebaut (REQ=0, DISCONNECT=1)
7001 Verbindungsaufbau angestoßen
7002 Zwischenaufruf, Verbindung wird aufgebaut
7003 Verbindung wird abgebaut
7004 Verbindung hergestellt und überwacht, Keine Auftragsbearbeitung aktiv
7005 Daten werden gesendet
7006 Daten werden empfangen

Statusinformationen

Hier kommt das zusätzliche Problem dazu, dass die Ursache sowohl lokal als auch bei der Gegenstelle (remote) zu suchen ist.

STATUS
(hex)
lokal /
remote
Modbus
Exception
Beschreibung
80C8 lokal - Keine Antwort des Servers im definierten Zeitraum. Überprüfen Sie die Verbindung zu dem Modbus-Server. Dieser Fehler wird erst nach Abschluss der konfigurierten erneuten Versuche gemeldet. Empfängt die Anweisung "MB_CLIENT" keine Antwort mit der ursprünglich übermittelten Transaktions-ID (siehe statische Variable MB_TRANSACTION_ID) innerhalb des definierten Zeitraums, wird dieser Fehlercode ausgegeben.
8380 lokal - Empfangenes Modbus-Frame hat nicht das richtige Format oder es wurden zu wenige Bytes empfangen.
8381 remote 01 Funktionscode wird nicht unterstützt.
8382 lokal -
  • Die Länge des Modbus-Frames im Frame-Header stimmt mit der Anzahl der empfangenen Bytes nicht überein
  • Die Anzahl der Bytes stimmt mit den tatsächlich übertragenen Bytes nicht überein (nur Funktionen 1-4). Dies ist z. B. dann der Fall, wenn "MB_CLIENT" eine ungerade Anzahl von Worten anfordert, "MB_SERVER" aber immer eine gerade Anzahl von Worten sendet
  • Die Startadresse im empfangenen Frame stimmt mit der gespeicherten Startadresse nicht überein (Funktionen 5, 6, 15, 16)
  • Anzahl der Wörter stimmt mit den tatsächlich übertragenen Wörtern nicht überein (Funktionen 15 und 16)
8382 remote 03 Unzulässige Längenangabe im empfangenen Modbus-Frame. Überprüfen Sie die Server-Seite.
8383 lokal - Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs von MB_DATA_PTR.
8383 remote 02 Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs des Servers.
8384 lokal - Ungültiger Exception Code empfangen.
  • Es wurde ein anderer Datenwert empfangen, als ursprünglich vom Client gesendet wurde (Funktionen 5, 6 und 8)
  • Ungültiger Status-Wert empfangen (Funktion 11)
8384 remote 03 Fehler bei Datenwert für die Funktion 5.
8385 lokal -
  • Diagnosecode nicht unterstützt
  • Es wurde ein anderer Subfunktionscode empfangen, als ursprünglich vom Client gesendet wurde (Funktion 8)
8385 remote 03 Diagnosecode nicht unterstützt
8386 lokal - Empfangener Funktionscode entspricht nicht dem ursprünglich gesendeten.
8387 lokal - Die Protokoll-ID des vom Server empfangenen Modbus TCP Frames ist ungleich "0".
8388 lokal - Durch den Modbus-Server wurde eine andere Datenlänge gesendet, als abgefragt wurde. Dieser Fehler tritt nur bei Verwendung der Modbus-Funktionen 5, 6, 15 oder 16 auf.

Parameter-Fehler

STATUS
(hex)
Beschreibung
80B6 Ungültiger Verbindungstyp, nur TCP-Verbindungen werden unterstützt.
80BB Ungültiger Wert am Parameter ActiveEstablished (Kennung für die Art des Verbindungsaufbaus, siehe Parameter CONNECT (S7-1200, S7-1500)):
  • Serverseitig ist nur der passive Verbindungsaufbau zulässig (ActiveEstablished = FALSE)
  • Clientseitig ist nur der aktive Verbindungsaufbau zulässig (ActiveEstablished = TRUE)
8188 Ungültiger Wert am Parameter MB_MODE.
8189 Ungültige Adressierung der Daten am Parameter MB_DATA_ADDR.
818A Ungültige Datenlänge am Parameter MB_DATA_LEN.
818B Ungültiger Zeiger am Parameter MB_DATA_PTR. Überprüfen Sie zudem die Werte der Parameter MB_DATA_ADDR und MB_DATA_LEN.
818C Zeitfehler bei dem Parameter BLOCKED_PROC_TIMEOUT oder RCV_TIMEOUT (siehe statische Variablen der Anweisung). BLOCKED_PROC_TIMEOUT und RCV_TIMEOUT müssen zwischen 0,5 s und 55 s liegen.
8200
  • Eine andere Modbus-Anfrage wird zurzeit über den Port verarbeitet
  • Eine weitere Instanz von MB_CLIENT mit den gleichen Verbindungsparametern bearbeitet eine bereits bestehende Modbus-Anfrage

TCP-Verbindung

TSEND_C: Verbindung aufbauen und Daten sendenVerbindung aufbauen und Daten senden
ERROR STATUS
(hex)
Beschreibung
0 0000 Sendeauftrag wurde fehlerfrei ausgeführt.
0 0001 Kommunikationsverbindung wurde aufgebaut.
0 0003 Kommunikationsverbindung wurde aufgebaut.
0 7000 Keine Sendeauftragsbearbeitung aktiv, keine Kommunikationsverbindung aufgebaut.
0 7001 Erstaufruf beim Aufbau einer Verbindung.
0 7002 Verbindung wird gerade aufgebaut (REQ irrelevant)
0 7003 Kommunikationsverbindung wird abgebaut.
0 7004 Kommunikationsverbindung ist aufgebaut und wird überwacht. Keine Sendeauftragsverarbeitung aktiv.
0 7005 Senden der Daten läuft.
1 80A1
  • Verbindung oder Port wird vom Anwender bereits verwendet.
  • Kommunikationsfehler:
    • Die angegebene Verbindung wurde noch nicht aufgebaut.
    • Die angegebene Verbindung wird gerade beendet. Eine Übertragung über diese Verbindung ist nicht möglich.
    • Die Schnittstelle wird neu initialisiert.
1 80A3 Die unterlagerte Anweisung T_DIAG hat den Abbau der Verbindung gemeldet.
1 80A4 IP-Adresse des remote Endpunkts der Verbindung ist ungültig, oder sie passt zur IP-Adresse des lokalen Partners.
1 80A7 Kommunikationsfehler: Sie haben die Anweisung mit COM_RST = 1 aufgerufen, bevor der Sendeauftrag beendet war.
1 80AA Es läuft gerade ein Verbindungsaufbau mit der gleichen Verbindungs-ID durch einen anderen Baustein. Bitte wiederholen Sie den Auftrag durch einen erneuten Flankenanstieg am Parameter REQ.
1 80B3
  • Bei Verwendung der Protokollvariante UDP enthält der Parameter ADDR keine Daten.
  • Fehler in der Verbindungsbeschreibung
  • Der lokale Port wird bereits in einer anderen Verbindungsbeschreibung verwendet.
1 80B4 Bei Verwendung der Protokollvariante ISO on TCP (connection_type = B#16#12) für den passiven Aufbau einer Verbindung (active_est = FALSE) wurde eine oder beide der folgenden Bedingungen verletzt:
  • local_tsap_id_len >= B#16#02
  • local_tsap_id[1] = B#16#E0
1 80B5 Bei Verbindungstyp 13 = UDP ist nur ein passiver Verbindungsaufbau zulässig.
1 80B6 Parametrierfehler im Parameter connection_type des Datenbausteins für Verbindungsbeschreibung.
1 80B7
  • Für Systemdatentyp TCON_Param: Fehler in einem der folgenden Parameter des Datenbausteins für Verbindungsbeschreibung: block_length, local_tsap_id_len, rem_subnet_id_len, rem_staddr_len, rem_tsap_id_len, next_staddr_len.
  • Für Systemdatentypen TCON_IP_V4 und TCON_IP_RFC: IP-Adresse des Partner-Endpunkts wurde auf 0.0.0.0 gesetzt.
1 8085 Parameter LEN ist größer als der größte zulässige Wert.
1 8086 Der Parameter ID innerhalb des Parameters CONNECT liegt außerhalb des zulässigen Bereichs.
1 8087 Maximale Anzahl von Verbindungen erreicht, keine weitere Verbindung möglich.
1 8088 Der Wert am Parameter LEN passt nicht zu den am Parameter DATA angegebenen Empfangsbereich.
1 8089
  • Der Parameter CONNECT zeigt nicht auf einen Datenbaustein.
  • Der Parameter CONNECT zeigt nicht auf eine Verbindungsbeschreibung.
  • Die manuell erstellte Verbindungsbeschreibung hat für den gewählten Verbindungstyp eine falsche Struktur.
1 8091 Maximale Schachtelungstiefe überschritten.
1 809A Der Parameter CONNECT zeigt auf ein Feld, das nicht der Länge der Verbindungsbeschreibung entspricht.
1 809B InterfaceID ist ungültig:
  • Sie zeigt nicht auf eine lokale CPU-Schnittstelle oder einen CP.
  • Sie darf bei Benutzung der Verbindungsparametrierung nicht den Wert 0 haben.
  • Sie darf in der verwendeten TCON_xxx-Struktur nicht den Wert 0 haben. Siehe TCON: Kommunikationsverbindung aufbauen
  • TCON_QDN bzw. TCON_QDN_SEC benötigt einen konfigurierten DNS-Server.
1 80C3
  • Alle Verbindungsressourcen sind belegt.
  • Ein Baustein mit dieser ID wird bereits in einer anderen Prioritätsgruppe bearbeitet.
1 80C4 Temporärer Kommunikationsfehler:
  • Die Verbindung kann derzeit nicht aufgebaut werden.
  • Die Verbindung kann nicht aufgebaut werden, weil auf dem Verbindungsweg liegende Firewalls für die benötigten Ports nicht freigeschaltet sind.
  • Die Schnittstelle empfängt gerade neue Parameter oder die Verbindung wird gerade aufgebaut.
  • Die projektierte Verbindung wird gerade von einer Anweisung TDISCON entfernt.
  • Die benutzte Verbindung wird gerade durch einen Aufruf mit COM_RST = 1 beendet./li>
  • Temporär ist keine Empfangsressourcen beim Verbindungspartner verfügbar. Der Verbindungspartner ist nicht empfangsbereit.
1 80C5
  • Verbindung durch den Kommunikationspartner abgebaut.
  • LSAP des remoten Verbindungspartners nicht freigegeben
1 80C6 Netzwerkfehler:
  • Remoter Partner kann nicht erreicht werden.
  • Physikalische Unterbrechung an PROFIBUS
1 8189 Invalid data address: Select a suitable value for the data address at the DATA_ADDR parameter.See description Modbus_Master (Page 125) in the Info system.
1 818A Invalid length
1 818B Invalid value for DATA_PTR
1 818C Interconnection error of the DATA_PTR parameter
1 818D The area addressed by DATA_PTR is longer than the DB, or the area addressed is too small for the number of data bytes to be read or written.
1 8280 Negative acknowledgment when reading module
1 8281 Negative acknowledgment when writing module
1 8722 Parameter CONNECT: Der Quellbereich ist ungültig. Der Bereich ist im DB nicht vorhanden.
1 873A Parameter CONNECT: Zugriff auf Verbindungsbeschreibung nicht möglich (z. B. weil der DB nicht verfügbar ist).
1 877F Parameter CONNECT: Interner Fehler.
1 8822 Parameter DATA: Quellbereich ungültig, Bereich im DB nicht vorhanden.
1 8824 Parameter DATA: Bereichsfehler im VARIANT-Zeiger.
1 8832 Parameter DATA: DB-Nummer ist zu groß.
1 883A Parameter DATA: Kein Zugriff auf den Datenbereich, da z. B. der Datenbaustein nicht existiert
1 887F Parameter DATA: Interner Fehler, z. B. unzulässige VARIANT-Referenz.
1 893A Parameter ADDR: Zugriff auf den Sendebereich nicht möglich (z.B., weil der DB nicht vorhanden ist).