Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: CP342-5 DP_SEND und DP_RECV.

  1. #1
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.624
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.

    Ich musste ein fremder helfen mit seiner S7 program mit CP342-5. Er verstand nicht warum es nicht funzte. Kein Wunder, in seiner programm gab es kein code die den CP342-5 ansprichte. Zum schluss hat es geklappt. Es war das erste mal das ich ein CP342-5 verwenden musste. Es gab 2 sachen wobei ich nicht ganz klar war.

    1. Bei DP_SEND und DP_RECV, kann das sein das man immer von byte 0 starten muss ?
    Wenn z.b. nur 4 bytes an eine slave verbunden ist, und die adressen sind IB100-IB103, muss man 104 bytes übertragen, nicht nur die 4 relevante bytes.

    2. Bei DP_RECV, und obengennanten beispiel mit IB100-IB103, was passiert mist IB0-IB99 ? Werden sie von DP_RECV überschrieben - gelöscht eigentlich ?
    Ich habe ein DB als empfangspuffer verwendet, aber ich wundere was wäre passiert wenn ich das prozessimage direckt adressiert habe.

    Danke.
    Jesper M. Pedersen
    Zitieren Zitieren CP342-5 DP_SEND und DP_RECV.  

  2. #2
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Du musst ja bei den Datenbereichen einen ANY - Pointer anlegen.
    Bei einem ANY Pointer steht ja die Startadresse und die Länge des Datenbereiches drinn.

    zb: DB1.DBB100 Byte 10
    Mit diesem Pointer sprichst du ab dem Byte 100 im DB1 einen Bereich von 10 Bytes an also von Byte 100 bis 109!

    Am einfachsten ist wenn du ein Struct in deinem DB anlegst zb mit dem Namen Eingang dann kannst du Symbolisch adressieren indem du "Dein_DB".Eingang an den FC anschreibst. Bei dieser Variante brauchst du dich um die genaue Adresse nicht mehr kümmern.

    godi

  3. #3
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    1. Bei DP_SEND und DP_RECV, kann das sein das man immer von byte 0 starten muss ?
    Wenn z.b. nur 4 bytes an eine slave verbunden ist, und die adressen sind IB100-IB103, muss man 104 bytes übertragen, nicht nur die 4 relevante bytes.
    .
    Der Empfangspuffer muss immer die höchste projektierte E/A-Adresse eines DP-Slaves + 1 sein. Wenn du also die Eingangsbytes 100-103 auslesen/schreiben willst, dann musst du deinen Empfangs/Sendepuffer immer 104 Bytes lang machen.
    Es wird immer der E/A-Adressraum beginnend ab der Adresse 0 plus die angegebene Länge am Pointer aktualisiert.


    Zitat Zitat von JesperMP Beitrag anzeigen
    2. Bei DP_RECV, und obengennanten beispiel mit IB100-IB103, was passiert mist IB0-IB99 ? Werden sie von DP_RECV überschrieben - gelöscht eigentlich ?
    Ich habe ein DB als empfangspuffer verwendet, aber ich wundere was wäre passiert wenn ich das prozessimage direckt adressiert habe.
    Bei DP-RECV liest du, in deinem Fall, 104 Eingangsbytes beginnend ab Byte 0 ein und überschreibst dann deinen eingestellten Datenbereich (hier ein DB). Man sollte als Empfangsbereich immer einen DB einstellen.

  4. #4
    Avatar von JesperMP
    JesperMP ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.624
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Hallo godi.

    Ja ich verwende ein ANY pointer und ein "puffer-DB" wie du vorschlägst.
    Aber wenn ich nur 4 bytes einlesen mit DP_RECV, denn sind die daten verschoben.
    Nur wenn ich ein leeres datenbereich einfügen das die IB0-IB99 entspricht, und damit insgesammt 104 bytes einlesen, denn funzt es.

    edit:
    Also, wie du schreibst wird das nicht funktionieren. Oder bin ich falsch ?
    zb: DB1.DBB100 Byte 10
    Mit diesem Pointer sprichst du ab dem Byte 100 im DB1 einen Bereich von 10 Bytes an also von Byte 100 bis 109!
    Um IB100-IB109 mit DB_RECV zu lesen, muss es DB1.DBB0 Byte 110 heissen, oder ?
    Geändert von JesperMP (17.12.2007 um 14:43 Uhr)
    Jesper M. Pedersen

  5. #5
    Avatar von JesperMP
    JesperMP ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.624
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Zitat Zitat von marlob Beitrag anzeigen
    Man sollte als Empfangsbereich immer einen DB einstellen.
    Danke. Dies ist auch was ich bei erfahrung gefunden haben - aber es war mir nicht ganz klar dass es den einzigste möglicheit ist.
    Ich finde es ein bisschen doof (immer von "0" zu starten), aber wenn es so sein muss - denn OK.
    Jesper M. Pedersen

  6. #6
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Hallo godi.

    Ja ich verwende ein ANY pointer und ein "puffer-DB" wie du vorschlägst.
    Aber wenn ich nur 4 bytes einlesen mit DP_RECV, denn sind die daten verschoben.
    Nur wenn ich ein leeres datenbereich einfügen das die IB0-IB99 entspricht, und damit insgesammt 104 bytes einlesen, denn funzt es.

    edit:
    Also, wie du schreibst wird das nicht funktionieren. Oder bin ich falsch ?

    Um IB100-IB109 mit DB_RECV zu lesen, muss es DB1.DBB0 Byte 110 heissen, oder ?
    Nein!

    Wenn du von Byte 100 bis 109 lesen willst dann P#DB1.DBX100.0 BYTE 10

    Sorry! Habe gerade gesehen dass ich mich vorher beim Pointer verschrieben habe.

    godi

  7. #7
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Nein!

    Wenn du von Byte 100 bis 109 lesen willst dann P#DB1.DBX100.0 BYTE 10

    Sorry! Habe gerade gesehen dass ich mich vorher beim Pointer verschrieben habe.

    godi
    @godi
    lese dir mal folgende FAQ von Siemens durch und überdenke dann mal deine Antwort
    Beitrags-Id: 18208090
    Vor allem diesen Abschnitt:
    5. Datenaustausch zwischen CPU, CP und E/A-Bereich der DP Slaves
    da steht unter anderem dies hier
    Allgemein gilt:
    Die höchste projektierte E/A-Adresse eines DP-Slaves + 1 ergibt die Länge des Datenbereiches, welcher am Parameter "SEND" bzw. "RECV" über den Pointer anzugeben ist.
    Und er will ja Eingangsbyte 100 - 109 einlesen und dann muss am Eingang RECV z.B. P#DB1.DBX100.0 BYTE 110 stehen.
    Geändert von marlob (17.12.2007 um 16:34 Uhr)

  8. Folgender Benutzer sagt Danke zu marlob für den nützlichen Beitrag:

    godi (18.12.2007)

  9. #8
    Avatar von JesperMP
    JesperMP ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.624
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Zitat Zitat von marlob
    Und er will ja Eingangsbyte 100 - 109 einlesen und dann muss am Eingang RECV z.B. P#DB1.DBX100.0 BYTE 110 stehen
    P#DB1.DBX0.0 BYTE 110.
    Dann entspricht DB1.DBB100 IB100, DB1.DB101 IB101 usw.
    Jesper M. Pedersen

  10. #9
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von marlob Beitrag anzeigen
    @godi
    lese dir mal folgende FAQ von Siemens durch und überdenke dann mal deine Antwort
    Beitrags-Id: 18208090
    Vor allem diesen Abschnitt:
    5. Datenaustausch zwischen CPU, CP und E/A-Bereich der DP Slaves
    da steht unter anderem dies hier
    Und er will ja Eingangsbyte 100 - 109 einlesen und dann muss am Eingang RECV z.B. P#DB1.DBX100.0 BYTE 110 stehen.
    OK!

    Ich ziehe meine Antworten zurück!

    Ich habe bis jetzt nur den CP342-5 als Slave verbaut und da legt man den AnyPointer so an wie ich es geschrieben habe.
    Naja gut zu wissen das es beim Masterbetrieb mit I/O's anders ist!

    godi

Ähnliche Themen

  1. Kleine Fragen zu DP_RECV.
    Von JesperMP im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 25.05.2009, 12:07
  2. CP342-5 und DP_SEND
    Von MSP im Forum Feldbusse
    Antworten: 3
    Letzter Beitrag: 16.05.2009, 22:44
  3. Frage zu CP-342-5 (DP_Send und DP_Receive)
    Von diabolo150973 im Forum Feldbusse
    Antworten: 9
    Letzter Beitrag: 30.10.2008, 08:52
  4. CP 342-5 DP_RECV bei nur Senden aufrufen?
    Von Thomas_v2.1 im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 21.01.2008, 10:18
  5. Profibus Fehler DP_Send/Recv
    Von Buchholz im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.10.2006, 08:49

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •