Step 7 CP342-5 DP Diagnose

chbg

Level-1
Beiträge
64
Reaktionspunkte
14
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich habe leider im Forum nichts gefunden das mir weitergeholfen hätte.
Ich Versuche eine DP Slave Diagnose über einen CP342-5 zu realisieren. (6GK7 342-5DA03-0XE0 v6.0)
Und zwar soll mir eine Liste der aktiven DP Slaves ausgegeben werden wie bei SFC51 mit SZL_ID 292.

Ich habe dazu versucht den FC3 DP_DIAG zu nutzen aber leider ohne Erfolg.

CP Adresse beginnt mit 272 (Hex 110)

Aufbau im Test:
CPU 315 2PN/DP 6ES7 315-2EH14-0AB0
CP 343-1 6ES7 343-1EX30-0XE0 v2.6
CP 342-5 6GK7 342-5DA03-0XE0 v6.0

Slave am CP 342-5 ist auf der Adresse 5 eine ET200S ST (6ES7 151-1AA03_0AB0).


Code:
      CALL  "DP_DIAG"
       CPLADDR:=W#16#110
       DTYPE  :=B#16#0
       STATION:=B#16#0
       DIAG   :=P#M 110.0 BYTE 16
       NDR    :=#tNDR
       ERROR  :=#tError
       STATUS :=#tStatus
       DIAGLNG:=#tLange


      L     #tStatus
      L     0
      ==I   
      U     #tNDR
      UN    #tError
      NOT   
      BEB   

      CALL  "BLKMOV"
       SRCBLK :=P#M 110.0 BYTE 16
       RET_VAL:=#tRetVal
       DSTBLK :="Test".DpDiag

Ich bekomme den Status 8182 zurück wärend er belegt ist und sonst den Status 0, das Problem dabei ist allerdings dass ich keine Daten von dem FC erhalte.

Vielleicht kann mir jemand weiterhelfen, habe auch mal das Beispieprojekt von Siemens geladen mit dem FB in welchem der FC3 aufgerufen wird. Hat leider auch nicht funktioniert.
Es muss nicht zwingend über den FC3 gelöst werden, der FC3 basiert ja auf dem SFC59 aber mit diesem bin ich leider auch nicht weiter gekommen.

Bestens Dank im Voraus
 
Status 8182 heißt eigentlich, daß der CP342-5 in STOP ist oder keine Projektierung hat.
Ich meine, für die korrekte Kommunikation mit dem CP muß mindestens einer der FC DP_SEND oder DP_RECV aufgerufen werden.

Ich hatte das mal etwa so gemacht:
Code:
      CALL  "DP_RECV"
       CPLADDR :=W#16#110
       RECV    :=P#DB20.DBX0.0 BYTE 190 //DP_IN: Eingänge der Slaves
       NDR     :=#DP_RECV_NDR
       ERROR   :=#DP_RECV_ERROR
       STATUS  :=#DP_RECV_STATUS
       DPSTATUS:=#DP_RECV_DPSTATUS

// DP_RECV_DPSTATUS.0 muß 0 sein = Masterbetrieb
// DP_RECV_DPSTATUS.1 = 0 : alle Slave vorhanden

      U(
      L     W#16#3                      //DP_RECV_DPSTATUS.1+.0 auswerten
      L     #DP_RECV_DPSTATUS
      XOW   W#16#1                      //DP_RECV_DPSTATUS.0 0->1 umdrehen
      UW                                //wenn beide Bits=1 -> ergibt 3
      ==I
      )
      SPB   CDIA                        //Stationsliste(0) lesen sinnvoll

      L     0                           //alle Slaves vorhanden !
      T     "DP_IN".LIST_SLAVES_NOT_PRESENT[1]
      T     "DP_IN".LIST_SLAVES_NOT_PRESENT[2]
      T     "DP_IN".LIST_SLAVES_NOT_PRESENT[3]
      T     "DP_IN".LIST_SLAVES_NOT_PRESENT[4]
      SPA   CPSL


CDIA:  CALL  "DP_DIAG"
       CPLADDR:=W#16#110
       DTYPE  :=B#16#0                  //0=Stationsliste lesen
       STATION:=B#16#0
       DIAG   :="DP_IN".LIST_SLAVES_NOT_PRESENT  //16 Bytes, ARRAY[1..4] OF DWORD
       NDR    :=#DP_DIAG_NDR
       ERROR  :=#DP_DIAG_ERROR
       STATUS :=#DP_DIAG_STATUS
       DIAGLNG:=#DP_DIAG_DIAGLNG

      U(
      L     #DP_DIAG_STATUS
      L     0
      ==I
      )
      U     #DP_DIAG_NDR                //neue Stationsliste(0) gelesen
      UN    #DP_DIAG_ERROR
      SPBN  ESLD

//aktuelle Stationsliste(0) gelesen oder alle Slaves vorhanden
CPSL: CALL  "BLKMOV"
       SRCBLK :="DP_IN".LIST_SLAVES_NOT_PRESENT  //16 Bytes, ARRAY[1..4] OF DWORD
       RET_VAL:=#tRetVal
       DSTBLK :="Test".DpDiag

ESLD: SET

//es folgt noch Einzeldiagnose (DTYPE:2) aller Slaves für gestörte Slaves (Stationbyte1.1:NotReady)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin gerade unterwegs.
DP_Send und DP_RECV werden aufgerufen im OB1 das hab ich nicht mit gepostet. Ansonsten würde auch der CP einen Fehler ausgeben bezüglich Projektierter Datenlänge.
Der CP läuft und ich bekomme auch Daten von den IO
 
Zuletzt bearbeitet:
Hallo,

irgendwie kriege ich den Baustein "DP_DIAG" auch nicht dazu mir eine vernünftige Diagonse auszugeben.

Ich habe eine CPU314 ohne Profibus, an diese ist ein CP342-5 angebaut. Der CP342-5 ist als Master in der Hardwarekonfig definiert. (PB-Adresse 2)
An diesem CP342-5 ist aktuell nur ein SEW Umrichter über Profibus angeschlossen. (PB-Adresse 3)

Die Kommunikation mit DP_RECV und DP_SEND funktioniert.
Sobald ich den Profibusstecker abstecke blinkt auf dem CP auch die rote BUSF-LED.

Der Baustein DP_DIAG liefert jedoch immer den Wert 16#80B0 zurück. Laut Hilfe bedetutet es: Die Baugruppe kennt den Datensatz nicht oder befindet sich im RUN --> STOP Übergang.

Anscheinend mache ich da was falsch aber ich weiss nicht was.
Ich habe den Quellcode von PN/DP ausprobiert und auch das Beispiel von SIEMENS mit dem selben Ergebnis: STATUS = 16#80B0

Kann mir da vielleicht jemand weiter helfen?
 
Hat Dein FC DP_DIAG die Version 3.0?
Welche Bestellnummer und Firmwareversion hat Dein CP342-5?
Welche Bestellnummer und Firmwareversion hat Deine CPU 314?

PS: hast Du die korrekte CPLADDR angegeben?

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Oh mann - Danke für den Hinweis!

Die Version des DP_DIAG war 1.2 (aus dem Programmbeispiel von SIEMENS)
Ich habe jetzt die Version 3.0 reingeladen und schon geht alles.

:s12:
 
Zurück
Oben