READ_SI: Dynamisch belegte Systemressourcen auslesen (S7-300, 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
READ_SI: Dynamisch belegte Systemressourcen auslesen

Entstehung dynamisch belegter Systemressourcen bei der Meldungserzeugung mit den Anweisungen "ALARM_DQ" und "ALARM_D"

Bei der Meldungserzeugung mit "ALARM_DQ" und "ALARM_D" belegt das Betriebssystem temporär Speicherplatz im Systemspeicher.

Wenn Sie z. B. einen in der CPU vorhandenen FB mit "ALARM_DQ" - oder "ALARM_D" -Aufrufen löschen, kann es vorkommen, dass die zugehörigen Systemressourcen dauerhaft belegt bleiben. Wenn Sie den FB mit "ALARM_DQ"- oder "ALARM_D" -Aufrufen erneut laden, kann es vorkommen, dass die Anweisungen "ALARM_DQ" und "ALARM_D" nicht mehr ordnungsgemäß bearbeitet werden.

Beschreibung

Mit der Anweisung "READ_SI" können Sie momentan verwendete Systemressourcen auslesen, die bei der Meldungserzeugung mit "ALARM_DQ" und "ALARM_D" belegt wurden. Dies geschieht über die dort verwendeten Werte von EV_ID und CMP_ID. Diese werden der Anweisung "READ_SI" im Parameter SI_ID übergeben.

Die Anweisung "READ_SI" hat 4 mögliche Betriebsarten, die in der folgenden Tabelle erläutert werden. Die gewünschte Betriebsart stellen Sie über den Parameter MODE ein.

MODE

Welche der von "ALARM_DQ" / "ALARM_D"belegten Systemressourcen werden ausgelesen?

1

Alle (Aufruf von "READ_SI" erfolgt mit SI_ID:=0)

2

Diejenige Systemressource, die beim "ALARM_DQ" / "ALARM_D"-Aufruf mit EV_ID:=ev_id belegt wurde (Aufruf von READ_SI erfolgt mit SI_ID:=ev_id)

3

Alle Systemressourcen, die beim "ALARM_DQ" / "ALARM_D"-Aufruf mit CMP_ID:=cmp_id belegt wurden (Aufruf von READ_SI erfolgt mit SI_ID:=cmp_id)

0

Weitere Systemressourcen, die beim vorherigen Aufruf mit MODE=1 oder MODE=3 nicht ausgelesen werden konnten, weil Sie das Zielfeld SYS_INST zu klein gewählt hatten

Arbeitsweise

Wenn Sie beim Aufruf von READ_SI mit MODE=1 oder MODE=3 den Zielbereich SYS_INST ausreichend groß gewählt haben, enthält er nach dem Aufruf den Inhalt aller über den Parameter MODE ausgewählten Systemressourcen, die aktuell belegt sind.

Falls aktuell sehr viele Systemressourcen belegt sind, ist die Laufzeit entsprechend hoch. Bei hoher Auslastung Ihrer CPU kann dann die projektierte maximale Zyklusüberwachungszeit überschritten werden.

Dieses Laufzeitproblem können Sie wie folgt umgehen: Sie wählen den Zielbereich SYS_INST relativ klein. Falls die Anweisung nicht alle auszulesenden Systemressourcen in SYS_INST eintragen kann, wird Ihnen dies über RET_VAL=W#16#0001 mitgeteilt. Dann rufen Sie READ_SI mit MODE=0 und gleicher SI_ID wie beim vorherigen Aufruf so lange auf, bis RET_VAL den Wert W#16#0000 annimmt.

Hinweis

Da das Betriebssystem keine Koordinierung der zu einem Leseauftrag gehörenden READ_SI-Aufrufe vornimmt, sollten Sie alle READ_SI-Aufrufe in ein und derselben Prioritätsklasse durchführen.

Parameter

Die folgende Tabelle zeigt die Parameter der Anweisung "READ_SI":

Parameter

Deklaration

Datentyp

Speicherbereich

Beschreibung

MODE

Input

INT

E, A, M, D, L oder Konstante

Auftragskennung

Zulässige Werte:

  • 1: Alle Systemressourcen lesen

  • 2: Diejenige Systemressource lesen, die beim "ALARM_DQ"-/ "ALARM_D"-Aufruf mit EV_ID = ev_id belegt wurde

  • 3: Diejenigen Systemressourcen lesen, die beim "ALARM_DQ"- / "ALARM_D" -Aufruf mit CMP_ID = cmp_id belegt wurden

  • 0: Folgeaufruf

SI_ID

Input

DWORD

E, A, M, D, L oder Konstante

Kennung für die auszulesende(n) Systemressource(n)

Zulässige Werte:

  • 0, falls MODE=1

  • Meldungsnummer ev_id, falls MODE=2

  • Kennung cmp_id zur Identifikation des Teilsystems, falls MODE=3

RET_VAL

Return

INT

E, A, M, D, L

Rückgabewert (Fehlerinformation bzw. Auftragszustand)

N_SI

Output

INT

E, A, M, D, L

Anzahl der in SYS_INT ausgegebenen Systemressourcen

SYS_INST

Output

ANY

D

Zielbereich für die gelesenen Systemressourcen

Weitere Informationen zu den gültigen Datentypen finden Sie unter "Übersicht über die gültigen Datentypen".

Parameter RET_VAL

Fehlercode

(W#16#...)

Erläuterung

0000

Es ist kein Fehler aufgetreten.

0001

Es konnten nicht alle Systemressourcen gelesen werden, da Sie den Zielbereich SYS_INST zu kurz gewählt haben.

8081

(nur bei MODE=2 oder 3) Sie haben SI_ID den Wert 0 zugewiesen.

8082

(nur bei MODE=1) Sie haben SI_ID einen von 0 verschiedenen Wert zugewiesen.

8083

(nur bei MODE=0) Sie haben SI_ID einen anderen Wert zugewiesen als beim vorangegangenen Aufruf mit MODE=1 oder 3.

8084

Sie haben MODE einen unzulässigen Wert zugewiesen.

8085

READ_SI wird bereits in einem anderen OB bearbeitet.

8086

Der Zielbereich SYS_INST ist zu klein für eine Systemressource.

8087 oder 8092

Der Zielbereich SYS_INST liegt nicht in einem DB oder Fehler im ANY-Pointer.

8xyy

allgemeine Fehlerinformation

Siehe auch: ALARM_D: Stets quittierte PLC-Meldungen erzeugen 

Parameter Zielbereich SYS_INST - Aufbau

Der Zielbereich für die gelesenen belegten Systemressourcen muss in einem DB liegen. Sinnvollerweise definieren Sie den Zielbereich als Feld von Strukturen, wobei eine Struktur wie folgt aufgebaut ist:

Strukturelement

Datentyp

Beschreibung

SFC_NO

WORD

Nr. der Anweisung, die die Systemressource belegt hat

LEN

BYTE

Länge der Struktur in Bytes, inkl. SFC_NO und LEN: B#16#0C

SIG_STAT

BOOL

Signalzustand

ACK_STAT

BOOL

Quittierungszustand des kommenden Ereignisses (steigende Flanke)

EV_ID

DWORD

Meldungsnummer

CMP_ID

DWORD

Kennung zur Identifikation des Teilsystems