Programmierung allgemeiner Standardfunktionen
7.20 Anwendung einiger Systemfunktionen
1. Alle Tasks signalisieren den Zugriff auf globale Variablen durch Setzen eines
2. Alle Tasks greifen auf globale Variablen nur bei freigegebenem Semaphore zu.
7.20.2.3
Beispiel: Konsistenter Datenzugriff mit Semaphoren
Das Beispiel in der Tabelle verdeutlicht den Gebrauch von Semaphoren in je einem
Programm, das Daten schreibt bzw. liest.
Tabelle 7- 19 Beispiel für die Sicherstellung eines konsistenten Zugriffs auf globale Variablen mit Hilfe von Semaphoren
IMPLEMENTATION
VAR_GLOBAL
myArray : ARRAY [0..1] OF DINT;
semaA : DINT;
END_VAR
PROGRAM Writer
// konsistentes Schreiben von Variablen
IF _testAndSetSemaphore(sema := semaA) THEN
myArray[0] := 18;
myArray[1] := 19;
_releaseSemaphore(sema := semaA);
// Das Semaphore muss im TRUE-Zweig der Abfrage
// freigegeben werden; hier ist sicher gestellt,
// dass es nur dann freigegeben wird, wenn es neu
// gesetzt wurde.
ELSE
; // Fehlerbehandlung
END_IF;
// _releaseSemaphore(sema := semaA);
// An dieser Stelle wäre die Freigabe falsch;
// das Semaphore würde immer freigegeben werden.
END_PROGRAM
PROGRAM Reader
VAR
var0
var1
END_VAR
// konsistentes Lesen von Variablen
IF _testAndSetSemaphore(sema := semaA) THEN
var0 := myArray[0];
var1 := myArray[1];
_releaseSemaphore(sema := semaA);
// Das Semaphore muss im TRUE-Zweig der Abfrage
// freigegeben werden; hier ist sicher gestellt,
// dass es nur dann freigegeben wird, wenn es neu
// gesetzt wurde.
ELSE
390
Semaphores.
: DINT;
: DINT;
Basisfunktionen
Funktionshandbuch, 05/2009