TIA Modbus TCP/IP MB Client - Problem mit Kommunikation

helije

Level-1
Beiträge
50
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe ein Problem: ich will 4 externe Geräte (alle gleiche Hersteller, gleiche Typ) mit S7-1215 über Modbus TCP/IP abfragen:
1. IP: x.x.x.2 ID:1
2. IP: x.x.x.3 ID:1
3. IP: x.x.x.4 ID:1
4. IP: x.x.x.5 ID:2

die Verbindung und Parameter funktionieren soweit aber nur immer bei 2 Geräten. sobald ich durch Parameter Anpassung oder bei Programm Einspielen, Kommunikation mit einem anderem Gerät aufbaue, ein Gerät, was bis jetzt online war, ist nicht mehr erreichbar. Es sind immer nur 2 erreichbar und 2 nicht.
Parameter sind wahrscheinlich richtig, weil ich alle 4 Geräte online hatte.

Habt ihr vielleicht eine Idee, woran könnte es liegen?

Vielen Dank
 

Anhänge

  • Screenshot 2022-05-13 143315.png
    Screenshot 2022-05-13 143315.png
    117,7 KB · Aufrufe: 78
  • Verdindungres.png
    Verdindungres.png
    99,2 KB · Aufrufe: 72
Warum verwendest du für die Kommunikation immer die gleiche ID? Spendier mal jedem Aufruf auch eine eigene Kommunikations-ID.

Oder hast du die Aufrufe sequentiell aufgebaut und gegeneinander verriegelt? Wenn ja, wirklich alles sauber umgesetzt?

/edit: Grade gesehen, dass du dreimal die ID 1 und einmal die ID 2 verwendest. Funktioniert immer die Kommunikation mit der IP x.x.x.5 und einem der anderen 3?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Gleichzeitig aufgebaute Verbindungen müssen zwingend verschiedene Verbindungs-ID haben. Wenn man die selbe Verbindungs-ID mehrmals für verschiedene Kommunikationspartner verwenden will, dann muß bei Wechsel zu einem anderen Kommunikationspartner (andere IP) die Verbindung abgebaut und zum neuen Partner neu aufgebaut werden.

Harald
 
Zuletzt bearbeitet:
Hallo,

Unit ID bekomme ich direkt von Geräten. bin jetzt nicht direkt an der Anlage, aber ich glaube Gerät mit ID:2 war immer erreichbar.

Wenn ich Unit ID SPS seitig anpassen, dann verliere ich Verbindung?!
 
Die ID die dort eingetragen wird, hat nichts mit dem Partner zu tun. Das ist die ID, die die CPU in ihren Verbindungsresourcen dafür nutzt. Diese kann also nicht mehrfach (zeitgleich) verwendet werden.

Daher die IDs eindeutig verwenden, dann sollte es funktionieren. Das siehst du auch daran, dass die ID 2 immer funktioniert und die anderen drei sich die ID 1 teilen, daher immer nur eins davon funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja, gute Idee, danke ich werde es heut probiere.

In Modbus Adresse Liste, die ich von Gerät exportiere, steht die Unit ID, und ich dachte es, das muss bei mir genau das gleiche ID Nr. sein
 
In Modbus Adresse Liste, die ich von Gerät exportiere, steht die Unit ID, und ich dachte es, das muss bei mir genau das gleiche ID Nr. sein
Die Unit ID, die die Modbus Geräteadresse ist, hat Siemens in den Instanzdaten des MB_CLIENT versteckt in der Variable MB_Unit_ID. Siehe TIA-Hilfe zum MB_CLIENT. Wenn Dein ModbusTCP-Gerät eine andere Unit-ID als 255 braucht, dann musst Du die ID da eintragen (am besten zyklisch in jedem Zyklus).

Harald
 
Die Unit ID, die die Modbus Geräteadresse ist, hat Siemens in den Instanzdaten des MB_CLIENT versteckt in der Variable MB_Unit_ID. Siehe TIA-Hilfe zum MB_CLIENT. Wenn Dein ModbusTCP-Gerät eine andere Unit-ID als 255 braucht, dann musst Du die ID da eintragen (am besten zyklisch in jedem Zyklus).

Harald
also d.h. in meinem DB unter Connect-->ID-->jedes Gerät (Verbindung) muss eigene Nummer haben, bzw. dürfen nicht gleich sein. und in Systembausteine-->MB_Client_DB-->MB_Unit_ID --> vorgegeben Nummer von Gerät, in meinem Fall 1 bei 3 Geräten und beim einem 2
 
Hallo,

vielen Dank für die Unterstützung. Genau das war Problem.

Noch ein Problem hatte ich,: Nachdem ich die IDs angepasst habe, habe festgestellt dass die nicht in DBs geschrieben wurde, das musste ich in Online Mode direkt in DB eintragen

aber es funktioniert

Gruß
 
Noch ein Problem hatte ich,: Nachdem ich die IDs angepasst habe, habe festgestellt dass die nicht in DBs geschrieben wurde, das musste ich in Online Mode direkt in DB eintragen
Meinst Du die MB_Unit_ID? Ich hatte Dir doch geschrieben:
dann musst Du die ID da eintragen (am besten zyklisch in jedem Zyklus).

Wenn Du die Nummer nur im Online Mode in den DB eingetragen hast, dann hast Du nur den Aktualwert der Variable geändert, und das nächste mal, wenn TIA oder die SPS meint den DB initialisieren zu müssen, dann wird wieder der Startwert aktiv und Dein Wert ist weg! ... und Dein Programm funktioniert nicht mehr.
Wenn Du den Wert im TIA-Projekt in den Instanz-DB einträgst, dann wird er doch da in den Startwert eingetragen? Und wird aktiv sobald der DB in die Steuerung geladen wird. Was genau hast Du gemacht, daß das schief gehen konnte? :unsure:

Da ich den ganzen Remanenzgeschichten nicht besonders traue, schreibe ich solche für den Programmablauf essentiellen Daten im Programm erst kurz vor der Verwendung in die Variablen. Und das gerne auch in jedem Zyklus. Wer denkt "das reicht doch im OB100" der denkt zu kurz. Da verliert man nämlich die Online-Change-in-Run-Fähigkeit des Programms, wenn man die SPS nach dem laden neu starten muß damit der OB100 ausgeführt wird.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Über die Google Suche den Thread gefunden und möchte keinen eigenen aufmachen daher schreibe ich mein Anliegen hier.
Ich möchte mehr als 125 Daten haben also benötige ich mehrere mb_client die aber den gleichen Server (Viessman Kessel) haben. Bisher habe ich das in anderen Programmen mit verschiedenen TCON_IP_V4 gemacht. jetzt bin ich auf folgendes gestoßen:

https://support.industry.siemens.com/cs/mdm/109741593?c=90599658251&lc=de-DE
Beispiel: MB_CLIENT 1: Mehrere Anforderungen mit gemeinsamer TCP-Verbindung (S7-1200)

Wir benutzen aber eine S7-1500 geht das nicht mehr? in der Hilfe steht das:
Mehrfache Client-Verbindungen

Ein Modbus TCP-Client kann mehrere TCP-Verbindungen unterstützen, wobei die maximale Anzahl der Verbindungen von der verwendeten CPU abhängt. Die gesamte Anzahl der Verbindungen einer CPU, inklusive der Modbus-TCP Clients und Server, darf die maximale Anzahl der unterstützten Verbindungen nicht überschreiten. Modbus-TCP Verbindungen können hierbei auch gemeinsam von "MB_CLIENT"- und/oder "MB_SERVER"-Instanzen genutzt werden.

Bei einzelnen Client-Verbindungen müssen Sie folgende Regeln beachten:

Jede "MB_CLIENT"-Verbindung muss einen eindeutigen Instanz-DB verwenden.

Für jede "MB_CLIENT"-Verbindung muss eine eindeutige IP-Adresse des Servers spezifiziert sein.

Jede "MB_CLIENT"-Verbindung benötigt eine eindeutige Verbindungs-ID.

Die einzelne Verbindungs-ID muss jeweils für jeden einzelnen Instanz-DB der Anweisung verwendet werden. Verbindungs-ID und Instanz-DB gehören jeweils paarweise zusammen und müssen für jede Verbindung eindeutig sein.

Eindeutige Nummern des IP-Ports werden je nach Server-Konfiguration benötigt oder nicht.

Denn ich brauche sowieso mehrere TCON_IP_V4 da ich mehrere Modbus TCP Slaves im Projekt habe. Also wollte ich eine Verbindung je Modbus Slave haben und nicht pro Aufruf bei mehreren Datenpunkten (über 125).
 
Ich möchte mehr als 125 Daten haben also benötige ich mehrere mb_client die aber den gleichen Server (Viessman Kessel) haben. Bisher habe ich das in anderen Programmen mit verschiedenen TCON_IP_V4 gemacht.
Falsch. Du kommunizierst immer mit dem gleichen Gerät mit der selben IP-Adresse, also muß nichts an der verwendeten TCP-Verbindung geändert werden. Es ist eine unnötige Verschwendung von Kommunikationsressourcen.

Nimm nur eine TCP-Verbindung, also nur einmal TCON... Und nur einmal MB_CLIENT. Baue eine Schrittkette für die Kommunikationsaufträge und tausche die Parameter an den Eingängen der MB_CLIENT-Anweisung entsprechend den gewünschten Kommunikationsaufträgen: erst 100 Register lesen, dann andere xx Register lesen, dann wieder andere Register lesen, dann wieder von vorne.

jetzt bin ich auf folgendes gestoßen:

https://support.industry.siemens.com/cs/mdm/109741593?c=90599658251&lc=de-DE
Beispiel: MB_CLIENT 1: Mehrere Anforderungen mit gemeinsamer TCP-Verbindung (S7-1200)
der Link funktioniert nicht (mehr) PS: jetzt geht es wieder mal...

ich brauche sowieso mehrere TCON_IP_V4 da ich mehrere Modbus TCP Slaves im Projekt habe. Also wollte ich eine Verbindung je Modbus Slave haben und nicht pro Aufruf bei mehreren Datenpunkten (über 125).
Bei Modbus TCP gibt es keine Slaves. Sondern Server (das Modbus Gerät) und Clients (Du). Eventuell ist das MB_Server-Gerät ein Gateway zu weiteren Modbus-RTU-Slaves? Auch dann kommuniziert die MB_CLIENT-Anweisung immer mit dem selben MB_Server, es muß nur die MB_Unit_ID entsprechend den Busadressen der Modbus-RTU-Slaves geändert werden.
Haben Deine "Slaves" verschiedene IP-Adressen? Dann brauchst Du mehrere TCON... Wenn es immer die selbe IP-Adresse ist und sich nur die MB_Unit_ID unterscheidet, dann mache alles mit der selben MB_CLIENT-Anweisung und ändere in der Schrittkette auch die MB_Unit_IDs.

Harald
 
Erstmal vielen Dank für die schnelle Antwort/Hilfe.
Der link funktioniert komischerweise bei mir einwandfrei:

Aber hier was ich meine aus dem verlinkten Beitrag:
mb_client.PNG
Und hier wie wir es bisher gemacht haben:

mb_client2.PNG

Ja mehrere Server mit verschiedenen IP-Adressen.
Später kommen noch Modbus RTU slaves hinzu.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber hier was ich meine aus dem verlinkten Beitrag:
Anhang anzeigen 64774
Da sind zwar zwei Aufrufe des MB_CLIENT, aber immer mit dem selben Instanz-DB. Da müssen die Signale an REQ entkoppelt werden, weil immer nur ein Kommunikationsauftrag aktiv sein darf (vermutlich muß auch noch ein weiterer Durchlauf nach Ende eines Auftrags!). Da spart man sich das Umkopieren der Auftragsparameter je nach aktivem Aufrag. Gefällt mir so aber nicht. Man braucht sowieso eine Schrittkette, die die Abfolge der Kommunikationsaufträge steuert, da kann man auch die Auftrags-Parametersätze umkopieren. Mehrere MB_CLIENT-Aufrufe mit der selben Instanz hätten (vermutlich) den Vorteil der Querverweise des Speicherbereichs an MB_DATA_PTR, doch gerade das wird in dem Siemens-Beispiel nicht gemacht - alle MB_CLIENT-Aufrufe arbeiten mit demselben Puffer an MB_DATA_PTR.

Ja mehrere Server mit verschiedenen IP-Adressen.
Wenn Du genug Verbindungsressourcen hast, dann kannst Du zu jedem Server eine eigene Verbindung aufbauen und einen eigenen MB_CLIENT-Aufruf verwenden (schnellere parallele Kommunikation). Oder langsamer: dieselbe Verbindungsressource verwenden und die Verbindung für den Serverwechsel immer abbauen und zum nächsten Server aufbauen.

Harald
 
Zuletzt bearbeitet:
Zurück
Oben