Forum: PC-Programmierung Echtzeit App auf Windows


von Sina A. (sinapse)


Lesenswert?

hallo,

matlab hat es geschafft echtzeitprogramme auf windows laufen zu lassen. 
siehe http://de.mathworks.com/products/rtwt/. matlab spuckt also auf 
knopfdruck ein programm aus, das auf windows in echtzeit läuft?!? Ich 
dachte immer das geht nicht... das höchste der gefühle war ja bisher, 
dass man ein echtzeitbetriebssystem installiert und windows dann als 
task unter diesem läuft, was in der praxis immer mit vielen 
nebenwirkungen verbunden war. auf diese weise konnte man neben windows 
einen anderen task in echtzeit laufen lassen.

da aber matlab es hingekriegt hat, frage ich mich, wie man selber 
echtzeitprogramme fuer windows schreiben kann.  da muss doch windows 
irgendwie einen api-zugang zu dieser echtzeit-funktionalität bieten? 
weiss einer wonach ich suchen muss, um sowas selber zu proggen? 
(letztendlich glaub ich matlab das auch erst, wenn ich sehe, wie das in 
der theorie geht)

danke schonmal fuers lesen

lg

von Test (Gast)


Lesenswert?

Realtime != Realtime !!!

Zitat:
"Real-time performance approaching 1 kHz in normal execution mode
Real-time performance approaching 20 kHz in external execution mode 
(with Simulink Coder)"

von Rolf M. (rmagnus)


Lesenswert?

Test schrieb:
> Zitat:
> "Real-time performance approaching 1 kHz in normal execution mode
> Real-time performance approaching 20 kHz in external execution mode
> (with Simulink Coder)"

Wobei 1 kHz für Windows durchaus schon ziemlich viel ist.
Aber offenbar sind sich die Jungs von mathworks selbst nicht so ganz 
einig, was da geht:

▪ Real-time performance approaching 500 Hz in normal execution mode
▪ Real-time performance approaching 20 kHz in external execution mode 
(with Simulink Coder)
http://de.mathworks.com/products/datasheets/pdf/real-time-windows-target.pdf

Ich frage mich auch, ob das wirklich Echtzeit ist, also z.B. auch 
funktioniert, wenn der Speicher voll ist und der Rechner mit 
Auslagerungsorgien anfängt und dabei gleichzeitig eine fork-Bombe 
gestartet wird. Außerdem stört mich das Wort "approaching". Heißt das 
nun, daß die Software das definitiv kann, oder nur, daß man sich 
vorstellen könnte, daß es funktioniert?

von Borislav B. (boris_b)


Lesenswert?

Man kann unter Windows schon was mit Echtzeit machen. Ist nur ein 
bisschen tricky ;-)

Wir machen das so:
- Per Hypervisor ein paar Kerne der CPU abgreifen
- Dort ein Windows Embedded Compact 2013 (= RTOS) laufen lassen
- Teile der Anwendung in diesen Echtzeitteil verlagern
- Beide Teile dann nach Bedarf kommunzieren lassen

von Max M. (jens2001)


Lesenswert?

Boris P. schrieb:
> - Per Hypervisor ein paar Kerne der CPU abgreifen
> - Dort ein Windows Embedded Compact 2013 (= RTOS) laufen lassen
> - Teile der Anwendung in diesen Echtzeitteil verlagern
> - Beide Teile dann nach Bedarf kommunzieren lassen

Nur das bedeutet ja ebend das unter dem "normalen" Windows nichts 
realtime läuft!

von Rolf M. (rmagnus)


Lesenswert?

Ohne jetzt einen Streit Windows<->Linux losbrechen zu wollen, fand ich 
das in Linux besser gelöst. Ich habe dort mal mit xenomai gearbeitet. 
Das ist eine Echtzeiterweiterung, die im Kernel läuft. Da gibt's auch 
einen Echtzeitscheduler und einen darauf aufsetzenden Linux-Scheduler. 
Das tolle ist aber, dass man Echtzeit- und Linux-Tasks innerhalb eines 
gemeinsamen Prozesses haben kann. Und die Tasks können sogar nach Bedarf 
dynamisch zwischen non-Realtime- und Realtime-Modus wechseln.
Bei PREEMPT_RT geht man dann noch einen Schritt weiter und bietet 
Echtzeit ganz ohne separate Erweiterung an. Man kann einfach direkt die 
normalen Linux-Funktionen verwenden, um Echtzeit-Tasks zu erstellen. Das 
einzige, was man dazu gegenüber einen gewöhnlichen Desktop-Linux-System 
braucht, ist der Echtzeit-gepatchte Kernel, da noch nicht alle 
Funktionalitäten in den Standard-Kernel eingeflossen sind.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max Mustermann schrieb:
> Nur das bedeutet ja ebend das unter dem "normalen" Windows nichts
> realtime läuft!

Ohne entsprechende Kernelerweiterungen ist das korrekt.

Windows ist kein RT-OS, genauso, wie Linux auch kein RT-OS ist.

Für beide gibt es aber entsprechende Kernelerweiterungen, bei Windows 
sind diese natürlich kommerziell - wie z.B. http://www.kithara.de/de

von Georg (Gast)


Lesenswert?

Test schrieb:
> Realtime != Realtime !!!

Das was die anbieten ist meiner Meinung nach überhaupt nicht Realtime, 
denn Realtime bedeutet nicht schnell, sondern nur schnell genug, aber 
das eben garantiert. Unter Windows wird so etwas FAST immer 
funktionieren, aber nur fast. Garantieren kann man eine bestimmte 
Antwortszeit unter Windows nicht, nicht mal eine ganze Sekunde.

Georg

von Pandur S. (jetztnicht)


Lesenswert?

Was spricht eigentlich dagegen sich von Windows als Echtzeitrechner zu 
loesen und auf einen Controller auszulagern ?

Wenn man sich etwas mit einem Problem befasst hat muss man es nicht mehr 
in Matlab laufen lassen.

von Dumdi D. (dumdidum)


Lesenswert?

Boris P. schrieb:
> Man kann unter Windows schon was mit Echtzeit machen. Ist nur ein
> bisschen tricky ;-)
>
> Wir machen das so:
> - Per Hypervisor ein paar Kerne der CPU abgreifen
> - Dort ein Windows Embedded Compact 2013 (= RTOS) laufen lassen
> - Teile der Anwendung in diesen Echtzeitteil verlagern
> - Beide Teile dann nach Bedarf kommunzieren lassen

Welchen real time hypervisor kannst du empfehlen?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Auf einem PC (egal ob Windows oder Linux) will man bei solcherlei 
Anforderungen auch eine System haben das den SMM[1] nicht verwendet.

[1] http://de.wikipedia.org/wiki/System_Management_Mode

von Georg (Gast)


Lesenswert?

Jetzt Nicht schrieb:
> Wenn man sich etwas mit einem Problem befasst hat muss man es nicht mehr
> in Matlab laufen lassen

Wenn ich den Ansatz richtig verstehe, ist das dafür gedacht, ein System 
unter Windows halbwegs realistisch zu testen, da machen gelegentliche 
Aussetzer ja nichts, man weiss dass das unter Windows vorkommt. Ein 
Kernkraftwerk kann man so nicht betreiben, aber das war auch nicht die 
Idee. Was man auf dem PC getestet hat, kommt dann auf ein "echtes 
Echtzeitsystem".

Georg

von Rolf M. (rmagnus)


Lesenswert?

Μαtthias W. schrieb:
> Auf einem PC (egal ob Windows oder Linux) will man bei solcherlei
> Anforderungen auch eine System haben das den SMM[1] nicht verwendet.

Ja, der ist ärgerlich. Vor allem benutzen manche Hersteller den, um Bugs 
in der Hardware zu kaschieren.


Georg schrieb:
> Wenn ich den Ansatz richtig verstehe, ist das dafür gedacht, ein System
> unter Windows halbwegs realistisch zu testen, da machen gelegentliche
> Aussetzer ja nichts, man weiss dass das unter Windows vorkommt.

Das dann allerdings als Echtzeit zu verkaufen, finde ich etwas dreist.

von Sina A. (sinapse)


Lesenswert?

hmmm... fazit also?

Echtzeit ist auf PC möglich. Muss neben Windows ein weiteres RTOS laufen 
lassen (wie beim trick mit hypervisor).

Frage ist, ob matlab etwas dergleichen im hintergrund tut? das wird wohl 
nicht so leicht herauszufinden sein... denn egal wie matlab das 
umgesetzt hat, wird matlab immer von echtzeit reden.


Rufus Τ. Firefly schrieb:
> Windows ist kein RT-OS, genauso, wie Linux auch kein RT-OS ist.
>
> Für beide gibt es aber entsprechende Kernelerweiterungen, bei Windows
> sind diese natürlich kommerziell - wie z.B. http://www.kithara.de/de

wie hab ich mir die kernelerweiterung vorzustellen? wie soll man denn 
den kernel von windows erweitern können, da windows quasi black box? 
oder meint ihr, dass kithara da direkt mit microsoft zusammenarbeitet?

wie bereits gesagt, bin ich immer davon ausgegangen, dass tools wie 
kithara einen task haben, in dem dann windows laeuft.


Μαtthias W. schrieb:
> Auf einem PC (egal ob Windows oder Linux) will man bei solcherlei
> Anforderungen auch eine System haben das den SMM[1] nicht verwendet.

und sowas ist auch etwas, was mich immer wieder verunsichert.  oft liest 
man auch, dass diese PC-prozessoren an sich gar nicht fuer echtzeit 
ausgelegt sind und daher auch gar kein RTOS darauf laufen kann (so 
laufen, dass echtzeit garantiert wird).  problem ist nur... wer ist 
schon mit der ganzen architektur von den prozessoren vertraut, so dass 
dieser auch eine kompetente aussage dazu machen kann... man, man, man... 
wann ist das alles so kompliziert geworden ;)

von Peter II (Gast)


Lesenswert?

Sina Anargo schrieb:
> wie bereits gesagt, bin ich immer davon ausgegangen, dass tools wie
> kithara einen task haben, in dem dann windows laeuft.

man könnte ja einfach mal auf der Webseite lesen.

Dort steht, das sie alles im Kernel laufen lassen, also wie ein Treiber.

von Rolf M. (rmagnus)


Lesenswert?

Sina Anargo schrieb:
> und sowas ist auch etwas, was mich immer wieder verunsichert.  oft liest
> man auch, dass diese PC-prozessoren an sich gar nicht fuer echtzeit
> ausgelegt sind und daher auch gar kein RTOS darauf laufen kann (so
> laufen, dass echtzeit garantiert wird).

Naja, man kann nicht die selben Erwartungen, wie an einen µC haben. 
Viele glauben immer, da der PC ja im Vergleich irrsinnig schnell ist, 
daß auch Echtzeit da besonders gut drauf funktionieren muss, mit 
kürzesten Latenzzeiten und extrem kurzen Zykluszeiten. Das stimmt aber 
eben so nicht. Selbst ein AVR kann im Bezug darauf mit einem PC 
mithalten. Das liegt an verschiedenen Faktoren. Einer davon ist, daß der 
PC auf hohen Durchsatz ausgelegt ist und nicht auf geringe Latenz. Das 
heißt vereinfacht gesagt, er muss im normalen Betrieb eher selten auf 
ein Ereignis reagieren, aber dann jedesmal einen großen Block Daten auf 
einmal verarbeiten. Und genau darin ist der PC richtig gut.
Und dann gibt es da die leidigen nichtmaskierbaren Interrupts, die z.B. 
für's ACPI-Powermanagement verwendet werden und eben zum Teil auch, um 
im Hintergrund irgendwelche Work-Arounds für Bugs in der Hardware zu 
triggern. Diese sind wie der Name vermuten läßt nicht abschaltbar und 
können jederzeit dazwischenfunken. Wenn die ISR dann lange braucht, weil 
sie auf irgendwelche externe Hardware warten muss, ist der Prozessor so 
lange blockiert.
Und dann gibt's da natürlich noch die Peripherie, die ja nicht einfach 
wie beim µC direkt am Prozessor hängt, sondern meist über mehrere 
verschiedene Busse, die ihrerseits auch wieder nicht auf geringe Latenz, 
sondern auf hohen Durchsatz optimiert sind.

>  problem ist nur... wer ist schon mit der ganzen architektur von den
> prozessoren vertraut, so dass dieser auch eine kompetente aussage dazu
> machen kann... man, man, man...

Deshalb gibt's bei der OSADL eine Testfarm, wo verschiedene Rechner 
(nicht nur PCs) getestet werden im Bezug auf die Echtzeitfähigkeit. Das 
sagt noch nichts über die Peripherie aus, aber zumindest, ob der Rechner 
selbst eine Problem hat.
Hier kann man mal die Unterschiede sehen:

https://www.osadl.org/Latency-plot-of-system-in-rack-b-slot.qa-latencyplot-rbs1.0.html
https://www.osadl.org/Latency-plot-of-system-in-rack-1-slot.qa-latencyplot-r1s8.0.html

Man beachte die Ausreißer im zweiten Bild und die Angabe der höchsten 
gemessenen Latenz im Vergleich zum ersten.

: Bearbeitet durch User
von ./. (Gast)


Angehängte Dateien:

Lesenswert?

Ein kurzer Test ob einem auf dem eigenen System Interrupts "quer" kommen
ist grob mit dem DPC Latency Checker moeglich.

von Sina A. (sinapse)


Lesenswert?

@rolf magnus:

wow, danke für die ausführliche Antwort... auf jeden fall wieder was 
dazugelernt.

thx

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.