TIA PUT & Get indirekt adressieren

Max_94

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

ich muss eine Put& Get Verbindung zwischen einer Hauptsteuerung und 9 Untersteuerungen realisieren.
Diese sollen jeweils 3 Blöcke aus den Datenbausteinen schreiben und lesen.
Meine Idee dahinter war, dass ich die Adresse und den SD-Bereich entsprechen am Eingang parametriere.
Leider macht mir der Datentyp Remote Probleme, ich habe schon lange gesucht aber nicht die konkrete Lösung gefunden.
Vielleicht hat jemand eine einfache Lösung wie ich den Datentyp per SCL beschreiben kann.
System TIA V18
S7-1516

Vielen Dank vorab!

Grüße
Max
 
Hallo zusammen,

ich muss eine Put& Get Verbindung zwischen einer Hauptsteuerung und 9 Untersteuerungen realisieren.
Was hast Du für Steuerungen zur Verfügung? Wie viele Verbindungen können sie?
Erledigt => 1516 sollte es können.

Diese sollen jeweils 3 Blöcke aus den Datenbausteinen schreiben und lesen.
Hoffentlich nicht lesen UND schreiben in EINEM Datenblock.

Meine Idee dahinter war, dass ich die Adresse und den SD-Bereich entsprechen am Eingang parametriere.
Was ist de SD-Bereich. Welchen Eingang (von einem Baustein? Wenn ja von welchen?) meinst Du?

Leider macht mir der Datentyp Remote Probleme, ich habe schon lange gesucht aber nicht die konkrete Lösung gefunden.
Was für Probleme macht er denn?

Vielleicht hat jemand eine einfache Lösung wie ich den Datentyp per SCL beschreiben kann.
Unklar. Bin mir bei PUT/GET nicht sicher. Aber geht nicht ein UDT?

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MFreiberger,

Hoffentlich nicht lesen UND schreiben in EINEM Datenblock.
Doch, in meine DB sind die ersten 315 Variablen vom Typ Word vorgsehen zum lesen und die nächsten 315 zum schreiben.
Bisher hat das bei direkter
Adressierung immer wunderbar funktioniert.


Screenshot (1).jpg
Hier meine ich den SD-Eingang.
Unklar. Bin mir bei PUT/GET nicht sicher. Aber geht nicht ein UDT?
Mit einem UDT habe ich bisher noch nicht getestet, ob es funktioniert.
Vielleicht denke ich auch etwas zu kompliziert, wie ich mit dem UDT den Remote bilden kann.

P#DB181.DBX0.0 BYTE 210
Ich möchte hier die DB Nummer verändern, sodass ich nicht für jeden DB eine neue PUT/Get Verbindung programmieren muss.

Gruß
Max
 
Ich bin mit der Any-Pointerung auf TIA nicht so bewandert. Aber was für Steuerungen sollen denn angebunden werden? Muss es PUT/GET sein.

Doch, in meine DB sind die ersten 315 Variablen vom Typ Word vorgsehen zum lesen und die nächsten 315 zum schreiben.
Bisher hat das bei direkter
Adressierung immer wunderbar funktioniert.
Na, das ist ja DOCH getrenntes lesen/schreiben.

Anhang anzeigen 76590
Hier meine ich den SD-Eingang.
Also sowohl am ADDR_1 (remote CPU) als auch am SD_1 (lokale CPU) muss ja ein Pointer dran. Aber wie gesagt: in TIA habe ich noch nicht vier "gepointert". Deswegen kann ich da keine sicheren Wahrheiten zu aussprechen.

Mit einem UDT habe ich bisher noch nicht getestet, ob es funktioniert.
Vielleicht denke ich auch etwas zu kompliziert, wie ich mit dem UDT den Remote bilden kann.

P#DB181.DBX0.0 BYTE 210
Ich möchte hier die DB Nummer verändern, sodass ich nicht für jeden DB eine neue PUT/Get Verbindung programmieren muss.
Du musst ja nicht unbedingt die DB-Nummer ändern. Mach Dir doch einen Pointer, den Du an den PUT verschaltest und vorher mehrere Pointer, die Du dem "Übergabepointer" passend zuweist.


Und es muss PUT/GET bleiben? Was für remote Steuerungen sollen denn angebunden werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du musst ja nicht unbedingt die DB-Nummer ändern. Mach Dir doch einen Pointer, den Du an den PUT verschaltest und vorher mehrere Pointer, die Du dem "Übergabepointer" passend zuweist.
Ich habe schon etwas probiert, bin aber nicht auf einen Nenner gekommen, von ANY kommt man nicht auf Remote.

Bisher sind die Steuerungen auch per Put&Get angebunden.
Es sind 9 Steuerungen von S7-300, S7-1200, Soft SPS und S7-1500.
 
.. Leider macht mir der Datentyp Remote Probleme ...
Wie äußerst sich das denn? Generell müsste es mit dem ANY funktionieren.
Ist der DB optimiert, das müßte dann aber im Klartext beim Übersetzen angemault werden.
Ich glaube, die Größe der Datenblöcke war noch begrenzt, möglicherweise CPU-abhängig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie äußerst sich das denn? Generell müsste es mit dem ANY funktionieren.
Ist der DB optimiert, das müßte dann aber im Klartext beim Übersetzen angemault werden.
Ich glaube, die Größe der Datenblöcke war noch begrenzt, möglicherweise CPU-abhängig.
Wie genau weiße ich das Any dem Remote zu?
Ich habe bisher noch kein direktes Beispiel gesehen, wie jemand das indirekt adressiert hat.
Vielleicht hat jemand ein Beispiel....wäre Mega.

Ich habe nur für jede Steuerung eine Verbinung angelegt.
 
PUT: Daten in eine remote CPU schreiben (S7-1200, S7-1500)
Zeiger auf diejenigen Bereiche in der Partner-CPU, in die geschrieben werden soll.
Wenn der REMOTE-Zeiger auf einen DB zugreift, ist der DB immer zu spezifizieren.
Beispiel: P#DB10.DBX5.0 Byte 10.
Bei der Übertragung von Datenstrukturen (z. B. Struct, Array) muss an den Parametern ADDR_i der folgende Datentyp verwendet werden:
  • Bei S7-1200-CPUs aller Firmware-Versionen und bei S7-1500-CPUs ab Firmware-Version V2.8.2: BYTE, CHAR, WORD, INT, DWORD, DINT oder REAL
  • Bei S7-1500-CPUs mit Firmware-Version < V2.8.2: CHAR
Hinweis: Sie können Programme, die die Anweisung "PUT" enthalten, von S7-300-, S7-400- und S7-1200-CPUs also auf S7-1500-CPUs ab Firmware-Version V2.8.2 übertragen.

PUT: Daten in eine remote CPU schreiben (S7-1200, S7-1500)
Zeiger auf diejenigen Bereiche in der eigenen CPU, die die zu versendenden Daten enthalten.
Zulässig sind nur die Datentypen BOOL (nicht erlaubt: Bitfeld), BYTE, CHAR, WORD, INT, DWORD, DINT, REAL.
Für S7-1500-CPUs mit Firmware-Version < V2.8.2 gilt: Bei der Übertragung von Datenstrukturen (z. B. Struct, Array) muss an den Parametern SD_i der Datentyp CHAR verwendet werden.
Hinweis: Sie können Programme, die die Anweisung "PUT" enthalten, von S7-300-, S7-400- und S7-1200-CPUs also auf S7-1500-CPUs ab Firmware-Version V2.8.2 übertragen.

Ich sehe nicht, wie das indirekt funktionieren könnte
 
Wie genau weiße ich das Any dem Remote zu? ..
Einfach "P#DB181.DBX0.0 BYTE 210" an den Bausteinparameter antragen, geht nicht? Ein REMOTE ist ja auch nichts anderes ein ANY, nur bezogen auf die remote CPU. Wenn das nicht geht, müsstest du gnädigerweise mal näher erläutern, was passiert. Wird irgend etwas rot, gelb oder grün? Also, ich meine auf dem Bildschirm, nicht davor. Kommen beim Übersetzen Fehlermeldungen? Oder werden ganz einfach die Daten nicht übertragen?

In meinen bisherigen Fällen rufe ich PUT und GET innerhalb eines FBs als Instanzen auf und übergebe diesem FB über Bausteinparameter vom Typ REMOTE die absolut adressierten Pointer- bzw. Any-Adressen. Ich gehe aber davon aus, dass man diese ANYs aber auch direkt an PUT und GET übergeben kann, so wie du es vor hast. Der Editor nimmt es zumindest an, und fehlerfrei übersetzen lässt es sich auch. Allerdings mit V16 getestet.

Welche Firmware hat denn deine Mega-CPU?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wollte ein Any anlegen, den ich auf den Adresseingang legen. Leider lässt er das bei V18 nicht mehr zu. Bei V16 geht das noch.
Nun wäre die Frage, wie ich den Remote Datenty zerlegen kann, so dass ich auf DB-Nummer, Bit und Byte und Länge zugreifen kann.

Ich habe einen ähnlichen beitrag gefunden, leider komm ich nicht ganz mit, wie er den Remote Datentyp gebildet hat.

Screenshot_1.JPGScreenshot_2.JPG
 
Na Max, war'ne lange Nacht :p?

Hast du eine Lösung gefunden? Ich glaube, was du vor hast, das funktioniert so nicht, auch nicht in der V16.

Wenn ich sehe, was an dieser Stelle so alles getrieben wird, auch anhand einiger Themen im Simatic Support Forum, dann kann ich jetzt auch die Ablehnung gegen PUT&GET besser verstehen, die viele von uns immer mal wieder zum Ausdruck bringen. PUT&GET haben ganz sicher ihre Berechtigung, aber man sollte mit Bedacht damit umgehen. Pointer berechnen und Adressen verbiegen ist beim uneingeschränktem Herumstochern in der remoten CPU eine ganz schlechte Idee. Siemens hat das wahrscheinlich auch so gesehen. Ich habe mich schon lange gefragt, was es überhaupt mit dem Daten- bzw. Parametertyp REMOTE auf sich hat, wo er doch eigentlich nichts anderes als einen ANY darstellt. Der Unterschied zum ANY besteht in seiner sehr beschränkten Verwendungsmöglichkeit. Dort, wo man einen ANY kneten und walzen kann wie man will, kann man den REMOTE lediglich zur Übergabe als Bausteinparameter verwenden, und das auch nur als IN oder als IN_OUT. Man hat nirgends eine Möglichkeit der schreibenden Bearbeitung, auch nicht über eine AT-Sicht oder über SRIALIZE & Co, und das ist auch gut so. Man kann einen REMOTE lediglich absolut addressieren. Siemens hat damit das Gewichse an dieser Stelle wirkungsvoll unterbunden. Jetzt müßte man nur noch drei oder vier REMOTE-Pointer an PUT&GET anlegen können, das wäre doch mal schön. Man kann aber, wie schon erwähnt, auch mehrere Aufrufe mit der selben ID verwenden, wenn einem das lieber ist ;).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
🤪 ja was?

Hat eigentlich irgendwer von euch Luschen 🤪 die Po-Ente aus Psalm 14 erkannt?
Nein? Dann zurück zu Psalm 1:

.. Diese sollen jeweils 3 Blöcke aus den Datenbausteinen schreiben und lesen...

Wenn das jetzt PUT&GET auf einer 1516 tatsächlich nicht können, dann ... weiß ich's aber auch nicht ;).
 
Zurück
Oben