TIA S7-1200 Modbus RTU Fragen zur Kommunikation

Zuviel Werbung?
-> Hier kostenlos registrieren
CM 1241 (RS422/485)
6ES7 241-1CH32-0XB0

Also RS485 so wie im Beispielprojekt.

Sorry für die wenigen Infos.

Also scheinbar tut sich auf dem Bus was, da die LED Rx immer kurz mal blinkt, jedoch passiert sonst auf der Karte nichts. Die Fehler die aktuell kommen hab ich ja schon geschrieben.

Ich habe auch versucht an den Parametern was zu drehen oder ändern sprich hier:
Vorbelegung der Empfangsleitung, jedoch egal was ich einstelle es ändert sich nichts.

Sonst hab ich im Endeffekt alles so gelassen wie im Beispielprojekt bzw halt einfach nichts im Projekt geändert.
Die Gegenseite hat aber auch folgende Parameter:
Baudrate 9600
Datenbits 8
Stoppbit 1
Parität keine
 
ganz schlecht. Nochmal: wie lang ist das Kabel? Bei 1m Laboraufbau geht es auch ohne die Abschlusswiderstände.
Allerdings wirkt sich dieser Verdrahtungsfehler erst aus, wenn Modbus_Comm_Load erfolgreich war. Funktioniert Modbus_Comm_Load nun bei dir?

In der Gerätekonfig hast du "Vollduplex (RS422)" aktiviert, RS485 kann aber nur Halbduplex. Was hast du wirklich? RS485 mit 2 Drähten oder RS422 mit 4 Drähten?
 
Halbduplex kann man aber einstellen und zwar im Mode. Hier muss man Mode 4 angeben, dann sollte das passen mit 2-Drähten.
Siehe auch hier die Beschreibung im Baustein:
"Modbus_Slave_DB".MB_DB (not "Modbus_Slave_DB")
16#81AA (Invalid operating mode) -> Modbus_Comm_Load_DB.MODE = Half duplex (RS485) two-wire mode. (4)
 
Also ich glaub ich bin wieder einen Schritt weiter. Hab jetzt den Fehler 8383. Bedeutet ja eigentlich das eine Kommunikation stattfindet richtig? Nur halt aufs falsche Datenregister oder sehe ich das falsch?
 
Siemens Hilfe:
Parameter STATUS (S7-1200, S7-1500)
8383lokal-
  • Anweisungs-Version < V6.0: Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs von MB_DATA_PTR.
  • Anweisungs-Version >= V6.0: Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs von MB_DATA_PTR, RD_MB_DATA_PTR oder WR_MB_DATA_PTR.
remote02Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs des Servers
Sieht so aus, jetzt nochmals die Details überprüfen von deinem Datenbereich dass dieser auch lange genug und vom richtigen Typ ist. Bei mir war es schon so dass er unbedingt ein Array of Word wollte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja da liegt ja mein nächstes Problem. ich versteh das ganze Modbus-Zeug eh nicht so ganz. Also laut Aussage des Gegenüber möchte er die Daten nun folgendermaßen abholen:
L1-L2 -> 19006
L2-L3 -> 19008
L3-L1 -> 19010
P Gesamt -> 19026
Q Gesamt: -> 19042


Aber was muss ich da jetzt im HR_Start_Offset einstellen, damit es klappt?
Mein DB dazu sieht so aus:

Bildschirmfoto 2024-10-11 um 14.45.19.png
 
Dann muss in den HR_Start_Offset 19006 und als Struktur musst du mbHoldReg.data übergeben werden, der DB muss aber ein globaler DB sein. Ich weiss nicht mehr sicher ob der DB optimiert oder nicht optimiert sein muss.
 
Also genau so hab ich es probiert. Sprich HR_Start_Offset ist bei 19006 und der oben gezeigte DB ist auf nicht optimiert gestellt und wird als Struktur an den Modbus_Slave übergeben. Dann kommt leider der Fehler 8383
 
hab ich ausprobiert, leider kein Erfolg immer noch Fehler 8383. Bin langsam nicht nur ein bisschen ratlos sondern komplett. Keine Ahnung was ich noch machen soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein 0 ist schon richtig Was steht denn in den Data Areas ? Ist hier was eingetragen?



1728655773839.png

Siemens Hilfe:
Zugriff auf Datenbereiche in DBs anstelle des direkten Zugriffs auf MODBUS-Adressen ab Version V4.0 (S7-1200, S7-1500)
Zugriff auf Datenbereiche in DBs anstelle des direkten Zugriffs auf MODBUS-Adressen ab Version V4.0

Ab der Anweisungs-Version V4.0 von Modbus_Slave und ab den Firmware-Versionen V2.5 (S7-1500-CPUs) bzw. V4.2 (S7-1200-CPUs) können Sie anstelle des direkten Zugriffs auf Prozessabbilder und Holding-Register auf Datenbereiche in DBs zugreifen. Dabei muss für den DB das Attribut "Optimierter Bausteinzugriff" deaktiviert sein und er darf nicht ausschließlich im Ladespeicher liegen.


Wenn eine MODBUS-Anforderung eintrifft und Sie für den MODBUS-Datentyp des zugehörigen Funktionscodes keinen Datenbereich definiert haben, wird die Anforderung wie in den bisherigen Anweisungs-Versionen behandelt, d. h. es erfolgt ein direkter Zugriff auf Prozessabbilder und Holding-Register.


Wenn Sie hingegen für den MODBUS-Datentyp des Funktionscode einen Datenbereich definiert haben, liest die Anweisung Modbus_Slave aus diesem Datenbereich oder sie schreibt in ihn. Ob gelesen oder geschrieben wird, ist vom Auftragstyp abhängig.


Eine einzelne MODBUS-Anforderung kann immer nur von einem Datenbereich lesen oder in einen Datenbereich schreiben. Wenn Sie also z. B. Holding-Register lesen wollen, die sich über mehrere Datenbereiche erstrecken, benötigen Sie dafür mehrere MODBUS-Anforderungen.

Regeln zur Definition der Datenbereiche
Sie können bis zu acht Datenbereiche in unterschiedlichen DBs definieren; jeder DB darf nur einen Datenbereich enthalten. Eine einzelne MODBUS-Anforderung kann nur von genau einem Datenbereich lesen oder in genau einen Datenbereich schreiben. Dabei entspricht jeder Datenbereich einem MODBUS-Adressbereich. Die Definition erfolgt in der statischen Variable Data_Area_Array des Instanz-DB; Data_Area_Array ist ein Feld, das aus acht Elementen besteht.
Wenn Sie weniger als acht Datenbereiche verwenden wollen, müssen die gewünschten Datenbereiche lückenlos hintereinander liegen. Der erste Leereintrag in den Datenbereichen beendet die Datenbereich-Suche bei der Bearbeitung. Wenn Sie also z. B. die Feldelemente 1, 2, 4 und 5 definiert haben, werden nur die Feldelemente 1 und 2 erkannt, da das Feldelement 3 leer ist.
Das Feld Data_Area_Array besteht aus 8 Elementen: Data_Area_Array[1] … Data_Area_Array[8]
Jedes Feldelement Data_Area_Array[x], 1 <= x <= 8, ist ein UDT vom Typ MB_DataArea und hat folgenden Aufbau:



ParameterDatentypBedeutung
data_typeUIntKennung für den MODBUS-Datentyp, der auf diesen Datenbereich abgebildet wird:
  • 0: Kennung für ein leeres Feldelement bzw. für einen nicht verwendeten Datenbereich. In diesem Fall sind die Werte von db, start und length irrelevant.
  • 1: Prozessabbild der Ausgänge (verwendet bei den Funktionscodes 1, 5 und 15)
  • 2: Prozessabbild der Eingänge (verwendet beim Funktionscode 2)
  • 3: Holding-Register (verwendet bei den Funktionscodes 3, 6 und 16)
  • 4: Input-Register (verwendet beim Funktionscode 4)
Hinweis: Wenn Sie für einen MODBUS-Datentyp einen Datenbereich definiert haben, kann die Anweisung MB_SERVER auf diesen MODBUS-Datentyp nicht mehr direkt zugreifen. Wenn die Adresse einer MODBUS-Anforderung für einen solchen Datentyp keinem definierten Datenbereich entspricht, wird in STATUS der Wert W#16#8383 zurückgeliefert.
dbUIntNummer des Datenbausteins, in den die nachfolgend definierten MODBUS-Register oder Bits abgebildet werden.
Die DB-Nummer muss in den Datenbereichen eindeutig sein. Dieselbe DB-Nummer darf nicht in mehreren Datenbereichen definiert werden.
Der DB muss ein DB mit Standardzugriff sein und er darf nicht ausschließlich im Ladespeicher liegen.
Datenbereiche beginnen stets bei der Byte-Adresse 0 des DB.
Zulässige Werte: 1 bis 60999
startUIntErste MODBUS-Adresse, die in den Datenbaustein ab Adresse 0.0 abgebildet wird.
Zulässige Werte: 0 bis 65535
lengthUIntAnzahl der Bits (für die Werte 1 und 2 von data_type) bzw. Anzahl der Register (für die Werte 3 und 4 von data_type).
Die MODBUS-Adressbereiche ein und desselben MODBUS-Datentyps dürfen sich nicht überlappen.
Zulässige Werte: 1 bis 65535

Beispiele zur Definition von Datenbereichen
  • Erstes Beispiel: data_type = 3, db = 1, start = 10, length = 6
    Die Holding Register (data_type = 3) werden im Datenbaustein 1 (db = 1) abgebildet. Die Modbus-Adresse 10 (start = 10) befindet sich an Datenwort 0. Die letzte gültige Modbus-Adresse 15 (length = 6) befindet sich an Datenwort 5.
  • Zweites Beispiel: data_type = 2, db = 15, start = 1700, length = 112
    Die Eingänge (data_type = 2) werden im Datenbaustein 15 (db = 15) abgebildet. Die Modbus-Adresse 1700 (start = 1700) befindet sich an Datenwort 0. Die letzte gültige Modbus-Adresse 1811 (length = 112) befindet sich an Datenwort 111.
 
Zurück
Oben