18.02.2010, 14:56
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Hi IchSelbst,
was meinst Du mit "SGL übertragen"??? Ehrlich gesagt, ich verstehe Bahnhof.
Hi Seba,
genau das habe ich gemacht. Ich habe es aus der Seite des MCU gemacht, dass die Zeichen + und - schicken kann. jetzt sind 14 Bytes.
if(data >= 0) sprintf(floatStringBuffer, "%+1.2f", data);
if(data < 0) sprintf(floatStringBuffer, "%-1.2f", data);
Du hast glueck mein freund.
Es gibt auch fehler Jetzt innerhald der Array, ich gehe davon aus, dass die Laenge nicht gleich 14 ist?
|
|
|
18.02.2010, 19:17
(Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2010 19:17 von IchSelbst.)
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RS232 oder VISA
' schrieb:was meinst Du mit "SGL übertragen"???
SGL ist die Abkürzung für Fließkommazahlen in Single-Format. Double=DBL sind 64Bit-Breite Zahlen, Single=SGL sind 32Bit-breite Zahlen. Mann muss nicht Strings, also eine Zahl im ASCII-Format übertragen, man kann auch eine Binär-Übertragung machen. Binär ist schneller als Ascii, weil weniger Zeichen.
Zitat:Es gibt auch fehler Jetzt innerhald der Array, ich gehe davon aus, dass die Laenge nicht gleich 14 ist?
Fehler innerhalb des Arrays fasse ich jetzt so auf, dass ein Zeichen auf der Übertragungsstrecke verloren geht. Gut, dass du an ein Synchronisationszeichen gedacht hast. Damit kann man solche Fehler nämlich eliminieren.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
18.02.2010, 21:37
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Hi,
Zitat:SGL ist die Abkürzung für Fließkommazahlen in Single-Format. Double=DBL sind 64Bit-Breite Zahlen, Single=SGL sind 32Bit-breite Zahlen. Mann muss nicht Strings, also eine Zahl im ASCII-Format übertragen, man kann auch eine Binär-Übertragung machen. Binär ist schneller als Ascii, weil weniger Zeichen.
Binaer-Code! das ist gut. Ich werde es probieren.
Danke im Voraus.
|
|
|
19.02.2010, 12:23
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Hi IchSelbst,
Zitat:Fehler innerhalb des Arrays fasse ich jetzt so auf, dass ein Zeichen auf der Übertragungsstrecke verloren geht. Gut, dass du an ein Synchronisationszeichen gedacht hast. Damit kann man solche Fehler nämlich eliminieren.
Was meinst Du mit "Synchronisationszeichen"?
Gruss
|
|
|
19.02.2010, 14:56
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RS232 oder VISA
' schrieb:Was meinst Du mit "Synchronisationszeichen"?
STX.
Oder #10.
Wenn du über eine RS232 Daten überträgst, machst du das für gewöhnlich ohne eine ausreichende Sicherung. Ein Problem besteht z.B. darin, dass du nicht definitiv sagen kannst, ob das erste Zeichen, was du empfängst auch im Datensatz das erste Zeichen darstellt. Beispiel: Wenn du "12.23" empfängst, kannst du nicht definitiv sagen, ob das die erste Zahl oder die zweite Zahl ist. Wenn bei dir alles richtig geht, dann nur deswegen, weil bisher auf dem RS232-Kabel nichts verloren gegangen ist. Was ist, wenn vom gesendeten Paket "12.23;12.23" der Teil "12.23" verloren geht? Welcher Teil bleibt übrig: das erste Mal "12.23" oder das zweite Mal "12.23"?
Mit anderen Worten, du musst selbst eine Sicherung machen. Dazu gehst du wie folgt vor: Du fasst das, was über RS232 kommt, als Stream auf und scannst den Stream Zeichen für Zeichen. Da du genau weist, wie dein Datensatz aussieht, kannst du eine gewisse Sicherheit machen. Datensatzformat: >STX ##### ; ##### CR<. Der Datensatz besteht also aus 13 Zeichen: Er beginnt immer mit STX. Dann folgenen 5 Zeichen aus dem Bereich [0..9,'.','+','-'], ein Strichpunkt an 6. Stelle, usw. Sieht ein einfangener Datensatz so aus, ist er mit einem bestimmten Prozentsatz richtig übertragen worden. Wenn jetzt aber z.B. an der 6. Stelle nicht der Strichpunkt steht - durchsucht du ab hier den Stream nach dem nächsten STX Zeichen. STX ist nämlich der Beginn deines Datensatzes. Und dieses Vorgehen, nämlich STX suchen, heißt Synchronisieren: Du gleichst den Datenbestand deines Algorithmus an den Datenbestand des empfangenen Streams an. STX ist also ein Synchronisationszeichen.
Du sieht hier gleich, dass für das Synchronisationszeichen ein bestimmtes Merkmal gelten muss: Es darf im Datensatz nicht als Datenzeichen vorkommen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
23.02.2010, 11:09
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Hi,
es gibt immer fehler bei Datenuebertragung. Stimmt, dass ich die Daten als ASCII uebertrage, aber ich verstehe nicht, warum und vor allem wie man diese Fehler beseitigen kann.
Irgendein Vorschlag!!!!
|
|
|
23.02.2010, 11:48
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RS232 oder VISA
' schrieb:es gibt immer fehler bei Datenuebertragung. Stimmt, dass ich die Daten als ASCII uebertrage
Welcher Fehler tritt denn auf?
Bitte hier den Fehler benennen, nicht die Auswirkung. Ein Fehler wäre, dass von der Zahl "12,34" z.B. das Zeichen "2" fehlt. Eine Auswirkung ist dann, dass der Punkt nicht auf der Kreislinie liegt.
Zitat:aber ich verstehe nicht, warum und vor allem wie man diese Fehler beseitigen kann.
Die Art der Beseitigung hängt vom Fehler ab.
Erst Fehler benennen, dann gibt's Info über deren Beseitigung.
Speicher z.B. den gesamten Datenstream in einem Stringanzeigeelement. Dann kannst du kucken und sehen, wo welcher Fehler auftritt.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
23.02.2010, 15:21
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Hi,
das ist ein Beispie von den Fehler, die ich bekomme:
-1.40 -2.07
-1.36 -2.10
-1.32 -2.00
-1.21 -2.19
<strike>-110 -2.25</strike>
-1.06 -2.27
-1.02 -2.28
an der 5. Zeile muss eigentlich -1.10, aber ich bekomme -110.
der 2. Fehler sieht so aus:
+2.48 -0.31
+2.49 -0.26
<strike>213 0</strike>
+2.50 -0.09
+2.50 -0.04
+2.50 +0.17
es koennte an der 3. Zeile +2.49;-0.13 sein.
Noch mal hier, wird ein Fhler auftauchen:
+1.91 +1.61
+1.89 +1.64
<strike>14 0</strike>
+1.77 +1.77
+1.86 +0.00
+1.64 +1.89
|
|
|
23.02.2010, 15:40
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RS232 oder VISA
Zitat:STX. tongue.gif
Oder #10.
Wenn du über eine RS232 Daten überträgst, machst du das für gewöhnlich ohne eine ausreichende Sicherung. Ein Problem besteht z.B. darin, dass du nicht definitiv sagen kannst, ob das erste Zeichen, was du empfängst auch im Datensatz das erste Zeichen darstellt. Beispiel: Wenn du "12.23" empfängst, kannst du nicht definitiv sagen, ob das die erste Zahl oder die zweite Zahl ist. Wenn bei dir alles richtig geht, dann nur deswegen, weil bisher auf dem RS232-Kabel nichts verloren gegangen ist. Was ist, wenn vom gesendeten Paket "12.23;12.23" der Teil "12.23" verloren geht? Welcher Teil bleibt übrig: das erste Mal "12.23" oder das zweite Mal "12.23"?
Mit anderen Worten, du musst selbst eine Sicherung machen. Dazu gehst du wie folgt vor: Du fasst das, was über RS232 kommt, als Stream auf und scannst den Stream Zeichen für Zeichen. Da du genau weist, wie dein Datensatz aussieht, kannst du eine gewisse Sicherheit machen. Datensatzformat: >STX ##### ; ##### CR<. Der Datensatz besteht also aus 13 Zeichen: Er beginnt immer mit STX. Dann folgenen 5 Zeichen aus dem Bereich [0..9,'.','+','-'], ein Strichpunkt an 6. Stelle, usw. Sieht ein einfangener Datensatz so aus, ist er mit einem bestimmten Prozentsatz richtig übertragen worden. Wenn jetzt aber z.B. an der 6. Stelle nicht der Strichpunkt steht - durchsucht du ab hier den Stream nach dem nächsten STX Zeichen. STX ist nämlich der Beginn deines Datensatzes. Und dieses Vorgehen, nämlich STX suchen, heißt Synchronisieren: Du gleichst den Datenbestand deines Algorithmus an den Datenbestand des empfangenen Streams an. STX ist also ein Synchronisationszeichen.
Du sieht hier gleich, dass für das Synchronisationszeichen ein bestimmtes Merkmal gelten muss: Es darf im Datensatz nicht als Datenzeichen vorkommen.
Ich benutze 0x10 oder n. Ich glaube das reicht.
|
|
|
| |