Step 7 S7-300 PUT/GET Kommunikation

J_R

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

es gibt zwar schon diverse Threads, aber keinen der meine Fragen so richtig beantwortet.

In meinem Projekt sind drei S7-300 CPUs mit Profinetschnittstelle (CPU 315-2 PN/DP) projektiert. Jede CPU hat einen Anlagenteil unter sich.
Jetzt möchte ich mithilfe von FB14(Get) und FB15(Put) zwischen den CPUs kommunizieren. Im Prinzip sollen zwei CPUs ("Slaves") diverse Daten auf eine "Master" CPU senden und umgekehrt.
Als Leitfaden hab ich die Anleitung von Siemens genommen.https://support.industry.siemens.co...einer-s7-300-cpu-programmiert-?dti=0&lc=de-WW

Allerdings fehlen mir da noch ein paar Randinfos, da ich so eine Kommunikation zum ersten mal programmiere.

1. In der Anleitung wird nur eine Kommunikation zwischen zwei CPUs beschrieben. Wie müsste ich so etwas, wie oben beschrieben, mit drei CPUs programmieren?
2. Wo werden die jeweiligen Daten abgelegt? RD_1 und SD_1 zeigen auf entsprechende Speicherbereiche im Instanzdatenbaustein 200/201. Aber wo genau?
3. Ich möchte in der jeweiligen CPU einen seperaten DB für das Empfangen und für das Senden von Daten anlegen. Müsste ich dann die Spreicherbereiche vom IDB 200/201 mit SFC20 auf einen eigenen DB verschieben?
4. Woher weiß die Partner CPU ("Slave") über welchen DB der "Master" kummunizieren will? Bzw. auf was muss ich beim Anlegen eines DBs im Partner achten? Put/Get ist ja nur einseitig projektiert.

Anbei ist noch ein Bild von der Konfig aus NetPro. Die Hardwae war schon angelegt. Ich habe die vergebenen IDs so übernommen.
NetPro Konfig AP_FR_Projekt.jpg

Ich hoffe, dass ich meine Probleme verständlich geschildert haben.

Vielen Dank für die Antworten.:)

Gruß,
J_R
 
1. In der Anleitung wird nur eine Kommunikation zwischen zwei CPUs beschrieben. Wie müsste ich so etwas, wie oben beschrieben, mit drei CPUs programmieren?
Naja du legst halt 2 Verbindungen an (Slave_1 <-> Master) und (Slave_2 <-> Master)



2. Wo werden die jeweiligen Daten abgelegt? RD_1 und SD_1 zeigen auf entsprechende Speicherbereiche im Instanzdatenbaustein 200/201. Aber wo genau?
Das gibt dir der Pointer vor, z.B. P#DB200.DBX0.0 BYTE 100 Daten werden in den DB200 abgelegt ab Adresse 0.0 und 100 bytes lang.



3. Ich möchte in der jeweiligen CPU einen seperaten DB für das Empfangen und für das Senden von Daten anlegen. Müsste ich dann die Spreicherbereiche vom IDB 200/201 mit SFC20 auf einen eigenen DB verschieben?
Nein. Änder einfach den Pointer auf deine DBs.



4. Woher weiß die Partner CPU ("Slave") über welchen DB der "Master" kummunizieren will? Bzw. auf was muss ich beim Anlegen eines DBs im Partner achten? Put/Get ist ja nur einseitig projektiert.
Auch diese Information wird über den Pointer weitergegeben.
Das einseitige Projektieren ist eben bei PUT/GET so, dafür ist das da. :)

Falls du mit meinen spärlichen Informationen nicht weiter kommst, kann ich dir das auch nochmal ausführlich erklären.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja du legst halt 2 Verbindungen an (Slave_1 <-> Master) und (Slave_2 <-> Master)

Also dann einfach einen zweiten FB anlegen der genauso aufgebaut ist wie der FB115 aus der Anleitung nur mit anderer Kommunikations ID?



Auch diese Information wird über den Pointer weitergegeben.
Das einseitige Projektieren ist eben bei PUT/GET so, dafür ist das da. :smile:

Also muss ich einfach einen Identischen DB im Partner erstellen, wo der Pointer vom Master zeigt?

Ist es dann sinnvoll jeweils zwei DBs anzulegen? Master-->Slave1 und Slave1-->Master

Evtl. brauch ich da noch mehr Infos.:)
 
Also dann einfach einen zweiten FB anlegen der genauso aufgebaut ist wie der FB115 aus der Anleitung nur mit anderer Kommunikations ID?
Ja genau, du programmierst einfach 2 x Put/Get (für jede Verbindung 1 mal) und passt die Kommunikations ID an.


Also muss ich einfach einen Identischen DB im Partner erstellen, wo der Pointer vom Master zeigt?
Ist es dann sinnvoll jeweils zwei DBs anzulegen? Master-->Slave1 und Slave1-->Master
Ich erstelle mir immer einen "SEND_RECV" DB für jede Verbindung, mit jeweils einem SEND(PUT) und einem RECV(GET) Bereich.

Hier ein kleines Beispiel (für eine Verbindung Slave_1 <-> Master_1, programmiert im Master_1):
An dem Baustein PUT legst du an der Schnittstelle "ADDR_1" deinen Pointer an, welcher auf den Bereich des DBs von deinem Partner (Slave_1) zeigt auf welchen die Daten schreiben willst. Die Daten, die du auf deinen Partner-DB schreiben möchtest definierst du über die Schnittstelle "SD_1".
Das gleiche nur umgedreht gilt für GET.

Einfach gesagt:
PUT - ADDR_1: Ziel-DB/Bereich der Partner-CPU in welchen du deine Daten schreibst.
PUT - SD_1: Die zu schreibenden Daten der Lokalen-CPU.
GET - ADDR_1: Ziel-DB/Bereich der Partner-CPU aus welchem (bzw. welche) Daten du lesen möchtest.
GET - RD_1: Hier werden die gelesenen Daten abgelegt (Bereich in der Lokalen-CPU).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Hilfe.

Ich hatte erfolgreich eine der beiden Verbindungen getestet und meine ersten Daten übertragen:)

Anschließend hatte ich dieselbe Funktion für die zweite Verbindung erstellt, nur mit anderer ID.
Allerdings hat diese Übertragung noch einen Fehler (Status =1).

Testweiße hatte ich die bestehende Kommunikation deaktiviert (Enable = 0 bei entsprechendem FB115 sodass dieser nicht mehr bearbeitet wird), das hatte aber nicht geholfen.
Danach hatte ich noch zwei separate IDBs für den FB14 und FB15 erstellt. Auch ohne Erfolg.
Muss man bei der zweiten Verbindungen auch jeweils die IDBs für den FB14 und FB15 neu erstellen oder kann man die aus der anderen Verbindung übernehmen?

Was mir aufgefallen war: Beim kopieren der STAT Variablen vom FB115 in den anderen FB kam eine Meldung das diese schon vergeben wären mit einem kurzen Text (...S7 "Kommunikation"... Genau weiß ich den aber nicht mehr:confused:).
Am Besten werde ich den FB mit dazugehörigen IDB nochmal komplett neu erstellen, vielleicht ist da irgendwo der Wurm drin:eek:

Die Verbindung zu allen CPUs besteht. Zumindest kann ich sie über das Netzwerk erreichen und auch Laden.

Könnte man die Projektierte Verbindung im NetPro irgendwie Testen? Bzw. wie könnte man am besten den Fehler lokalisieren?

Nochmals vielen Dank für eure Hilfe!:ROFLMAO:
 
hast du die HW-Configs in die CPUs geladen ?

was genau besagt der : Fehler (Status =1)
F1 am FB drücken.
In der HW online , dann Baugrupenzustand.
 
Ich schau mir morgen nochmal die HW Konfig online an. Aber eig war da alles okay.

Die Fehlerbeschreibung deutet auf ein Grundsätzliches Verbindungsproblem.

STATUS_PUT_GET.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sind Deine Stationen in NetPro immer noch orange hinterlegt?
- mache mal: Netz > Speichern und übersetzen > Alles übersetzen
- danach markiere Deine Partnerstationen und mache: Zielsystem > Laden im aktuellen Projekt > Verbindungen und Netzübergänge (das geht ohne STOP der CPUs)

Harald
 
Könnte man die Projektierte Verbindung im NetPro irgendwie Testen? Bzw. wie könnte man am besten den Fehler lokalisieren?
Der erste Test ist schonmal ob die Verbindung überhaupt besteht. Siehe hier.
S7C-Verbindungsstatus_pruefen.jpg

Vorher aber wie erstmal alles übersetzen, damit das orangene weggeht, und dann alle Teilnehmer einspielen.
 
Vielen Dank für die Hilfe!

Hab die Hardware und NetPro nochmal komplett übersetzt und geladen.

Siehe da, es funktioniert! :D
 
Zurück
Oben