Guten Tag, für ein Projekt benötige ich eine serielle Schnittstelle, die im Millisekundenbereich arbeitet. Ich habe ein Empfangsraster von 10ms in dem meine Daten ausgewertet werden müssen. Mit dem NET. Framework habe ich bereits eine serielle Schnittstelle in Betrieb gehabt, allerdings habe ich zeitliche Schwankungen indem mein System maximal in 200ms die Daten auswertet. Viel zu langsam...für meine Anwendung !! Ohne das Framework bin ich vermutlich wesentlich schneller. Dafür benötige ich aber eine Initialisierungs Datei für die serielle Schnittstelle. " C# " Wo kann ich so etwas herbekommen bzw. runterladen ? Wer kann mir helfen ?
Wenn Du C# verwendest, kommst Du um das .Net-Framework nicht herum. Du müsstest schon eine "echte" Programmiersprache wie C oder C++ (und nicht 'managed C++') verwenden. Allerdings nehme ich eher an, daß es ein Design- bzw. Verständnisproblem bei Dir geben dürfte. Zunächst einmal beträgt die Granularität des Windows-Schedulers üblicherweise 10 msec, man kann sie bestenfalls auf 1 msec verfeinern. Daher ist auf einem normal laufenden Windowssystem eine Reaktionszeit oder auch wiederkehrende Abhandlung im 10 msec-Raster nicht zu realisieren. Du wirst ein ganzzahliges Vielfaches dieses 10 msec-Rasters zu Gesicht bekommen. Desweiteren solltest Du Dir Dein serielles Protokoll sehr genau ansehen - liest Du einzelne Bytes oder gibst Du der Schnittstelle und dem Treiber die Chance, mehrere Bytes "auf einmal" zu empfangen, so daß diese vom Treiber am Stück an Deine Anwendung übergeben werden? Mit welcher Baudrate und welcher Art von Protokoll arbeitest Du derzeit?
Hallo Rufus! ich arbeite mit 9600 Baud. Mein Received Byte Threshold steht auf 1, quasi sobald ein Byte kommt, wird der Read Event ausgelöst. Ach und Du hattest natürlich recht, außerhalb vom Framework werde ich mit C programmieren. Kann man nicht irgendwelche System Prioritäten verändern ? ? Ich muss innerhalb von 50ms eine Antwort senden! Als CPU verwende ich einen Intel XScale PXA270 (312MHz) ! Gruss
Bei 9600 Bit/s braucht ein Zeichen ca. 1ms, in 10ms kann da also nicht viel übertragen werden. Steht denn der Empfangsfifo von der Schnittstelle auch auf 1 Zeichen? Sonst sammelt die Hardware eventuell noch bevor ein Interrupt ausgelöst wird.
Meine ReadBufferSize steht auf 512Byte. Wieso soll das denn auf 1 Byte stehen? Den Zusammenhang verstehe ich jetzt nicht ! Mein ReadTimeOut steht auf -1 ! Was nun ?
Ich meinte den Hardwarefifo der in der Systemsteuerung eingestellt wird, Geräte Manager serieller Port Anschlusseinstellungen / Erweitert, der steht hier z.B. als Default auf 8.
Frank Polle wrote: > Kann man nicht irgendwelche System Prioritäten verändern ? ? Ich muss > innerhalb von 50ms eine Antwort senden! Der Satz verträgt sich nicht mit einem nicht-echtzeitfähigem Betriebssystem.
Ich habe da mal was mit wxWidgets gemacht: Geht bis 38kBaud
Ich arbeite mit VC++ und MFC auf virtuellem COM-Port über FT232 mit 921600 Baud problemlos. Hardware-Handshake und ab geht die Post. Allerdings darf man bei Windows halt nicht erwarten, eine garantierte Antwortzeit zu erreichen. Windows ist nun mal nicht echtzeitfähig, selbst wenn man eine Antwort erst in 2 Stunden bekommen muss, kann es sein, dass sich ein Dienst o.ä. auf Kernel-Ebene das System krallt und erst in 2 Stunden 15 Minuten wieder dem User zur Verfügung stellt. Pech gehabt.
Hallo ! Danke für Eure Antworten. Es muss doch möglich sein das man auch unter WinCE eine serielle Schnittstelle in einem Raster von 10ms auswerten kann? Was ist denn wenn ich eine ebene Tiefe irgendwelche Systemparameter die mit der seriellen Schnittstelle zu tun haben einstelle oder die direkt ohne das Framework programmiere, um das zeitliche Management zu verbessern? ? Gibt es denn keine Lösung ?
Achso, Windows CE. naja, das erfüllt zumindest schon mal die grundlegenden Anforderungen an ein Echtzeit-OS. Allerdings ist da meines Wissens viel Handarbeit nötig, um einen Echtzeit-Prozess zu bauen. Lässt du deine Com-Port-Abfrage in einem Thread laufen? Wenn ja, welche Priorität hat der? Man kann bei CE.NET 256 Prioritätsstufen vergeben, 0 bis 8 sind wohl irgendwie Echtzeitfähig. Eventuell gehts darüber. Hier findest du Tipps: http://www.ceesar.ch/cms/upload/pdf/infotronic/05_Taskmanagement_Printed.pdf Da steht z.B. auch, dass der Scheduler 100ms round-robin zeit im Normalfall hat.
Vielleicht hab ich es auch überlesen, aber welche Dateien muss ich eigentlich einbinden um unter Windows mit C die serielle Schnittstelle anzusprechen?
Gar keine. CreateFile/ReadFile/WriteFile sind normale Win32-API-Funktionen, die mit #include <windows.h> bekanntgemacht werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.