Step 7 DP_SEND und DP_RECEIVE Probleme CP342-5

andre_2001

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moinsen zusammen,

ich habe ein Problem mit der Einbindung eines Micromaster 440 an einem CP342-5. Um eine Verbindung zwischen der CPU ( CPU313 ) und dem CP herzustellen, habe ich die zwei Funktionen "DP_SEND" und "DP_RECEIVE" in den OB1 eingefügt und laut Bild parametriert. Im Moment gibt es noch keinen Fehler. Sobald ich nun den Micromaster an das DP anfüge und die Daten in die SPS lade geht der CP in Störung. Das verstehe ich auch, weil mein Pointerbereich zu gering ist. Nehm ich diesen nun auf 268 Bytes hoch, bringt mir der "DP_SEND" und "DP_RECEIVE" die Meldung 8F22H und 8F23H (siehe Bild). Wie müssen nun die Datenbausteine geändert werden damit es Funktioniert?

Danke im Voraus !!!

Andre
 

Anhänge

  • Fehler CP.JPG
    Fehler CP.JPG
    67,4 KB · Aufrufe: 30
  • Fehler CP (2).JPG
    Fehler CP (2).JPG
    37,5 KB · Aufrufe: 28
  • Fehler CP (3).JPG
    Fehler CP (3).JPG
    28,3 KB · Aufrufe: 30
  • Fehler CP (4).JPG
    Fehler CP (4).JPG
    97,5 KB · Aufrufe: 28
  • Fehler CP (5).JPG
    Fehler CP (5).JPG
    85,2 KB · Aufrufe: 26
Dein DB5 ist nicht 268 Byte groß. Außerdem kann der SEND- und der RECV-Bereich nicht der selbe sein.
Auf welche E- und A-Adressen ist der Slave projektiert (von - bis)?

Du mußt soviele Bytes senden, daß damit die höchste projektierte A-Adresse erreicht wird (also: Länge=höchste A_Adresse + 1). Ebenso mußt Du soviele Bytes empfangen wie die höchste E_Adresse + 1. Die genaue erforderliche Länge kannst Du auch im Diagnosepuffer sehen. Es ist vorteilhaft, wenn man die Slaves von der Adresse 0 an lückenlos aufsteigend projektiert.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weiters vorteilhaft ist, wenn man die DP_RECV- und DP_SEND-Puffer in getrennte DB legt ab Adresse 0.0, dann haben die Datenbytes von/zu den Slaves in den DB die gleichen Adressen (Offset) wie die Adressen im CP342-5 als E- und A-Adresse projektiert sind.

Angenommen Dein MM440 hat 16 Byte Input ab E0 und 20 Byte Output ab A0, dann könntest Du so programmieren:

DB5 "DP_IN"
Code:
RECV : STRUCT
  Slave_1 : STRUCT
    data_input01 : BYTE
    ...
    data_input16 : BYTE
  END_STRUCT
END_STRUCT

DB6 "DP_OUT"
Code:
SEND : STRUCT
  Slave_1 : STRUCT
    data_output01 : BYTE
    ...
    data_output20 : BYTE
  END_STRUCT
END_STRUCT

(statt "Slave_1 : STRUCT : <Einzelbytes deklarieren>" könnte man auch schreiben "MM440_Pumpe1 : ARRAY[0..19] : BYTE")

An DP_RECV: "P#DB5.DBX0.0 BYTE 16" (wird zum Symbol "DP_IN".RECV umgewandelt)
An DP_SEND: "P#DB6.DBX0.0 BYTE 20" (wird zum Symbol "DP_OUT".SEND umgewandelt)

Harald
 
Hallo Harald,

sorry das ich mich so spät zu diesem Thema melde. Ich war ne weile nicht in Deutschland gewesen. Diese Woche war ich zum SPS Lehrgang für Siemens. Da haben wir das alles mal durchgespielt. Mein Fehler war, so wie du schon sagtest, der zu kurze DB. Oder besser gesagt meinem Pointer habe ich zu viele Bytes Speicherlänge verpasst.

Danke für deine Hilfe
 
Zurück
Oben