Kommunikation mit Kunde über CP342-5

Tompson

Level-1
Beiträge
40
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein Problem bei der Kommunikation zwischen unserer Anlage und einer Kundenanlage. Wir haben eine Teil der Anlage abgebaut und müssen nun diese Kommunikation bei uns einbinden.

Hier die Daten der alten Anlage, die die Daten gesendet hat:
CP414-3 DP V4.0
An eine CP 443-5 Ext V6.0 ist eine DP-Mastersystem (Nr. 2) mit der Eingangs-Adresse 8189 angeschlossen. Übertragen werden 11DINT über eine Baugruppe mit 2mal 8 Wörtern und einmal 6 Wörtern Out und 0 Wörtern In ab den Ausgangsasdressen 800 bis 843. Der Aufruf ist in einem FC wie folgt:

L DB510.DBD 300 //Speicherort der Daten
T PAD 804
L DB510.DBD 304
T PAD 808

Über den Kunden Empfänger ist mir nichts bekannt.

Diese Anlage gibt es nicht mehr, daher mußten wir es bei uns einbinden:
CPU 317-2 V2.1
CP 342-5 mit einem DP-Mastersystem (Nr. 180) mit den Netzeinstellungen wie die alte Anlage (Profibus-Adresse 2, 1,5Mbit/s, Profil DP), mit einer Baugruppe 2mal 8Wörtern und einmal 6 Wörtern Out und 0 Wörtern In mit der Eingangs- und Ausgangs-Adresse 400-415.

Die Datenliegen im DB200 mit 11DINT und der Aufruf ist in einem zyklisch aufgerufenem FC mit DP_Send wie folgt:

CALL "DP_Send"
CPLADDR:=W#16#190
SEND :=P#DB200.DBX0.0 BYTE 44
DONE :=M208.0
ERROR :=M208.1
STATUS :=MW206


Die SiemensHotline hat mir schon verraten, dass wenn ich DP_Send benutze auch DP-Receive brauche. Daher habe ich noch einen DB (DB201) erzeugt und wie folgt aufgerufen:


CALL "DP_RECEIVE"
CPLADDR :=W#16#190
RECV :=P#DB201.DBX0.0 BYTE 44
NDR :=M208.2
ERROR :=M208.3
STATUS :=MW210
DPSTATUS:=MB212


Der Kunden Empfänger hat sich nicht geändert, d.h. wenn ich die Daten wie früher sende, sollten sie dort fehlerfrei ankommen.

Das Problem ist nun, das zwar Daten ankommen, aber keine vernünftigen. Außerdem blinkt an der CP immer die SF Lampe. Muss ich die BG als In und Out konfigurieren? Oder habe ich noch andere Fehler?
Kann mir einer weiter helfen?
Vielen Dank.
Gruß
Tompson
 
Hallo tompson

Du willst also 44 Bytes senden, aber warum hast Du denn nur 16 Bytes reserviert ? (400-415).

CP342-5 mit "DP_Send" ist auch etwas "lustig".
Den Addressierung fangen immer an von Byte 0, und man muss sämtliche Bytes transferieren von 0 bis letzte konfigurierte byte.
Das heisst:
SEND :=P#DB200.DBX0.0 BYTE 416 // (bytes 0 .. 415) wenn nur die 16 bytes von 400 - 415 transferiert werden muss.

Ich wurde die 16 Bytes (oder die 44 Bytes) von 0 anfangen.
Merk dich das den E/A Prozessabbild von den CP342-5 hat nichts zu tun mit den Prozessabbild von den CPU. Beide können z.B. E/A von 0 bis 44 haben - sie überlapt nicht mit einander.

Wenn Du in CP342-5 die Ausgänge als bytes 0..43 Konfigurierst, dann wird es funktionieren mit
SEND :=P#DB200.DBX0.0 BYTE 44 // (bytes 0 .. 43)

DP_RECV funktioniert im gleichen Sinne.
 
Hallo JesperMP,

ich kann die Länge aber in der HW-Konfig gar nicht veränder! Sie ist mit 16 Bytes fest vorgegeben.
Und ich dachte, die Adresse, an die ich meine Daten sende wäre nicht die der CP, sondern die der Baugruppe. Also in meinem Fall die Adressen 800 bis 843!

Gruß
Tompson
 
Die 16 Bytes die den CP342-5 Modul verwendet im HW Konfig von den S7-300 Rack haben nichts direkt zu tun mit die E/A Daten die in den CP342-5 Modul konfiguriert ist. OK, ist nicht wichtig.

Also, wie sind die E/A in den CP342-5 Modul konfiguriert ?
Als Eingangs-Bytes 800 - 843, und Ausgangs-Bytes 800 - 843 ?
Dann wäre den korrekte DP_SEND Auftrag so programmiert:

SEND :=P#DB200.DBX0.0 BYTE 844.

Die Adressen als 800 - 843 zu konfigurieren ist sehr ineffektiv, und bringt keinen Vorteile.
Einfach die Eingans und Ausgangs-Bytes als 0-43 konfigurieren.
Dann wird den korrekte DP_SEND Auftrag so programmiert:

SEND :=P#DB200.DBX0.0 BYTE 44.

Bei den Kommunikations-Partner ist es komplett Egal welche Adressen Du verwendest in Dein Program. Es ist nur wichtig das anzahl und Typ von die Adressen übereinstimmen, wo Eingänge auf eine Seite sind die Ausgänge auf der andere Seite.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, wie sind die E/A in den CP342-5 Modul konfiguriert ?
Als Eingangs-Bytes 800 - 843, und Ausgangs-Bytes 800 - 843 ?
Dann wäre den korrekte DP_SEND Auftrag so programmiert:

SEND :=P#DB200.DBX0.0 BYTE 844.
Aber bei Send gebe ich doch die Länge an und nicht die "Endadresse", daher wäre doch auch in diesem Fall hier richtig
SEND :=P#DB200.DBX0.0 BYTE 44
anzugeben, oder?

Und außerdem war die Adresse ab 800 ja in dem Ursprungsprogramm. Ich habe ja die Adressen 0-43 genommen.

Muss oder soll ich denn den DP_Receive auch aufrufen? Und wenn ja, muss ich dann die HW-Konfig so ändern, dass ich nicht nur 22 Wörter in sondern auch 22 Wörter Out habe, auch wenn da nichts empfangen werde?
 
Zuletzt bearbeitet:
Nein, es ist tatsäglich so. Die Bytes fängen immer von nr. "0" an.
Was DP_SEND tut, ist den Ausgangs Prozesabbild in den CP342-5 zu befüllen.
 
Und außerdem war die Adresse ab 800 ja in dem Ursprungsprogramm. Ich habe ja die Adressen 0-43 genommen.
Ich kenne den CP443-5 nicht. Entweder ist das auch so, das man DP_SEND und DP_RECV verwenden muss, aber der Rückwandbus in S7-400 ist viel schneller, so es hat keine grosse Bedeutung.
Oder, das E/A-Prozesabbild von den CP443-3 ist direkt im CPU Prozesabbild integriert.

Egal, bei CP342-5 ist es nicht empfehlenswert grosse Lücken zu haben, und es bringt keine Vorteile.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin verwirrt! :confused:

Laut Siemens Handbuch (und so mache ich es auch bei AG_Send) gebe ich da die Startadresse als Pointer an und die Länge. So steht es auch im Siemenshandbuch.
Die Parameter "SEND" und "RECV" erfordern eine Pointer-Angabe im Format "ANY" (z.B. "P#DB1.DBX3.0 BYTE 37"). Der Pointer zeigt in diesem Beispiel auf das Bit 0 im Byte 3 des Datenbausteins DB1. Die Angabe "BYTE 37" gibt die Länge des zu übertragenden Datenfeldes in Byte an.

Was mache ich denn mit dem DP_Receive?
 
AG_SEND hat nichts mit DP_SEND zu tun !

"Die Angabe "BYTE 37" gibt die Länge des zu übertragenden Datenfeldes in Byte an." Genau, und du musst den E/A-Prozessabbild übertragen, und es fangen an von Byte 0.

Probier doch was ich dir vorgeschlagen habe.

Ich bin nicht sicher das ein DP_RECV zwingend nötig ist. Ich erinnere das es gab ein Note darüber, aber nur bei alte Firmware Versionen. Mach doch einfach ein DP_RECV und sehe wie es klappt.
 
Zurück
Oben