Auslesen der COM Schnittstelle in < 1ms
-
ja hallo zusammen,
der titel sagt ja eigentlich schon alles.
ist es möglich über ein für win im Borland c++ builder geschriebenes programm, den com-port schneller als 1ms auszulesen also im µs-bereich.ich google nämlich schon eine weile und finde immer wieder postings auf diversen seiten wo gesagt wird das der stand. windows treiber nur das auslesen jede ms gestattet.
mfg
Cane
-
weiß niemand?
habe mir gerade mal die bibliothek runter geladen damit BCB den com port überhaupt kennt.
-
Hallo cane,
ist es nicht so, das die Serielle Schnittstelle deswegen einen Puffer hat? Wahrscheinlich gibts die Begrenzung, damit die Kommunikation mit der Schnittstelle nicht den ganzen Rechner lahmlegt. Denke mal durch die Serielle Übertragung der Daten plus ggfs. Paritäts- und/oder Start-/Stopbits kommt soviel Interrupt-Verkehr zustande, das das den Rechner ziemlich aufhält. Zumal die Serielle Kommunikation eh Zeitkritisch ist. Der Parallel-Port ist da glaub' ich etwas einfacher.
Aber ich lasse mich gerne belehren
Frank
-
hallo frank,
das rs232 signal bzw der comport kann schneller abgefragt werden, über dos ist dies ohne probleme möglich. das kann ich sogar 100%ig sagen da das programm das ich umschreibe soll in pascal vorliegt und die abfrage alle 300microsekunden tätigt. da aber das dos programm auf neuen rechnern nicht läuft soll das nun in c++ als windows anwendung neu geschrieben werden.. von mir
(und ich hab c++ vor ein paar tagen zum ersten mal installiert:( )
sorry fürs abschweifen, also ich hab gelesen das der windows treiber das wohl blockiert, bzw auf 1ms geschränkt.mfg
Cane
-
ja das gute alte dos...:-)
wenn es nur drum geht das das programm wieder laufen soll, für den dos-borland-compiler, bzw dessen compilierten programme, gabs mal einen patch, damit die auch mit PC's jenseits der 500 MHz-Grenze noch laufen. war glaube ich irgendein bug in einer bibliothek, die eine zeitkonstante ausrechnete...
soweit zum abschweifen...
unter windows ist das eh alles komplizierter, da du (fast) keinen direkten zugriff auf die hardware hast. ich denke, da mußt du dir eine RS232/ComPort-Komponente besorgen, oder selbst mit WinAPI was bauen. denke mal das das mit der Komponente dann aber der elegantere weg ist. such doch mal nach RS232 hier im forum. oder schau mal bei www.tmssoftware.com, die haben glaube ich auch eine komponente dazu
nur so aus neugier, warum mußt du (das programm) denn diese "zeit" einhalten?
-
Das programm misst der fülldruck in lampen, z.b. neonstrahler etc. und es sollen in kürzester zeit 500 messungen gemacht werden. dazu muss dann noch ein mittelwert in microsekunden errechnet werden als0 wie lange jede der 500 messungen im durchschnitt gedauert hat.
diesen patch für pascal habe ich schon drauf gespielt, dadurch laufen sie ja wieder blos win2k und co. basieren ja nicht mehr auf dos und haben ja nur noch die cmd console und ich weiß nicht in wie fern diese, dos programme noch starten lässt bzw in welchem funktionsumfang.
-
also grundsätzlich laufen dos programme auch unter w2k oder xp, vista ist da wieder ein anderes thema.
allerdings hast du dann dort ja nur eine "emulation", die im hintergrund wieder auf windows aufbaut. denke mal da wirds mit direkten zugriffen auf schnittstellen (außer normales lesen/schreiben) nichts werden.
dann such einfach mal nach rs232 hier im forum, da gibts ein paar themen die sich damit befasst haben. oder in der faq: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39169.html
-
ok danke ich schau mal alles durch
-
Hallo, du kannst unter Windows bei einer COM-Kommunikation mit bordeigenen Mitteln (WinAPI: ReadFile(), WriteFile()) keine Zeiten unter 1ms garantieren. Windows ist kein Echtzeitbetriebssystem. Es gibt aber Hersteller, die Module anbieten, mit denen es dann doch möglich ist. Schaust mal hier: www.kithara.de. Viel Erfolg!
-
unter linux wäre es aber möglich oder?
-
Hmmm, weiss ich leider nicht genau. Ich kenn die Problematik nur unter Windows. Denke aber, dass unter Linux grundsätzlich auch ein Echtzeit-fähiges Linux oder spezielle Tricks/Module dazu erforderlich sind, um Zeiten < 1 ms zu garantieren.