C_DIAG: Aktuellen Verbindungszustand ermitteln (S7-400) - STEP 7

Erweiterte Anweisungen (S7-300, S7-400)

ft:publication_title
Erweiterte Anweisungen (S7-300, S7-400)
Product
STEP 7
Version
V20
Publication date
11/2024
Language
de-DE
C_DIAG: Aktuellen Verbindungszustand ermitteln

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, falls sich Verbindungsdaten geändert haben

  • Nein, falls sich keine Verbindungsdaten geändert haben

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:

  • B#16#00: "C_DIAG" kopiert keine Verbindungsdaten, sondern übergibt dem Betriebssystem lediglich eine Quittierungsinformation.

  • B#16#01: "C_DIAG" kopiert die Verbindungsdaten unabhängig von deren Änderungszustand ins Anwenderprogramm und übergibt dem Betriebssystem eine Quittierungsinformation.

  • B#16#02: Falls sich die Verbindungsdaten geändert haben, kopiert "C_DIAG" diese ins Anwenderprogramm. Falls sie sich nicht geändert haben, erfolgt kein Kopiervorgang. "C_DIAG" übergibt dem Betriebssystem in beiden Fällen eine Quittierungsinformation.

  • B#16#03: "C_DIAG" kopiert die Verbindungsdaten unabhängig von deren Änderungszustand ins Anwenderprogramm. Sie übergibt dem Betriebssystem keine Quittierungsinformation.

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:

  • B#16#00: S7-Verbindung nicht aufgebaut

  • B#16#10: Hochverfügbare S7-Verbindung nicht aufgebaut

  • B#16#01: S7-Verbindung wird momentan aufgebaut

  • B#16#11: Hochverfügbare S7-Verbindung wird momentan aufgebaut

  • B#16#02: S7-Verbindung ist aufgebaut

  • B#16#12: Hochverfügbare S7-Verbindung ist aufgebaut, jedoch nicht hochverfügbar

  • B#16#13: Hochverfügbare S7-Verbindung ist aufgebaut und hochverfügbar

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:

  • Bei MODE=B#16#01 und 02 wird dasjenige Bit im Betriebssystem, das DIS_PCON entspricht, mit dem Kopieren der Verbindungsdaten in den Zielbereich rückgesetzt.

  • Bei MODE=B#16#03 bleibt dasjenige Bit im Betriebssystem, das DIS_PCON entspricht, unverändert.

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:

  • Bei MODE=B#16#01 und 02 wird dasjenige Bit im Betriebssystem, das "DIS_CON" entspricht, mit dem Kopieren der Verbindungsdaten in den Zielbereich rückgesetzt.

  • Bei MODE=B#16#03 bleibt dasjenige Bit im Betriebssystem, das "DIS_CON" entspricht, unverändert.

RES0

BYTE

reserviert (B#16#00)

RES1

BYTE

reserviert (B#16#00)

Parameter RET_VAL

Fehlercode
(W#16#...)

Erläuterung

0000

  • MODE=B#16#00, 01 oder 02: keine Änderung des Verbindungszustands (Strukturelement STAT_CON) seit dem letzten Aufruf. Der Auftrag wurde fehlerfrei durchgeführt.

  • MODE=B#16#03: Der Kopiervorgang wurde fehlerfrei durchgeführt.

0001

  • MODE=B#16#00, 01 oder 02: Änderung des Verbindungszustands (Strukturelement STAT_CON) bei mindestens einer Verbindung seit dem letzten Aufruf. Der Auftrag wurde fehlerfrei durchgeführt.

  • MODE=B#16#03: RET_VAL W#16#0001 ist nicht möglich:

7000

Erstaufruf mit REQ=0.
Der über MODE festgelegte Auftrag wird nicht bearbeitet. BUSY hat den Wert "0",

7001

Erstaufruf mit REQ=1.
Der über MODE festgelegte Auftrag wurde angestoßen. BUSY hat den Wert "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