Forum: PC-Programmierung Java und Parallel-Port Antwortzeiten


von Michael d. (Gast)


Lesenswert?

Moin,

kennt sich hier jemand mit Java und Parallel-Ports unter WinNT/2k aus?

An die Hardware kommt man ja über JNI und DLLs ran.

Aber: ich habe hier eine Anwendung, bei der auf eine Veränderung am
Parallelport (beim einlesen, da hängen Sensoren dran) innerhalb von
50ms ein Ereignis ausgelöst werden muss. Kann das funktionieren?

Mir ist schon klar, dass Java keine Echtzeitkriterien erfüllen kann
(Windows ja auch nicht) aber 50ms sollten doch machbar sein?
Oder gibt es mit der Garbage-Collection zwangsweise Probleme?

Viele Grüße,
Michael

von Matthias (Gast)


Lesenswert?

Hi

wie du schon selber bemerkt hast: Windows ist kein RT OS. Es besteht
also durchaus die Möglichkeit das deinem Java Programm (bzw. der Java
VM) für mehr als 50ms der Prozessor entzogen wird. 50ms würde ich sogar
für nicht sehr unwahrscheinlich halten.

Matthias

von Michael d. (Gast)


Lesenswert?

Wie sieht es im Vergleich Java - Visual C aus?

Liegen die Probleme am OS und sind von der Programmiersprache
unabhängig, oder schneidet Java (z.B. wegen VM und Garbage Collection)
schlechter ab als C?

Also unter DR-DOS klappt das mit dem 50ms, und DOS ist nun ja auch
nicht besonders RT geeingnet. Nun muss aber eine Windowsanwendung
her...

MfG,
Michale

von Matthias (Gast)


Lesenswert?

Hi

DOS ist nicht RT geeignet? Wer erzählt den sowas. Unter DOS gehört dir
der Prozessor ganz alleine. Antwortzeiten im Bereich einiger µs sollten
unter DOS überhaupt kein Problem sein.

Unter Windows kann dir der Scheduler aber einfach so den Prozessor
entziehen. Du kannst zwar die Priorität deines Prozesses hochdrehen
aber ob das soweit geht das man die 50ms garantieren kann weiß ich
leider nicht. Multi-Processing und Echtzeit beißen sich halt. Ohne
speziell dafür optimierten Scheduler kann man Antwortzeiten nicht
garantieren.

C/C++ dürfte sich etwas besser eignen da da nicht noch eine Schicht
zwischen Prozessor und Anwendung liegt.

Matthias

von Noyas (Gast)


Lesenswert?

Schreibt doch bitte nicht solch ein Blech, Michael, schau dir bitte mal
das javax.comm package an, gibt's bei java.sun.com, damit kannst du
Inputstreams auslesen, schau's dir einfach mal an...

von Matthias (Gast)


Lesenswert?

Hi

wer hat den bezweifelt das es nicht geht eine Par/Ser. Port mit Java
auszulesen. Es garantiert nur niemand 50ms Antwortzeit.

Matthias

von Hans (Gast)


Lesenswert?

tjo so richtig garantieren lann das kein os... es sei denn es ist ein
rtos das time slicing macht ;)

unter win sollten eigentlich 50ms bei recht hoher thread priorität
eigentlich drinnen sein... hängt aber von der prozessorlast ab...

73 de oe6jwf / hans

von Noyas (Gast)


Lesenswert?

Hey,
war je net so bös gemeint. Schaut euch mal die "jnpout32.dll" an
(google). Hab damit nen Mini-Weihnachtsbaum über den LPT-Port zum
Leutchen gebracht, basiert letzendlich auf JNI (sry, javax.comm is net
geeignet gewesen) bzw. der WinAPI.
Und 50ms sind da gar kein Thema...

Gruß

von Michael (Gast)


Lesenswert?

Hi Leute, Hallo Namensvetter

50ms sind mit Windows (95) eigentlich schon machbar, jedenfalls kann
man damit Servos steuern. Die wollen alle 20ms für ein paar ms einen
Impuls... OK, unter Windows ruckelts ein bisschen, aber es geht - und
zwar sogar im interpretierten QBasic-Modus - OK, ist nicht ganz
Java...

Gruss

Michael

von thomas (Gast)


Lesenswert?

Dass es mit Win95 klappt ist gut möglich da Win95 auch auf MS-DOS
basiert bzw. dies als Grundlage benutzt.
Bei den neueren Windows Versionen 2000 & XP kann es klappen, muss es
aber nicht unbedingt.

von Roman (Gast)


Lesenswert?

Also, ich beutze die JAVA communications API zum Zugriff auf
Schnittstellen, und kann die auch empfehlen. Nun aber was neues:
System.currenttimemillis() liefert die Zeit (nach meinen Experimenten)
mit einer Auflösung von etwa 10ms, Thread.sleep [garantiert] dir eine
feinere Auflösung. Man sollte halt nur das JAVA-Programm am laufen
haben und nicht nebenbei 10000 Stellen von PI berechnen...

von Rufus T. Firefly (Gast)


Lesenswert?

Die 10 ms von Roman sind die übliche Schedulergranularität der
ernstgemeinten Windows-Versionen. Die kann übrigens mit einer der
"multimedia-Timer"-Funktionen* auf 1 ms herabgesetzt werden - es
entzieht sich allerdings gänzlich meiner Kenntnis, wie man das aus
einer Java-Anwendung heraus macht.


*) timeBeginPeriod, deklariert in mmsystem.h

von T.Stütz (Gast)


Lesenswert?

Es ist vielleicht sinnvoller den zeitkritischen Zugriff in einen
(Kernel-)Treiber zu packen.
Achtung nur für Fortgeschrittene Programmierer, nicht für ungeübte
geeignet. Dort sind dann sehr schnelle Antwortzeiten möglich.

Gruss

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.