Diagnose in der Applikation
Der PROFINET-Controller verfügt über einen internen Puffer für Diagnosedaten. Diese „Shadowing Database“ wird, für den Anwender transparent, im Hintergrund ständig durch von den Devices gesendete Alarme und beim Verbindungsaufbau durch azyklische Dienste aktualisiert. So wird mit minimaler Verzögerung der tatsächliche Diagnosestatus aller Geräte in die Host-Anwendung gespiegelt und kann dort jederzeit ausgewertet werden. Alternativ oder zusätzlich kann die Anwendung die einzelnen Alarme empfangen (CommFB.RALARM
) oder die Diagnose Daten neu auslesen (CommFB.RDREC
).
Die hier beschriebene API der Bibliotheken ProfinetCommon
und CommFB
ist für den CODESYS PROFINET-Stack sowie die CIFX-Lösung identisch. Einzelne Dienste werden aber von der CIFX-Lösung nicht in vollem Umfang implementiert (Siehe Datenblatt). Sie finden Codebeispiele in der Bibliotheksdokumentation nachfolgend genannter Funktionsbausteine.
Geräte-Funktionsbaustein
Für jedes PROFINET-Device im Gerätebaum wird ein Funktionsbaustein erzeugt, der grundlegende Informationen zum Verbindungs- oder Konfigurationsstatus des Gerätes zu Verfügung stellt. So zum Beispiel zum Anliegen von Diagnoseeinträgen oder zu einer abweichende Modulkonfiguration.

Analog dazu wird auch für den Controller eine Funktionsbaustein-Instanz erzeugt, die Informationen zum Betriebszustand des PROFINET-Controllers bereitstellt.
Für weitere Informationen siehe: IoDrvProfinet.ProfinetController
und IoDrvProfinet.PNSlave
Provider- und Consumer-Status
Diese Statusinformation wird immer mit den E/A-Daten übertragen. Sie kann zum CODESYS E/A-Abbild des jeweiligen Moduls hinzugefügt werden.
Alarme
Von PROFINET-Devices gesendete Alarme können mit dem Funktionsbaustein CommFB.RALARM
empfangen werden. Ein Codebeispiel zu Auswertung der Informationen finden Sie in der Bibliotheksdokumentation zu ProfinetCommon.DiagnosisDataReader
.
Device- und Submodul-Status
Neben dem direktem Zugriff auf die Ausgänge des Geräte-Funktionsbausteins gibt es die Möglichkeit, mit dem Baustein ProfinetCommon.DeviceIterator
über alle für einen Controller projektierten Geräte zu iterieren.
Analog dient der Baustein ProfinetCommon.SubmoduleIterator
dem Iterieren der für ein PROFINET-Device konfigurierten Submodule und dem Auswerten des individuellen ProfinetCommon.SubmoduleState
.
Diagnose-Puffer (Diagnosis Shadowing)
Mit dem Baustein ProfinetCommon.DiagnosisDataBuffer
können die in der “Shadowing Database“ des Controllers lokal gepufferten Daten abgerufen werden.
Alternativ können mit der Funktion ProfinetCommon.GetSubmoduelDiagnosis() alle gepufferten Diagnoseeinträge für ein einzelnes Submodul abgefragt werden.
Fehlercodes und Diagnosetexte
Über die oben genannten Funktionen und Funktionsbausteine können die numerischen PROFINET-Fehlercodes (ErrorCode
und ExtErrorCode
) abgerufen werden. Wenn in einer Applikation die zugehörigen textuellen Beschreibungen erforderlich sind, beispielsweise zur Anzeige in einer Visualisierung, müssen diese textuellen Beschreibungen gesondert heruntergeladen werden. Für weitere Informationen siehe Befehl: PROFINET Diagnose-Ressourcen hinzufügen.