Real-Time Data Access

Revision 2.0 Proposal

7. Java Forum

Stuttgart

Dr.-Ing. James J. Hunt

1. Juli 2004

IST-2001-32329

Siemens

Das Problem

Echtzeitsysteme reagieren auf Ereignisse aus der Welt.

Benötigen Sensoreneingaben aus der Umgebung

Erzeugen Ausgabe oft als automatische Aktionen

Sowohl Eingabe als auch Ausgabe im kritischen Kontrollfluss

Aktuelle Optionen für I/O in Java oft unzureichend

Serielle Schnittstelle (javax.com) zu begrenzt

JNI ist langsam und nicht portabel

Funktionalität der RTSJ ist zu unstrukturiert

Real-Time Specification for Java

Definition eines Ereignisses eher an das Konzept von POSIX-Signalen als von Hardware-Interrupts angelehnt

Zuordnung zwischen Ereignissen und Interrupts einer Maschine ist undefiniert (implementierungsabhängig)

Keine Konzept eines Gerätes

RawMemory

erlaubt beliebige Zugriffe auf einen Bereich im Hauptspeicher

Nicht typsicher

Die Lösung:
Real-Time Data Access

Neue API für Gerätesteuerung in Java:

Beschreiben

Konfigurieren

Zugreifen

Basiert auf Erfahrung bei Siemens mit Industrie-Automatisierung

Die Register eines Geräts im Java-Objekte abbilden

Ein Interrupt mit einem bestimmten Gerät verknüpfen

RTDA Ziele

Typsichere, effiziente Gerätezugriff

Nahtlose Integration externen Ereignisse

Unterstützung einer breiten Palette von Gerätetypen

Wiederverwendbare Gerätebeschreibungen

Einsetzbar für normale und zeitkritische Systeme

Entwicklung auf einem normalen PC möglich

Unterstützung für Echtzeit-Java Erweiterungen

Skalierbarkeit und Wartbarkeit

Eigenschaften

Typisierter, beschränkter Zugriff auf Geräteregister

Im Hauptspeicher

Im I/O-Adressbereich

Pfad-basierte Geräte-Verwaltung und -Benennung

Eine reiche Menge Gerätezugriffsmethoden

implizite vs. explizite

Abfrage vs. Ereignissteuerung

Automatische Datenübertragung

Überblick

Basispaket für pure Datenzugriffsfunktionalität

Gerätebeschreibung

Gerätekonfiguration

I/O-Kontext

I/O-Stellvertreter

Brückenschnittstelle: events, handlers, memory

Autonomes Paket für minimale Echzeitsysteme

Thread

Memory

Time

Gerätebeschreibung

Flache attributbasierte Gerätebeschreibung

Elemente

Attribute

Werte

Array-basierte C-API für statisches Binden

Flexible Abbildung zwischen Register-Bits und Java-Typen

Dynamisches Laden von Gerätebeschreibungen ist auch möglich

I/O Node Klassenhierarchie

I/O Context Klassenhierarchie

I/O Proxy Klassenhierarchie

I/O Proxy Transaktionen

Ereignisse Klassenhierarchie

Gerätsteuerung

Emulation

Java Application (RT)

Facade I/O Proxy

“interruptCount”

Cache

Void interruptNotification()

{

icount++;

interruptCount.buffer(count);

...

}

Simulierte Daten

Java Application (nonRT)

File

System

SW Proxy

IOAdapter

Ferndatenzugriff

Java Application (nonRT)

Java Application (RT)

SW Proxy

IOMemoryMapped

SW Proxy

IOAdapter

Beispiel: Einfaches Gerät

Boolesche Register

Name:	inBit

Type:	IOChannel

Class:	IOBooleanReadOnly

Offset:	0x0

Slices:	0x20

Mode:	0x201 (IOMemoryMapped, Data Width = 1)

Interrupt

Name:	alarm

Type:	Interrupt

Class:	InterruptEvent

Beispiel: Initialisierung

IOEventHandler definieren

„I/O Node“-Baum erzeugen

InterruptContext instanziieren

InterruptEvent instanziieren

IOBooleanReadOnly instanziieren

InterruptContext registrieren

InterruptEvent aktivieren

Ausblick

JamaicaVM™ basierte Implementierung

In Arbeit

Mit RTSJ-API gekoppelt

Mögliche Erweiterungen des RTDA

XML-basierte Initialisierung

Einfaches Instanziieren eines Gerätes

Dynamische Geräteanbindung durch Abtasten des Buses (bus probing)

Zusammenfassung

Ermöglicht Plattformunabhängige I/O-Geräte-Programmierung auf Benutzerebene

Vereinfacht Einbindung maßgeschneiderte Geräte in einer Java-Anwendung

Bietet flexiblen Gerätezugriff an

Ergänzt RTSJ-Echtzeitschnittstelle

Erweitert Anwendungsdomäne des Echtzeit-Javas

RTDA 2.0

James Jeffers Hunt

2004-06-28T22:18:21

James J. Hunt