Beschreibung
Mit der Anweisung können Sie den aktuellen Zustand aller S7-Verbindungen und aller hochverfügbaren S7-Verbindungen (bzw. deren Teilverbindungen) ermitteln.
Durch geeignete Auswertung dieser Verbindungsdaten können Sie den Ausfall von S7-Verbindungen und hochverfügbaren S7-Verbindungen erkennen und ggf. an ein Bedien- und Beobachtungssystem melden. Bei den überwachten Verbindungen kann es sich sowohl um Verbindungen zwischen Automatisierungssystemen als auch um Verbindungen zwischen einem Automatisierungssystem und einem Bedien- und Beobachtungssystem handeln.
|
Hinweis Der Betriebszustandswechsel RUN -> STOP -> RUN einer CPU hat keinen Einfluss auf den Zustand der projektierten Verbindungen. Ausnahme: Beim Wechsel einer H-Station vom Systemzustand Redundant in den Systemzustand Stop werden bei hochverfügbaren Verbindungen diejenigen Teilverbindungen abgebaut, die auf der Reserve-CPU enden. Nach Netzausfall hingegen werden alle projektierten Verbindungen neu aufgebaut, so dass sich der Verbindungszustand ändert. Beim Erstaufruf von der Anweisung im oder nach dem Anlauf sind die Verbindungsinformationen also unterschiedlich, je nachdem, ob der letzte Betriebszustand der CPU STOP oder NETZAUS war. |
Arbeitsweise
Die Anweisung "C_DIAG" ist eine asynchron arbeitende Anweisung, d. h. die Bearbeitung kann sich über mehrere Aufrufe erstrecken.
Sie starten den Auftrag, indem Sie "C_DIAG" mit REQ=1 aufrufen.
Falls der Auftrag sofort ausgeführt werden konnte, liefert die Anweisung am Ausgangsparameter BUSY den Wert "0" zurück. Falls BUSY den Wert "1" hat, ist der Auftrag noch in Bearbeitung.
Aufruf
Um den Ausfall von S7-Verbindungen und hochverfügbaren S7-Verbindungen zu erkennen, rufen Sie "C_DIAG" in einem Weckalarm-OB auf, der z. B. alle 10 Sekunden vom Betriebssystem gestartet wird.
Da sich der Zustand einer Verbindung im Normalfall nur selten ändert, ist es bei diesen zyklischen Aufrufen sinnvoll, dass die Verbindungsdaten nur dann in das Anwenderprogramm kopiert werden, wenn sie sich gegenüber dem letzten Aufruf geändert haben (Aufruf mit MODE=B#16#02, siehe unten).
Die Anweisung "C_DIAG" hat vier mögliche Betriebsarten, die in der folgenden Tabelle erläutert werden.
|
MODE (B#16#...) |
"C_DIAG" kopiert Verbindungsdaten ins Anwenderprogramm |
"C_DIAG" übergibt Quittierungsinfo an das Betriebssystem |
|---|---|---|
|
00 |
Nein |
Ja |
|
01 |
Ja |
Ja |
|
02 |
|
Ja |
|
03 |
Ja |
Nein |
Durch die Übergabe der Quittierungsinformation an das Betriebssystem werden die seit dem letzten Aufruf von "C_DIAG" (mit MODE=B#16#00, 01 oder 02) aufgetretenen Zustandsänderungen der Verbindungsdaten quittiert.
|
Hinweis Wenn Sie "C_DIAG" in einem Weckalarm-OB in der Betriebsart "Bedingtes Kopieren" (MODE=B#16#02) betreiben, müssen Sie dafür sorgen, dass nach einem Kaltstart der CPU im Zielbereich keine Initialwerte stehen. Dies erreichen Sie, indem Sie im OB 102 "C_DIAG" mit der Betriebsart "Unbedingtes Kopieren mit Quittierung" (MODE=B#16#01) einmal aufrufen. |
Parameter
Die folgende Tabelle zeigt die Parameter der Anweisung "C_DIAG":
|
Parameter |
Deklaration |
Datentyp |
Speicherbereich |
Beschreibung |
|---|---|---|---|---|
|
REQ |
Input |
BOOL |
E, A, M, D, L |
Steuerparameter request to activate REQ=1: Anstoß des Auftrags, falls noch nicht gestartet |
|
MODE |
Input |
BYTE |
E, A, M, D, L oder Konstante |
Auftragskennung Mögliche Werte:
|
|
RET_VAL |
Return |
INT |
E, A, M, D, L |
Rückgabewert (Fehlercode bzw. Auftragszustand) |
|
BUSY |
Output |
BOOL |
E, A, M, D, L |
BUSY=1: Der Auftrag ist noch nicht beendet. |
|
N_CON |
Output |
INT |
E, A, M, D, L |
Index der letzten Struktur in CON_ARR, bei der .DIS_PCON oder .DIS_CON den Wert TRUE haben. Im Anwenderprogramm brauchen also nur die ersten N_CON Elemente von CON_ARR überprüft werden. Hinweis: Die erste Struktur im Feld CON_ARR hat den Index "1". |
|
CON_ARR |
Output |
ANY |
E, A, M, D, L |
Zielbereich für die gelesenen Verbindungsdaten. Es ist nur der Datentyp BYTE zulässig. Jeder Verbindung ist eine Struktur zugeordnet. Wählen Sie den Zielbereich so groß, dass er auch bei der maximal möglichen Verbindungsanzahl Ihrer CPU alle Strukturen aufnehmen kann. Beachten Sie dies insbesondere nach dem Austausch einer CPU, wenn die neue CPU mehr Verbindungsressourcen hat als die bisherige. |
Weitere Informationen zu den gültigen Datentypen finden Sie unter "Übersicht über die gültigen Datentypen".
Parameter CON_ARR
Der Zielbereich für die gelesenen Verbindungsdaten ist ein Feld von Strukturen. Dabei ist jeder Verbindung eine Struktur zugeordnet.
Das Feld braucht nicht von vorne her mit gültigen Einträgen belegt zu sein, und zwischen zwei gültigen Einträgen können ungültige Einträge stehen.
Die Verbindungen sind nicht nach Verbindungsreferenzen geordnet.
|
Hinweis Beim Kopieren der Verbindungsdaten aus dem Betriebssystem in den von Ihnen vorgegebenen Zielbereich wird die Konsistenz für die Daten einer Verbindung gewährleistet. |
Aufbau einer Struktur
|
Parameter |
Datentyp |
Beschreibung |
|---|---|---|
|
CON_ID |
WORD |
Verbindungsreferenz, die Sie per Projektierung für diese Verbindung vergeben haben W#16#FFFF: ungültige Kennung, d. h. Verbindung nicht projektiert. Falls zusätzlich CON_ARR[i].DIS_PCON oder CON_ARR[i].DIS_CON (siehe unten) gesetzt ist, wurde diese Verbindung seit dem letzten Aufruf von "C_DIAG" umprojektiert oder gelöscht. |
|
STAT_CON |
BYTE |
Aktueller Zustand der S7-Verbindung bzw. hochverfügbaren S7-Verbindung Mögliche Werte:
|
|
PROD_CON |
BYTE |
Teilverbindungs-Nr. der Produktivverbindung Mögliche Werte: 0, 1, 2, 3 |
|
STBY_CON |
BYTE |
Teilverbindungs-Nr. der Standbyverbindung (B#16#FF: keine Standbyverbindung) Mögliche Werte: 0, 1, 2, 3 Hinweis: Nur eine hochverfügbare S7-Verbindung kann eine Standbyverbindung haben. |
|
DIS_PCON |
BOOL |
Die Übergänge W#16#12 -> W#16#13 und W#16#13 -> W#16#12 von CON_ARR[i].STAT_CON seit dem letzten Anweisungs-Aufruf setzen CON_ARR[i].DIS_PCON auf "1". Alle anderen Zustandsänderungen der Verbindung i lassen CON_ARR[i].DIS_PCON unverändert. Hinweis:
|
|
DIS_CON |
BOOL |
Jede Änderung von CON_ARR[i].STAT_CON seit dem letzten "C_DIAG"-Aufruf mit Ausnahme der Übergänge W#16#12 -> W#16#13 und W#16#13 -> W#16#12 setzt CON_ARR[i].DIS_CON auf 1. Hinweis:
|
|
RES0 |
BYTE |
reserviert (B#16#00) |
|
RES1 |
BYTE |
reserviert (B#16#00) |
Parameter RET_VAL
|
Fehlercode |
Erläuterung |
|---|---|
|
0000 |
|
|
0001 |
|
|
7000 |
Erstaufruf mit REQ=0. |
|
7001 |
Erstaufruf mit REQ=1. |
|
7002 |
Zwischenaufruf (REQ irrelevant). Der aktivierte Auftrag läuft noch. BUSY hat den Wert "1". |
|
8080 |
Der Parameter MODE enthält einen unzulässigen Wert. |
|
8081 |
Der Parameter CON_ARR enthält einen unzulässigen Datentyp. |
|
8082 |
Der Parameter CON_ARR enthält eine zu kleine Längenangabe. Die Anweisung kopiert keine Daten in den Zielbereich. |
|
8xyy |
allgemeine Fehlerinformation Siehe auch: Fehlerauswertung mit dem Ausgangsparameter RET_VAL |