AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Timingprobleme mit virtuellen ComPorts
Thema durchsuchen
Ansicht
Themen-Optionen

Timingprobleme mit virtuellen ComPorts

Ein Thema von messie · begonnen am 8. Mär 2005 · letzter Beitrag vom 8. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 11:59
Moin,

ich habe ein Geschwindigkeitsproblem mit der WINAPI beim Schreiben auf eine RS232. Ich benutzte bisher Cport, es gibt aber auch viele andere Komponenten, die auf der WINAPI basieren. Mein Problem liegt in der Wartezeit auf das event (Overlapped.hEvent), was das erfolgreiche Schreiben signalisiert. Bei einem nicht hardwaremäßig vorhandenen (virtuellen) Comport habe ich pro Sendevorgang eine Wartezeit von 1-2 Millisekunden. Wenn man also byteweise sendet, kommt man auf einen Datendurchsatz von ca. 1 kB/s, unabhängig von der Baudrate. Dies betrifft nur virtuelle Comports, mit eingebauten Geräten ist das kein Problem. Ich habe verschiedene USB- wie auch IP-Wandler ausprobiert, es gibt keine Unterschiede. Wen es interessiert, kann man auch schnell selbst ausprobieren: einfach von Hyperterminal eine Textdatei auf die Schnittstelle schreiben lassen, mal mit interner und mit virtueller Schnittstelle.

Hat jemand eine Idee, warum das so ist und ob man mit anderen Lösungen (nicht-API) sowas umgehen kann? Kann mit einer die Funktionsweise der virtuellen ComPorts erklären?

Danke, Ulfert
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 12:06
Hallo Ulfert,

also ich komme mit eine virtuellen Bluetooth Comport auf 21-23kb/s (wobei das auch noch vom Kommunikationspartner abhängt - in meinem Fall ein Handy) und mit einem virtuellen IrDa Comport auf 7-8kb/s.

Getestet mit einem selbstgeschriebenen Programm und CPort.

[edit]Allerdings überprüfe ich das erfolgreiche Schreiben an den Comport nicht. Ich fange nur eventuelle Fehler mit try except ab.[/edit]

Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 12:16
Hallo Thomas,

sendest Du denn byteweise? Ich hatte den Hyperterminal-Test auch mal mit ZModem gemacht, da paßte die Übertragungsrate auch. Scheint so, daß ZModem die Daten als Gesamtpaket schickt.
Vielleicht kannst Su mir ja mal einen Codeschnipsel von der Senderoutine zeigen.

Danke, Ulfert
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 12:27
Das Problem ist das der virtuelle COM-Port ueber einen anderen realen Bus geht.
Wenn nur ein Zeichen geschrieben wird, so entsteht ein erheblicher Overhead an Transaktionen und schnell sind die Millisekunden verbraucht.
Die einfachste Loesung ist eine Pufferung, die nur mehrere Zeichen auf einmal schickt.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 12:36
Hallo Robert,

hast Du denn eine Ahnung, wieso das mit den internen Ports problemlos ist?

Grüße, Ulfert
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 13:16
Weil dort der UART fuer Rs232 direkt vom Treiber angesprochen wird.
Bei USB ist das UART im USB-Geraet am anderen Ende vom Kabel.
USB-Transaktionen aka einmal Kommando an UART schreiben und Status zuruecklesen dauert nun mal seine Zeit.
Inbesondere weil USB als polled Bus oft nur einmal pro Millisekunde pollt, also die antwort gerne eine Millisekunde braucht.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 14:51
Wenn der Port wirklich so selten pollt, ist das Problem klar. Dann kann es auch eine ähnliche Ursache haben warum das mit dem IP-Wandler auch nicht hinhaut. Vielleicht gibt es ja auch gute und schlechte Treiber für virtuelle COM-Ports.
Das vereinfacht mein Problem jedenfalls nicht gerade...

Grüße, Ulfert
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 15:41
Das ist halt das Problem mit so einem Bus. Bei USB sagt das Geraet an wie oft es gepollt werden will.
Der Datendurchsatz in jeweils eine Richtung ist trotzdem hoeher, aber abwechselnd kommen schnell Verzoegerungen zusammen.

Virtuelle COM-Port-Treiber sind das boeseste im USB-Bereich, besonders wenn der Treiber DOS-Boxen unterstuetzen soll.
Da sind so einige 16-bit-Probleme vorhanden.
Der praktisch einzige spezialist dafuer ist Walter Oney.
Schau mal im Forum von Usbman vorbei (http://www.usbman.com). Dort kann man dir hochwertige RS232-Adapter empfehlen.
  Mit Zitat antworten Zitat
Selecta

Registriert seit: 13. Okt 2004
22 Beiträge
 
Delphi 7 Architect
 
#9

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 15:53
Ich weiss jetzt nicht für was du es brauchst, aber die Lösungen von http://www.ftdichip.com/ sind wirklich gut.
Ich setze selbst den FTBM245 ein.

und das Hyperterminal ist sehr langsam, da es immer nur 1 zeichen schickt.

http://www.sysinternals.com/ntw2k/fr.../portmon.shtml
Mit dem Portmonitor kannst du die seriellen schnittstellen überwachen.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Timingprobleme mit virtuellen ComPorts

  Alt 8. Mär 2005, 16:11
>Virtuelle COM-Port-Treiber sind das boeseste im USB-Bereich

Hallo,

sieht so aus, als müßte ich den USB-Treiber als "worst case" zur Basis machen. Ich weiß nicht, mit welchen Schnittstelle die Software später eingesetzt wird (ob intern, USB, IP). Da muß ich wohl mit dem Protokolloverhead sparsam sein...

Danke, Ulfert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz