Skip to main content

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

  • SysShm

  • Synchronisationsprimitiven: SysEvent, SysSemProcess

  • Shared Memory ermöglicht paralleles Lesen/Schreiben ohne Kopieraufwand

  • Zugriffssynchronisation ist zwingend empfohlen, wie beispielsweise:

    • atomare Flags für Lese-/Schreibkoordination

    • Events oder Semaphoren für präzise Synchronisation

  • shm_open + mmap

  • shm_close

POSIX‑Semaphore (Synchronisationsmechanismen)

Steuert den Zugriff auf gemeinsame Ressourcen oder zur Ablaufsteuerung

  • SysEvent

  • SysSemProcess

Blockierender Code in der IEC-Applikation sollte nicht im zyklischen Betrieb und in zyklischen IEC Tasks große Wartezeiten erzeugen.

  • sem_open

  • sem_wait/sem_try_wait/sem_clockwait

  • sem_post

  • sem_close

Sockets (UDP, TCP, Unix Domain Sockets)

Tauscht Nachrichten stream‑ oder paketbasiert, entweder lokal oder hostübergreifend aus

  • Unix Domain Sockets bieten gegenüber TCP/UDP erhebliche Performancevorteile für lokale Kommunikation.

  • Netzwerk‑Sockets ermöglichen den Austausch über Gerätegrenzen hinweg.

  • socket

  • accept/bind/listen/connect

  • read/write

  • close

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.