Beschreibung der einzelnen DP-Funktionen und Daten sowie Fehlercodes
4.3.2
Diagnosedaten eines DP-Slave lesen
Konsistentes Lesen der Diagnosedaten
Für die Diagnosedaten jedes einzelnen Slave gibt es einen fest zugeordneten Da-
tenbereich im Prozessabbild des CP 5613/CP 5614 (zum Datenformat siehe Kapi-
tel 4.6).
Zum konsistenten Lesen der Diagnosedaten eines Slave sperrt Ihr Anwenderpro-
gramm den Datenbereich zunächst gegen Aktualisierung von Seiten des DP-
Master, greift dann darauf zu und gibt ihn anschließend wieder frei. Das Sperren
erfolgt durch das Schreiben der Slave-Nummer in ein Steuerregister im Pro-
zessabbild. Das Freigeben erfolgt durch Schreiben des Wertes DPR_DP_UNLOCK
in dasselbe Register.
Außerdem gibt es einen Zähler, der die Diagnosedaten des betreffenden Slave
mitzählt.
Beispiel für konsistentes Lesen der Diagnosedaten
Es sei p ein Zeiger auf das Prozessabbild, den Ihr Anwenderprogramm beim
„DP_get_pointer"-Aufruf erhalten hat. Dann werden 200 Byte der Diagnosedaten
des Slave Nr. 5 wie folgt in einen lokalen Puffer „buf" kopiert:
/*Sperren des Diagnosedatenbereichs gegen Aktualisierung*/
p->ctr.D_lock_diag_slave_adr = 5;
/* Zähler auswerten */
count = p->pi.slave_diag[5].diag_count;
/* aktuelle Daten kopieren */
memcpy(buf, &p->pi.slave_diag[5].data[0],
/* Sperre wieder aufheben */
p->ctr.D_lock_diag_slave_adr = DPR_DP_UNLOCK;
Programmierschnittstelle DP-Base für CP 5613/CP 5614
C79000-G8900-C139-04
p->pi.slave_diag[5].diag_len);
169