Semaphoren

Semaphoren werden genutzt, um den Zugriff auf limitierte Ressourcen zu synchronisieren. Sie können auch genutzt werden um eine Benachrichtigung (Notification Event) zu realisieren. Semaphoren werden durch die TwinCAT Realtime durch die Klasse CSemaphoreInstance bereitgestellt.

CSemaphoreInstance

Die Klasse CSemaphoreInstance bietet die Schnittstelle an, um Semaphoren zu handhaben. Um eine Semaphore anzulegen, benötigt die Instanz die Objekt-ID der TwinCAT Realtime Instanz, welche über OID_TCRTIME_CTRL bereitsteht, sowie eine Referenz zu dem TwinCAT Objekt-Server über einen Pointer auf ITComObjectServer.

Methoden:

MAKE_RTOS_HRESULT(51)

Semaphoren Overflow. Beispielsweise wenn der interne Speicher nicht ausreicht.

RTIME_NOWAIT (-1)

Methode liefert sofort S_OK, wenn die Semaphore verfügbar ist.
Methode liefert ein Timeout, falls keine Ressource verfügbar ist.

RTIME_ENDLESSWAIT (0)

Methode wartet unendlich lange auf die Verfügbarkeit der Semamphore

Die Methode liefert S_OK, wenn den Semaphoren erfolgreich bezogen wurde; ansonsten:

MAKE_RTOS_HRESULT(10)

Zeigt einen Timeout an. Wenn nTimeout als RTIME_NOWAIT gesetzt wurde, ist diese Semaphore nicht verfügbar.

Beispiel:

Beispiel24: Semaphoren