Interprozesskommunikation (IPC) unter Linux
Dieses Kapitel liefert einen Überblick über Mechanismen der Interprozesskommunikation (IPC) auf Linux-Systemen. Die beschriebenen Mechanismen gelten sowohl für die IPC zwischen allgemeinen Linux‑Prozessen als auch speziell für die IPC zwischen einem oder mehreren CODESYS Control SL‑Laufzeitsystemen und anderen Prozessen.
Diese im Folgenden aufgelisteten Mechanismen werden von den Linux‑basierten CODESYS‑Laufzeitsystemen über CODESYS‑Bibliotheken abstrahiert und zur Verfügung gestellt.
Mechanismus | Zweck | Relevante CODESYS-Bibliotheken | Hinweise | Typische Linux API |
|---|---|---|---|---|
Shared Memory | Prozesse tauschen gleichzeitig große Datenmengen aus |
|
|
|
POSIX‑Semaphore (Synchronisationsmechanismen) | Steuert den Zugriff auf gemeinsame Ressourcen oder zur Ablaufsteuerung |
| Blockierender Code in der IEC-Applikation sollte nicht im zyklischen Betrieb und in zyklischen IEC Tasks große Wartezeiten erzeugen. |
|
Sockets (UDP, TCP, Unix Domain Sockets) | Tauscht Nachrichten stream‑ oder paketbasiert, entweder lokal oder hostübergreifend aus |
|
|
|
Hinweise zur Verwendung
Technologie‑unabhängig:
Die IPC‑Mechanismen sind nicht an eine bestimmte Technologie gebunden. Die Technologien lassen sich frei kombinieren. Prozesse können in unterschiedlichen Sprachen oder Laufzeitumgebungen implementiert sein, beispielsweise:
native Binaries (C/C++)
Python-Skripte
Java‑Applikationen
IEC‑Code aus CODESYS
Modularisierung von IEC‑Applikationen verbessert die Wartbarkeit, Fehlertoleranz und Skalierbarkeit:
Auch für eine einzige große IEC‑Anwendung kann IPC sinnvoll sein, um sie in funktionale Einheiten zu zerlegen, beispielsweise:
Motion
Feldbus
Visualisierung
Datenaustausch/Export
Nutzen bei fehlenden nativen Schnittstellen:
IPC kann eingesetzt werden, wenn eine benötigte API nicht in der gewünschten Technologie verfügbar ist.
Beispiel: Eine Python‑Bibliothek enthält eine benötigte Funktionalität, kann aber nicht direkt in IEC genutzt werden → Kommunikation über Unix Sockets oder Shared Memory.