Hallo,
drücke ich mich wirklich so unverständlich aus?
Naja, kommt wahrscheinlich davon, wenn man nicht von Anfang an das
komplette Bild vermittelt - wobei ich nach wie vor der Meinung bin, daß
das nicht nötig ist, weil die Hardware nichts mit dem Problem zu tun
hat.
Aber damit jetzt ein für alle Mal alle Unklarheiten beseitigt sind:
Es handelt sich um ein Meßgerät, von meiner Firma entwickelt und gebaut.
Dieses Meßgerät hat eine RS232 und eine USB-Schnittstelle.
Die CPU dieses Gerätes hat zwei UARTs on chip. An dem einen UART hängt
(natürlich über Pegelwandler, -buffer) die externe RS232. Die
Pegelwandler schaffen maximal 1MBit/s, so daß ich auf dieser RS232 nicht
nur bis 115200, sondern auch 230400, 460800 und 921600 unterstützen kann
(und prinzipiell noch diverse dazwischen, da der Teiler für den
UART-Takt von einem viel höheren Takt ausgeht). 115200 ist auch nicht
mehr für alle Meßaufgaben ausreichend. Aber der RS232-Port steht
zumindest als Notfall-Option bereit, falls ein Firmware-Update schief
geht um mittels Bootblock eine neue Firmware reinzuladen.
Da ich keine besonderen Funktionen des USB-Ports brauche, sondern
einfach nur die höhere Bandbreite benötige (und weiterhin neue PCs
teilweise keine RS232 mehr haben), sitzt in dem Gerät ein FT2232D USB /
UART Wandler. Dieser hängt am zweiten seriellen Port der CPU mit bis zu
3MBit/s an ultrakurzen Verbindungswegen (und ja, der FT2232D unterstützt
das bei TTL-Pegel - und die CPU auch).
Von FTDI gibt es dann einen fertigen Windows-Treiber, der den Anschluß
via USB in einen virtuellen COM-Port umwandelt.
Die Baudrate, welche man für diesen virtuellen COM-Port einstellt,
bestimmt mit welcher Baudrate die Daten vom FT2232D zur CPU im Gerät
wandern.
Man kann das Gerät also entweder per RS232 oder per USB anschliessen,
für die Software auf dem PC sind beides COM-Ports, der über USB ist halt
ein bißchen schneller ;-)
Und genau bei der Geschwindigkeit über 115200 bps fangen die Probleme
mit dem SerialPort-Objekt an.
Post by Peter GötzPost by Martin EckelDas SerialPort-Objekt ist anscheinend (zumindest bei mir)
nicht in der Lage, Daten mit mehr als 115200bps sicher zu
verarbeiten - und zwar seltsamerweise datenabhängig - wer
weiß, was NET da noch im Hintergrund macht.
Die Datenabhängigkeit erklärt sich daraus, dass es je nach
konkreten Daten mal zu mehr oder weniger Flusswechseln
auf der Leitung und damit zu unterschiedlich hoher Störanfälligkeit
kommt.
NEIN - denn wenn ich die Daten mittels Windows-API abhole, passieren
diese Fehler nicht!
Post by Peter GötzWas meinst Du mit "wirklicher Baudrate" und "tatsächlicher Datenrate"?
Was hindert mich daran, wenn die Schnittstelle auf 1MBit/s steht, Pausen
zwischen den einzelnen Bytes zu machen?
Dafür ist die RS232 schliesslich asynchron.
Ein 56k-Modem wird auch mit 115200bps angeschlossen, bietet aber nur
56000 tatsächliche Datenrate (Kompression mal ausgenommen).
Post by Peter GötzPost by Martin EckelHeute habe ich zuerst die Datenrate meines USB/Seriell-Ports
von 3000000 auf 460800 bps verringert.
Auch das ist ein Wert, den keine mir bekannte RS232 oder V24
Schnittstellenkarte bereitstellt.
Der FT2232D kann das...
Ich weiß schon, wovon ich rede!
Post by Peter GötzDa würde mich mal die originale Spezifikation des Herstellers
interessieren.
Welches Gerät von welchem Hersteller ist das?
Mein Gerät :-)
Post by Peter GötzWenn Dein Gerät eine USB-Schnittstelle hat, dann verstehe ich
nicht, warum Du für relativ hohe Übertragungsgeschwindigkeiten
nicht eben die dafür ohnehin besser geeignete USB-Schnittstelle
verwendest.
Tu ich ja, s.o.
Post by Peter GötzBis hierher verstehe ich nicht wirklich, wie diese Hardware
konkret aussieht, sprich wann bzw. wo USB und wann bzw.
wo RS323 zum Einsatz kommt.
Ich hoffe, jetzt ist das klar.
Post by Peter GötzPost by Martin EckelNun habe ich aber noch einen anderen PC hier, welcher eine extra
Schnittstellenkarte bis 921600bps drin hat.
Von welchem Hersteller ist diese Karte und welche
Typenbezeichnung hat diese?
EXSYS 4025A - kann auch 230400, 460800 und 921600.
Also nochmal:
Wir haben Datensatz A und B.
An der RS232 meines Gerätes hängt Rechner 1.
Am USB-Port (welcher Windows-Seitig als COM-Port eingebunden wird) hängt
Rechner 2.
Rechner 1 sendet an mein Gerät an den RS232-Port.
Zum Testen habe ich mein Gerät so umprogrammiert, daß es die Daten
sofort an den USB/Seriell Wandler schickt, von da gehts über USB an
Rechner 2, und in Rechner 2 kommen diese am virtuellen COM-Port an.
Die UARTs der CPU in meinem Gerät steht natürlich jeweils auf den
passenden Taktraten.
Der virtuelle COM-Port steht auf 460800 bps (oder auch 3MBit/s, egal),
was bedeutet, daß die Daten zwischen der CPU und dem USB/Seriell Wandler
in meinem Gerät mit 460800bps wandern.
Sendet Rechner 1 Datensatz A oder B mit 115200bps weg, so kommen die
Daten an Rechner 2 natürlich im Mittel auch mit 115200bps an - halt mit
Pausen zwischen den Bytes.
Hierbei gibt es nie ein Problem, egal ob mit dem SerialPort-Objekt oder
direkt mit Windows-API.
Sendet Rechner 1 jedoch Datensatz A mit 230400bps weg, so kommt es auf
Rechner 2 bei Empfang mit dem SerialPort-Objekt IMMER zu Datenverlusten.
Bei Empfang über Windows-API NIEMALS.
Datensatz B wird jedoch auch mit dem SerialPort-Objekt IMMER korrekt
empfangen.
Sobald also die durchschnittliche Datenrate über 115200bps steigt
(unabhängig von der wirklichen Baudrate des COM-Ports) gibt es
datenabhängige Fehler bei Empfang über das Serial-Port Objekt.
Bei einer durchschnittlichen Datenrate von 230400bps sind es mehr Fehler
als bei einer durchschnittlichen Datenrate von 180000bps (so wie die
Daten normal aus meinem Gerät kommen), was vermuten läßt, das es um so
mehr Fehler werden, je schneller man wird.
Da diese Fehler über die Windows-API nicht auftreten, kann mir keiner
erzählen, das seien echte Übertragungsfehler in der Hardware.
Da sich der selbe Datensatz bei niedriger durchschnittlicher Datenrate
problemlos über das SerialPort Objekt übertragen läßt, scheint mir eine
Fehlkonfiguration des SerialPort Objekts meinerseits auch unmöglich.
Deshalb bleibt mir im Moment nur die Schlußfolgerung, das das SerialPort
Objekt mehr als 115200bps durchschnittliche Rate nicht verträgt. Warum
auch immer.
Wie gesagt, ich stelle meinen Datensatz A gerne zu Verfügung. Wer zwei
Rechner hat, welche beide 230400bps können, möge diesen Datensatz bitte
einmal von Rechner 1 zu Rechner 2 mit 230400bps übertragen. Und auf
Rechner 2 mit dem SerialPort Objekt empfangen. Ich bin echt gespannt, ob
dann alles ankommt.
Es wäre natürlich möglich, daß das etwas mit dem virtuellen COM-Port zu
tun hat und es über eine "echte RS232" funktioniert - erklärt aber immer
noch nicht, warum es über die Windows-API immer klappt.
Gruß,
Martin