www.mikrocontroller.net

Forum: PC-Programmierung Serielle Schnittstelle mit Visual Studio


Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe da mal was mit wxWidgets gemacht: Geht bis 38kBaud

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank Polle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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_...
Da steht z.B. auch, dass der Scheduler 100ms round-robin zeit im 
Normalfall hat.

Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gar keine. CreateFile/ReadFile/WriteFile sind normale 
Win32-API-Funktionen, die mit #include <windows.h> bekanntgemacht 
werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.