2 Mal S7-300 / DB-Daten über MPI austauschen

Jan

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

ich möchte den Bereich DB21.DBD0 bis DBD40 von der einen CPU in die andere CPU schreiben und den Bereich DB21.DBD0 bis DBD40 von der anderen CPU in die eine CPU lesen (ich weiß, ist nicht schön den selben DB für lesen und schreiben zu verwenden).

Ich habe schon die Suchfunktion bemüht und bin auf FB14 und FB15 gestoßen; leider finde ich diese weder in der Hilfe, noch in der Bibliothek.

Vieleicht kann mir jemand weiterhelfen, auf welche Art ich die Kommunikation über MPI aufbauen kann.
Aus der Hilfe bin ich bisher nicht schlau geworden.
Es wäre ideal, wenn der Datenaustausch Zyklisch möglich wäre.

Hier die verwendete Hardware:

Die eine CPU: 6ES7 313-1AD03-0AB0 / V1.1 (ohne Speicherkarte)

Die andere CPU: 6ES7 313-1AD00-0AB0 (ohne Speicherkarte)

MPI-Kabel ca. 1m

Ich hoffe ihr könnt mir weiterhelfen.

Gruß Jan
 
Was meinst Du mit Zyklisch ?

In jedem SPS Zyklus eine Übertragung geht nicht, da die Bausteine zum senden immer eine positive Flanke am Eingang benötigen.

Von Globaldaten würde ich in diesem Fall ganz abraten, da der Datenaustausch quasi willkürlich durch das System ausgeführt wird , und das sehr langsam.


Beispiel mit SFC65 X_Send
Beschreibung
Mit der SFC 65 "X_SEND" senden Sie Daten an einen außerhalb der eigenen S7-Station liegenden Kommunikationspartner.
Der Datenempfang beim Kommunikationspartner erfolgt über die SFC 66 "X_RCV".
Der Sendevorgang erfolgt nach Aufruf der SFC mit REQ=1.
Sie müssen darauf achten, daß der über den Parameter SD definierte Sendebereich (auf der sendenden CPU) kleiner oder gleich dem über den Parameter RD definierten Empfangsbereich (beim Kommunikationspartner) ist. Falls SD vom Datentyp BOOL ist, muß auch RD vom Datentyp BOOL sein.

Parameter Dekla-
ration Daten-
typ Speicherbereich Beschreibung
REQ INPUT BOOL E, A, M, D, L, Konst. Steuerparameter "request to activate", s. . Gemeinsame Parameter der SFCs der S7-Basiskommunikation
CONT INPUT BOOL E, A, M, D, L, Konst. Steuerparameter "continue", s. Gemeinsame Parameter der SFCs der S7-Basiskommunikation
DEST_ID INPUT WORD E, A, M, D, L, Konst. Adressierungsparameter "destination ID". Er enthält die MPI-Adresse des Kommunikationspartners. Diese haben Sie mit STEP 7 projektiert.
REQ_ID INPUT DWORD E, A, M, D, L, Konst. Auftragskennung. Sie dient zur Identifizierung der Daten beim Kommunikationspartner.
SD INPUT ANY E, A, M, D Referenz auf den Sendebereich. Folgende Datentypen sind erlaubt: BOOL, BYTE, CHAR, WORD, INT, DWORD, DINT, REAL, DATE, TOD, TIME, S5TIME, DATE_AND_TIME sowie Arrays der genannten Datentypen mit Ausnahme von BOOL.
Die maximale Größe des Sendebereichs ist 76 Bytes.
RET_VAL OUTPUT INT E, A, M, D, L Tritt während der Bearbeitung der Funktion ein Fehler auf, enthält der Rückgabewert den zugehörigen Fehlercode.
BUSY OUTPUT BOOL E, A, M, D, L BUSY=1: Der Sendevorgang ist noch nicht abgeschlossen.BUSY=0: Der Sendevorgang ist abgeschlossen, bzw. es ist kein Sendevorgang aktiv.

Größter Anfängerfehler in diesem fall ist die MPI Adresse.
Durch das verbinden müßen die MPI-Adressen meistens angepasst werden, da diese nicht mehrfach vorkommen dürfen.

Maschine 1
CPU MPI=2
Panel MPI=1
Maschine 2
CPU MPI=2->MPI=4
Panel MPI=1->MPI3

Beispiel alle 2S 4Byte senden
Code:
     U     "2s"
      FP    M     38.4
      =     L      0.0
      BLD   103
      U     M     38.1
      =     L      0.1
      BLD   103
      CALL  "X_SEND"
       REQ    :=L0.0
       CONT   :=L0.1
       DEST_ID:=W#16#2
       REQ_ID :=MD50
       SD     :=P#DB16.DBX0.0 BYTE 4
       RET_VAL:=MW48
       BUSY   :=M38.2
      NOP   0
 
@ Alle: Danke für die Antworten.

@ Andi F
Laut dem Link brauche ich wohl zwei CP; die habe ich aber nicht.
Oder geht es auch irgendwie ohne CP?


@ Lebenslang
Was meinst du mit Globakdatenkommunikation; bzw. wie baue ich diese Art der Kommunikation auf?

@ jabba
Mit Zyklisch meine ich: Datenübertragung in jedem Zyklus.
Etwas langsamer wäre ausreichend (10 Mal/s).
Ich muß Werte von eine CPU zur anderen schieben, diese Werte sollen sich ca. 10 Mal/s ändern (Positionen von Schrittmotoren).

Ich habe es mit SFC65 und SFC66 versucht.
SFC65 gibt 7000 hex aus.
Hilfe:
7000 - SFC 65 "X_SEND", SFC 67 "X_GET",
SFC 68 "X_PUT"; SFC 69 "X_ABORT", SFC 72 "I_GET", SFC 73 "I_PUT" und SFC 74 "I_ABORT": Aufruf mit REQ=0 (Aufruf ohne Bearbeitung), BUSY hat den Wert 0, es ist keine Datenübertragung aktiv.
SFC 66 "X_RCV": EN_DT=0/1 und NDA=0

Wo liegt der Fehler?

Software: SIMATIC MANAGER V5.2
CPU: 1AD03 / FC2 (Anhang)

Ich hoffe ihr könnt mir noch ein paar Tips geben.

Gruß Jan
 

Anhänge

  • 3afdb2cp_SPS_090722.zip
    864,1 KB · Aufrufe: 22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich hab nur mal kurz in dein Projekt geschaut, aber was mir als erstes aufgefallen ist:

1. Wieso legst du eine 'Null' an den EN-Eingang deiner Baustein. Die werden dann überhaupt nicht bearbeitet?
2. Würd ich das mit einer kleinen Schrittkette lösen...
a) Daten senden
b) Quittierung von der anderen SPS erwarten
c) Daten empfangen
d) Daten kontrollieren ob richtig empfangen
hinzu kommt noch eine Lifebitauswertung
3. Ist mir aufgefallen, dass du deine Bausteine über einen Taktmerker ansprichts. (jede Sekunde) Ich würde erst wieder einen Start draufgeben wenn das Busy-Bit des Bausteines wieder auf LOW ist.

Gruß

PhilippL
 
Danke PhilippL, dass du mal reingeschaut hast.

1. Weil ich diese Bausteine für den Test nicht verwenden wollte, damit es keine Konflikte unter den verschiedenen Bausteinen gibt.

2. Höre ich so zum ersten Mal (Daten senden mit Schrittkette).
a) Wie?
b) Wie soll das Quittieren gehen?
c) Wie?
d) Einfach gesendete Daten mit empfangenen Daten auf Gleichheit vergleichen?
Livebit wäre kein Problem, wenn der Datenaustausch an sich erstmal funktioniert.
3. Das werde ich mal ausprobieren (wäre ja zu "geil", wenn das mein Problem ist).

Gruß

Jan
 
Danke PhilippL, dass du mal reingeschaut hast.

1. Weil ich diese Bausteine für den Test nicht verwenden wollte, damit es keine Konflikte unter den verschiedenen Bausteinen gibt.

2. Höre ich so zum ersten Mal (Daten senden mit Schrittkette).
a) Wie?
b) Wie soll das Quittieren gehen?
c) Wie?
d) Einfach gesendete Daten mit empfangenen Daten auf Gleichheit vergleichen?
Livebit wäre kein Problem, wenn der Datenaustausch an sich erstmal funktioniert.
3. Das werde ich mal ausprobieren (wäre ja zu "geil", wenn das mein Problem ist).

Gruß

Jan

Hallo Jan,
ist es wirklich Dein Ziel 10 mal pro Sekunde bidirektional Daten zu übertragen, also alle 100 Millisekunden? Wenn ja, dann bitte beachte die Zykluszeiten der Programme und das diese SFC usw mit Sicherheit mehr als einen Programmzyklus benötigen um einen Datenblock zu bearbeiten. Deshalb gibt es ja das Busy-Bit.

Gruß
Andi F
 
Zuletzt bearbeitet:
@ Andi F & Nico99

Der 10x/s Datenaustausch hat folgenden Hintergrund:
Ich möchte eine 3-Achsen-Fräse mit Schrittmotoren steuern. Die Schrittmotoren werden über die DA-Karte direkt angesteuert. Da das Programm für eine CPU zu groß ist, muss ich es auf zwei CPUs aufteilen.
Ich versuchs mal in Kurzform: Ich muss nach jedem Schritt wissen, wie die Position ist. Je länger die Datenübertragung dauert, umso langsamer dreht der Schrittmotor (dauert ewig, bis alle Positionen abgefahren sind).

Ich habe es mit der GD-Kommunikation versucht. Der erste Test lief super.
Wegen der Datenmenge: Ich habe die wichtigsten Daten programmiert und beim Test mit Wertvorgabe über VAT lief es einwandfrei.
Ich werde die Kommunikation demnächst mit meinem Programm mal laufen lassen und schauen ob es läuft.
Wenn es läuft, kann ich ja versuchen, mit der Datenübertragung schneller zu werden. Und versuchen, über die meschanische Übersetzung ein Kompromiss zwischen Geschwindigkeit und Genauigkeit zu erreichen.

Gruß

Jan
 
Hast die die 313 rumliegen und mußt die deshalb unbedingt nutzen? Ich hätte dann doch schon einfach eine größere SPS genommen, in die das Programm reinpaßt. Wer soll das später im Fehlerfalle mal warten Nach einer gewissen Zeit weiß niemand mehr was da genau vorgeht, gerade wenn noch um Achsen, Bewegung und Dynamik geht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Andi F

Sind die SFC 65 + 66 schneller als die GD-Kommunikation?

@ Ralle

In der Tat. Eine CPU hatte ich mir besorgt und die Andere war so ein gutes Gebrautangebot, da konnte ich nicht nein sagen.
Hätte ich das Geld, würde ich eine 319 nehmen und würde die Bedienung der Anlage über ein MP oder TP machen. Daher bin ich momentan gezwungen diese zwei Uraltmodelle zu nutzen (hab damals ja nicht geahnt, daß ich so schnell so große Programme schreiben kann und werde).
Im Fehlerfall oder für Erweiterungen, bin ich der Einzige, der sich damit befasst. Wenn ich trotz guter Dokumentation nicht mehr genau weiß, was Sache ist, kann ich mich wider reinarbeiten (bekomme die Zeit sowieso nicht bezahlt).
Die Anlage ist für mich, weil ich mich näher mit den Themen Datenkommunikation und Pointern auseinander setzen möchte und sehen will, ob die Anlage nachher auch tatsächlich läuft (Spaß an der Freude).
Ich werde mir wohl noch Speicherkarten für die CPUs besorgen, um die erforderlichen Datenmengen speichern zu können.

Gruß Jan
 
Zurück
Oben