Echtzeiterweiterung Windows als RTOS

Viele in Consumer-Geräten angewandte Verfahren werden anfänglich für nicht industrietauglich oder zumindest als dort weniger geeignet eingeschätzt. Nach einiger Zeit, wenn die immens hohen Stückzahlen für weite Verbreitung gesorgt haben, halten sie doch noch Einzug in industrielle Anwendungen. Das gilt für Kommunikationssysteme und PC-Technik, aber auch für Betriebssysteme wie Windows.

Die Gründe sind vor allem darin zu suchen, dass aufgrund der hohen Stückzahlen die Produktion sehr kostengünstig und das Know-how der Technologie breit verfügbar ist. Nach einiger Reife erfüllt die Technik trotz der in der Regel strengen Anforderungen seitens der Industrie dennoch die Kriterien für entsprechende Anwendungen. So ist es nicht nur beispielsweise Ethernet als Kommunikationstechnik ergangen, das noch in den 90er Jahren des vergangenen Jahrhunderts als für industrielle Kommunikation, bei der oftmals Echtzeit gefordert wird, gänzlich ungeeignet erschien. Im Gegensatz dazu gibt es heute bereits über 20 verschiedene Ethernet-basierte Automatisierungsprotokolle. Es ist aus der Automatisierung nicht mehr wegzudenken.

Ein weiteres Beispiel für späteren Ruhm ist die Verwendung der PC-Technik im Allgemeinen und Windows als Betriebssystem im Besonderen im Rahmen von industriellen Applikationen. Dabei ist die Einschätzung, ob Windows überhaupt für Echtzeitaufgaben geeignet sei, sehr unterschiedlich. Einerseits sind die aktuellen PC-Prozessoren so leistungsfähig, dass man meinen könnte, Windows selbst würde schon Aufgaben in Echtzeit bearbeiten können, was aber allenfalls als »Schön-Wetter-Echtzeit« zu bezeichnen wäre, denn der Begriff schließt bekanntlich alle Situationen ein, auch und gerade die unerwünschten.

Allgemein anerkannt ist daher, dass man selbstverständlich eine spezielle Echtzeiterweiterung benötigt, um unter Windows zeitkritische industrielle Anwendungen realisieren zu können. Andererseits hält sich bis heute eine generelle Skepsis, ob denn selbst eine Kombination aus Windows als Standardbetriebssystem und einem Echtzeit-Unterbau ausreichend sei. Dies kann - und das untermauern auch die seit vielen Jahren realisierten Lösungen auf dieser Basis - heute als erwiesen angesehen werden. Windows-basierte Echtzeitlösungen sind in vielfältigen Anwendungen im Einsatz und bieten eine Leistungsfähigkeit, die auch komplexe Aufgaben zu lösen gestattet.

Windows mit niedriger Priorität

Wie funktioniert nun eine Echtzeiterweiterung für Windows? Grundsätzlich sind hierbei mehrere Ziele zu erfüllen: Einerseits muss es eine Echtzeit-Umgebung geben, welche die zugrunde liegende Hardware direkt anspricht, um die geforderten Eigenschaften für zeitkritische Aufgaben zu erreichen. Andererseits sollte der normale Betrieb von Windows nicht beeinflusst werden. Ausnahmen sind in der Regel nur kurzzeitig zulässig.

Bei der »RealTime Suite« von Kithara wird ein Echtzeit-Multitasking-System errichtet, das Windows selbst als eine sehr niedrig priorisierte Task auffasst. Die Behandlung der zeitkritischen Interrupts von Timern und industriespezifischen Kommunikationskarten wird direkt an der Interrupt-Controller-Hardware vorgenommen. Nur die Absicherung der höchsten Systempriorität gewährleistet die geforderte Echtzeitfähigkeit.

Um dem Anwender diese Zusicherung weiterzugeben, ist kein eigenständiges RTOS (Real-Time Operating System) aufzusetzen. Stattdessen hat er die Möglichkeit, seinen zeitkritischen und hardwarenahen Programmcode in Form einer speziellen DLL in den Echtzeitkontext zu verlagern. Der Vorteil besteht darin, dass er die gewohnte Entwicklungsumgebung und Programmiersprache weiterhin verwenden kann und sich dadurch der Einarbeitungsaufwand in Grenzen hält. Bedingung ist, dass der verwendete Compiler nativen Maschinencode erzeugen muss. Dies gilt für verschiedene Entwicklungssysteme für C/C++ sowie die »Delphi«-Entwicklungsumgebung.

Damit stellt sich unmittelbar die Frage, wie die .NET-Umgebung und damit beispielsweise die Sprache C# ebenfalls eine Basis für industrielle Anwendungen sein kann. Grundsätzlich steht auch eine Anbindung für C# bereit, sodass sämtliche Ressourcen der industriellen Applikation auch dort verwaltet werden können.

Die zeitkritischen und hardwarenahen Teile lassen sich zum Beispiel in C++ programmieren und in eine DLL auslagern, die dann das Echtzeitsystem direkt auf die Kernel-Ebene lädt.

Im Ergebnis ist auch unter Windows ein Echtzeit-Multitasking realisierbar, wie man dies von einem »echten« RTOS erwartet.

Es stehen insgesamt 255 Prioritätsstufen zur Verfügung.

Die für industrielle Anwendungen unbedingt erforderliche Vorhersagbarkeit der Abläufe wird durch eine Prioritätsvererbung erreicht, beispielsweise um Prioritätsinversionen zu vermeiden.

Die Prioritäten der Tasks lassen sich auch dynamisch anpassen. Es stehen Semaphore und Events zur Synchronisation der Tasks bereit.

Systematische Anbindung

Die Kommunikation des Echtzeitteils mit der übrigen Anwendung ist einfach und direkt möglich, da die RealTime Suite als Funktions-bibliothek einen Bruch zwischen den verschiedenen Welten vermeidet. Für den direkten, gemeinsamen Zugriff stehen Shared-Memory-Datenbereiche von jeweils bis zu zirka 60 MByte zur Verfügung. Daten-Pipes und Mail-Slots mit der gleichen maximalen Größe dienen der vereinfachten Kommunikation, bei der die Zugriffe der beiden Seiten gegeneinander automatisch abgesichert sind und sich der Programmierer daher nicht mehr um die Synchronisation eventuell konkurrierender Zugriffe kümmern muss.

Mittels Event-Objekten lassen sich Anwendungs-Threads in bestimmten Situationen aufwecken. Das in den meisten Fällen angestrebte Ziel besteht letztlich sicher darin, externe Hardware von der Echtzeitumgebung aus auf verschiedene Weise anzusprechen. Hierzu stehen zunächst sämtliche üblichen Basismechanismen zur Verfügung, um I/O-Register und physischen Speicher anzusprechen und Interrupt-Anforderungen von PCI- oder PCI-Express-Karten oder auch ISA-Baugruppen zu bearbeiten. Weiterhin existieren Funktionen für die einfache Benutzung von Kommunikationsschnittstellen (zum Beispiel serielle COM-Ports oder USB-Devices). Des Weiteren werden CAN-Schnittstellenkarten verschiedener Hersteller mit einem allgemeingültigen API mit Echtzeit-Treibern unterstützt.

Verschiedene Feldbusse (z.B. Profibus) erhalten eine eigene DP-Master-Implementierung. Da künftige Automatisierungsverfahren immer häufiger auf Ethernet als Basis aufsetzen, stehen echtzeitfähige Netzwerktreiber für die verbreiteten Controller von Intel und RealTek bis zu Gigabit-Raten bereit. Auf der Basis dieser speziell entwickelten, auf hohe Effizienz und niedrige Latenzzeiten ausgelegten Treiber kann Ethernet auch in Echtzeitanwendungen als Kommunikationsstandard dienen.

Dies ist nicht nur für anwendungsspezifische Protokolle verwendbar, sondern ermöglicht beispielsweise auch Echtzeit-TCP und -UDP. Ganz allgemein zeigt sich »Industrial Ethernet« als der große Trend: Nahezu alle bedeutenden herkömmlichen Feldbusse liegen inzwischen in einer an Ethernet als Transportschicht angepassten Variante auch als Industrial-Ethernet vor. Zu den bekanntesten gehören das von Profibus abgeleitete Profinet, das an CANopen angelehnte EtherCAT, die vorwiegend im amerikanischen beziehungsweise asiatischen Raum bevorzugten Ethernet/IP und Modbus/TCP als Nachfolger von DeviceNet beziehungsweise Modbus sowie ferner PowerLink oder Sercos III.