Forum: PC-Programmierung Serielle Schnittstelle mit Visual Studio


von Frank Polle (Gast)


Lesenswert?

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 ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Frank Polle (Gast)


Lesenswert?

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

von JojoS (Gast)


Lesenswert?

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.

von Frank Polle (Gast)


Lesenswert?

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 ?

von JojoS (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

Ich habe da mal was mit wxWidgets gemacht: Geht bis 38kBaud

von Christian R. (supachris)


Lesenswert?

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.

von Frank Polle (Gast)


Lesenswert?

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 ?

von Christian R. (supachris)


Lesenswert?

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.

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Vielleicht hab ich es auch überlesen, aber welche Dateien muss ich 
eigentlich einbinden um unter Windows mit C die serielle Schnittstelle 
anzusprechen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.