12.03.2008, 15:32
(Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2008 15:33 von Achim.)
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
Ich hab jetzt noch mal eure Lösungen verglichen...und es ergeben sich da gravierende Unterschiede beim Ergebnis. Die Kurven sehen zwar ähnlich aus (siehe Screenshot), es kommt aber nur bei meiner Lösung das richtige Ergebnis raus *grins*. Der korrekte Messwert für eine Datenpaket (erster Wert im read buffer : 115C83) ist mal exemplarisch unten rechts aufgedröselt...ich kann jetzt grade nicht nachvollziehen, warum das so unterschiedlich ist!
Die obere Kurve ist mit meiner Lösung erstellt, die mittlere mit der Variante von IchSelbst, die untere mit der Lösung von Achimedes!
@IchSelbst: Danke für deine Erläuterung! Ja, der von dir beschriebene Effekt tritt auf, und zwar gar nicht mal so selten! Man könnte das nur vermeiden, indem man wirklich jedes Paket überprüft. Das dürfte aber zu langsam sein...außerdem ist die Abweichung wohl zu vernachlässigen. Ich messe zwar tatsächlich im µ-Bereich (Unwucht bzw. Schlag eines Metallringes), aber durch die Mittelung über einen kompletten Pufferinhalt bin ich wohl trotzdem noch im grünen Bereich. Ich werde mich damit aber noch beschäftigen...
Gruß
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
12.03.2008, 15:48
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
' schrieb:ich kann jetzt grade nicht nachvollziehen, warum das so unterschiedlich ist!
Aber ich.
Die unterschiedlichen Spitzen (zwischen deinem und meinem, Archimedes' hab ich noch nicht angekuckt) kommen eben daher, dass sich bei dir die Daten verschieben. (Bei mir fehlt das Paket komplett, daher ist die Kurve kürzer.) Verschobene Datenteile => anderer absolute Wert => andere "Spitze". Irgendwann fehlt wieder mal ein Zeichen, was zur Folge haben kann, dass sich die ursprüngliche Verschiebung wieder rückgängig macht => Die Spitzen passen wieder.
Die Sache ist schon etwas verzwickt: Der Effekt tritt z.B. nur dann auf, wenn bei fehlendem M-Byte irgendwann mal sich das M-Byte ändert. Ohne Änderung würde sich der Effekt auch nicht bemerkbar machen. So kann z.B. eine Änderung (in den Spitzen) z.B. erst 10 Werte später sichtbar werden, nachdem der eigenliche Fehler (fehlendes Byte) aufgetreten ist.
Zitat:Man könnte das nur vermeiden, indem man wirklich jedes Paket überprüft
So wie ich das gemacht habe?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
12.03.2008, 16:12
|
RoLe
LVF-Guru
Beiträge: 1.236
Registriert seit: Jul 2007
-
1997
en
0
Schweiz
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
' schrieb:Das Byte fehlt, weil es auf der seriellen Leitung kaputt gegangen ist. Und das passiert prinzipiell überall innerhalb des Datenstreams.
Eben: Sollten. Zwischen Senden und Empfangen liegt aber die Strecke - und die ist fehlerbehaftet. Deswegen muss ja eine Sicherung gemacht werden.
Nun fehle mitten im String - warum auch immer - ein Mid-Byte:
H1 H2 H3 H4 H5 H6 H7
M1 M2 M4 M5 M6 M7
L1 L2 L3 L4 L5 L6 L7
Sorry wenn ich mich da einmische mit einer etwas komischen Frage:
Also ich hätte da auch mal eine Frage dazu, wegen dem fehlenden Bit oder Byte.
Es ist doch so, wenn ich sage lese 3 Byte und Serial-Port ist konfiguriert auf Baudrate,8Bit, usw. dann sorgt doch der darunterliegende Treiber (VISA,OS/Kernel) dafür, das die Daten nochmals angefordert werden oder dass ein Fehler gemeldet wird, wenn nur 7 Bit kommen.
(Framing ,Parity usw.)
Oder das Kabel besser abschirmen gegen Störungen.
Ich habe schon viele Serielle Komunikationen gemacht, aber solche Fehler habe ich noch nie festgestellt.
Kann es sein, dass das gar keine richtige serielle Kommunikation ist.
Im Moment sehe ich da nicht ganz durch, zeit Feierabend zu machen.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
|
|
|
12.03.2008, 16:17
(Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2008 19:40 von jg.)
|
Achimedes
LVF-Freak
Beiträge: 544
Registriert seit: Aug 2005
2011
2001
DE
72461
Deutschland
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
Hab meins nochmal durchgeschaut und verändert.
Am ergebnis dieses Strings ändert sich aber glaube ich nix
Es Muß Ident 0 dan 1 dann 2 kommen.
komt zB 1 und davor nicht 0 smeist er das Paket weg.
wenn 2 und davor nicht 1 kommt schmeist er auch alles Weg.
Es wird erzwungen das die Idents in wirklich der reihenfolge 0 1 2 kommen alles andere wird als ungültig in die Tonnen getreten.
ME_UmrechnungReadBuffer.vi (Größe: 66,68 KB / Downloads: 285)
Grüße
Achimedes
Wer Rechtschreibfehler findet .... darf sie behalten.
|
|
|
12.03.2008, 16:43
|
IchSelbst
LVF-Guru
Beiträge: 3.689
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
' schrieb:Es ist doch so, wenn ich sage lese 3 Byte und Serial-Port ist konfiguriert auf Baudrate,8Bit, usw. dann sorgt doch der darunterliegende Treiber (VISA,OS/Kernel) dafür, das die Daten nochmals angefordert werden
Was heißt "nochmals angefordert"?
Es handelt ich hier - wahrscheinlich - nur um den ganz ordinären RS232-Treiber (ob der vom Betriebssystem gemacht wird oder von einem Softwareteil von NI ist dabei egal). Dieser Treiber ließt die Daten aus dem Hardwarepuffer aus (und schreibt ggf. da hinein). Die gelesenen Daten werden zwischengelagert. Kommt nun jemand her und verlangt 3 Zeichen, werden die aus dem Zwischenspeicher herausgeholt und weitergegeben. Ob das richtige Daten sind (Bitkombination) oder ob da eines fehlt (z.B. das M-Byte) weiß der Treiber nicht. Zum M-Byte wird ein Zeichen erst in der Applikation, nicht im Treiber. Der Treiber erkennt nur die von dir angesprochenden Parityerror etc. Wenn also jemand 3 Zeichen verlangt, gibt der Treiber drei weiter oder wartet, bis er selbst drei hat. Eine Anforderung nach draußen an irgendwen, jetzt drei Zeichen zu senden, das macht der Treiber nicht. Ein solches Verhalten würde eine/einige Stufen (OSI-7-Schichtenmodell) höher liegen.
Zitat:Ich habe schon viele Serielle Komunikationen gemacht, aber solche Fehler habe ich noch nie festgestellt.
Naja, 112KB ist nicht wenig. Da muss das Kabel schon entsprechend gut abgeschirmt sein. Und auch die Treiberschaltungen (Hardware) sollten noch gut sein (was bei den Onboard-Schnittstellen nicht immer der Fall ist).
[*grübel*]
Aber so viele fehlende Daten wie hier sollten nicht auftreten. Bei einem meiner Prüfstände mit zwölf seriellen Schnittstellen mit jeweils 112kB treten so gut wie keine Fehler auf. Möglicherweise sollte Achim mal die Anzahl der Stoppbits überprüfen.
Zitat:Kann es sein, dass das gar keine richtige serielle Kommunikation ist.
Eine richtige würde ich schon sagen. Bei einer Adaption von RS485 (Endgerät) auf RS232 (PC) alleine mit Verdrahtung könnte ich mir aber diese Fehleranzahl vorstellen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
13.03.2008, 06:42
(Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2008 06:52 von Achim.)
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
' schrieb:Ich bin aber dafür, dass Archimedes' und meine Version besser sind.
Hmm...Fakt ist aber, das bei euren Versionen falsche Beträge rauskommen! Wie in Beitrag #12 im Screenshot vorgerechnet, kommt ein Betrag um die 7,18xxx raus, das war der wirklich gemessene Abstand, den das Lasermicrometer erfasst hat!
EDIT: Ahhhhhhhh....jetzt hab ich bei Achimedes Version die Vertauschung der Eingänge gemacht, dann stimmt auch der berechnete Wert!
Das mit den Stoppbits guck ich mir noch mal an...
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
13.03.2008, 09:29
(Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2008 09:30 von RoLe.)
|
RoLe
LVF-Guru
Beiträge: 1.236
Registriert seit: Jul 2007
-
1997
en
0
Schweiz
|
Fortlaufender Datenstrom an RS-232: Daten extrahieren
' schrieb:Aber so viele fehlende Daten wie hier sollten nicht auftreten. Bei einem meiner Prüfstände mit zwölf seriellen Schnittstellen mit jeweils 112kB treten so gut wie keine Fehler auf. Möglicherweise sollte Achim mal die Anzahl der Stoppbits überprüfen.
Ich bin immer noch der Meinung, dass es nicht möglich ist, das so viele Fehler entstehen, gehe davon aus das die Einstellungen/Kabel usw. ok sind.
Es kann ja nicht sein, das ich ein Produkt kaufe, dass immer wieder Fehler macht, und ich durch Software die Fehler rausfiltern muss und Werte verliere. Ich würde das jedenfalls nicht/niemehr kaufen.
Vielleicht ist es ja gar kein Fehler, sondern es wird zu langsam aus dem Buffer gelesen. Da das ja ein Ringbuffer ist wird irgendwann mal das alte überschrieben. Da es nun 3 Byte sind kann ich mir vorstellen das beim nächsten lesen halt nun dort ein Tel 02 steht und nicht mehr das Tel01, jedenfalls kommt dadurch die Reihenfolge durcheinander, und 3 Byte gehören ev. gar nicht zueinander.
Vielleicht liege ich aber auch falsch.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
|
|
|
| |