Forum: PC-Programmierung Stringlänge nur 255?


von Andy (Gast)


Lesenswert?

Hallo an alle,

Ich habe folgendes Problem:
Ich generiere in meinem Programm einen String (mit & in einer 
for-Schleife) der ca. 600 Zeichen lang ist. Zum Test gebe ich den String 
auch in einer Textbox aus. Dort hat er die korrekte Länge. Diesen String 
möchte ich dann über die RS232 übertragen. Doch es werden nur 255 
Zeichen übertragen. Auch wenn ich mir den String im Überwachungsfenster 
ansehe, ist er nur 255 Zeichen lang. Ich dachte Strings könnten bis zu 
2^31 Zeichen enthalten? Was ist da los?

Ich programmiere mit VisualBasic 6.

Danke für eure Hilfe!

mfg
Andy

von didi (Gast)


Lesenswert?

hi,
ich bin kein programmiere, aber durch rs232 kannst du nur 8 bit senden 
also 255 zeichen.

von Karl heinz B. (kbucheg)


Lesenswert?

> ich bin kein programmiere

Das merkt man

> aber durch rs232 kannst du nur 8 bit senden also 255 zeichen.

Was hat das mit der max. Stringlänge in BASCOM zu tun?

von didi (Gast)


Lesenswert?

lies richtig was er geschrieben hat.
> Diesen String
> möchte ich dann über die RS232 übertragen. Doch es werden nur 255
> Zeichen übertragen.
 durch die RS232 kannst du kein 600 auf einmal senden, da musst du 2*255 
+ rest senden.



von Marvin (Gast)


Lesenswert?

Didi, sorry, aber das ist ja was völlig neues.
Was hat die Framelänge mit der Wortbreite zu tun?

@Andy: Wie stellst Du fest, wieviele Zeichen übertragen werden? 
Vielleicht liegt das Problem beim Empfänger.

von didi (Gast)


Lesenswert?

dachte die rs232 ist mit UART verbunden???

von Wiesi (Gast)


Lesenswert?

@Andy
Ein Code Snippet oder so wäre nicht schlecht, bzw. ob du die Stringlänge 
mit überträgst oder den string mit \0 oder was auch immer abschließt.

von Karl heinz B. (kbucheg)


Lesenswert?

@Didi

Ich muss mich entschuldigen.
Ich hab da 2 Threads durcheinandergebracht.
Da war noch so ein "Warum geht bei BASCOM mit mid kein
String mit mehr als 255 Zeichen" - Thread. Mit dem
hab ich diesen hier verwürfelt.
Tut mir leid.

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Trotzdem bleibt es so, dass die Stringlänge mit der Wortbreite erstmal 
nichts zu tun hat.

Hardwarepuffer scheiden wahrscheinlich eh aus, da die wohl kaum 255 
Zeichen tief sind. Ist also eher ein Problem auf höherer Ebene.

von didi (Gast)


Lesenswert?

ich habe es hardwaremässig erklärt. soweit ich weiss, die RS232 wird an 
UART einer µC angeschlossen dadurch werden die Daten seriell übertragen.

von Karl heinz B. (kbucheg)


Lesenswert?

Das hat aber nichts damit zu tun.
Die UART hat keine Beschränkung hinsichtlich der Länge.
Das liegt vor allem daran, dass es auf der Ebene der UART
keine Datenpakete mehr gibt. Da ist alles nur
noch ein Bytestrom. Byte wird der UART übergeben -> Byte
wird gesendet. Byte wird empfangen -> Empfänger kann sich
das Byte abholen.

Eine RS232 ist normalerweise eine UART
UART steht für: Universal Asynchronous Receiver Transmitter.
Genau das trifft auf eine RS232 zu.
Das 'normalerweise' habe ich geschrieben, weil man eine RS232
theoretisch auch synchron betreiben kann. Ist mir allerdings
noch nie untergekommen (was nicht heist, dass es niemand
machen würde).

von Ronny (Gast)


Lesenswert?

@didi:

Genau.Und zwar immer ein wort fester Länge (üblicherweise 8 Bit) 
zusammen mit einem Start und einem (oder 1.5) Stopbit(s) und eventuell 
einem Paritätsbit.Das wäre dann 1 Byte,was in die UART geschrieben 
wird,in Hardware seriell herausgetaktet und wieder in Hardware im 
Empfänger zusammen gesetzt wird.Das ganze wird dann so oft wie nötig 
wiederholt,Byte für Byte.Mit einem Oszi kann man dann die Bits auf der 
Leitung springen sehen,im Sender/Empfänger wird allerdings nur Wortweise 
gearbeitet.Man kann damit natürlich deutlich mehr als 255 Bytes 
übertragen,allerdings benötigt jedes Byte eine fest definierte Zeit (bei 
9600Baud,1Stopbit,8Datenbits z.B etwas über 1ms pro Byte).

Der Fehler liegt dann eher an anderer Stelle.Ein Pascal-string z.B. hat 
die Länge im 1.Byte stehen und kann damit maximal 255 Zeichen lang 
sein.Oder im Empfänger ist ein Ringpuffer zu klein bzw. es wird in dem 
Empfangsarray nur mit einem char adressiert.Um das zu testen kannst du 
ja mal die com1 am PC per Nullkabel an die com2 hängen und im 
Terminalprogramm schauen,ob alles gesendet wird.Wenn ja muss das Problem 
beim Empfänger (Mikrocontroller? anderer PC?) liegen.

von Ronny (Gast)


Lesenswert?

@Karl-Heinz:

Soweit ich weiss (man möge mich da korrigieren,falls ich mich irre),sind 
bei UART (universal asynchronous Receiver Transmitter) keine Pegel 
vorgegeben,lediglich eine grobe Vorgabe was Start/Stopbit und Parität 
angeht. Beim RS232 Standart hingegen sind dann die entsprechenden Pegel 
festgelegt und Empfehlungen für Steckerbelegungen,Kabellängen,etc 
gegeben.

von didi (Gast)


Lesenswert?

@Karl
ist klar senden und empfangen.
deshalb habe ich ihn auch gesagt er sendet erstmal 255, dann nochmal 255 
das sind 500 dann der rest 100. damit hat er sein 600 schon komplt 
gesendet.

@Ronny
war professionel erklärt. :)

von thkais (Gast)


Lesenswert?

Didi: Nein, man kann die 600 direkt senden. Die Begrenzung des 
Zahlenbereichs (0-255) von "8-Bit" hat nichts, aber auch garnichts damit 
zu tun, wieviele Bytes man senden möchte. Das ist alles eine Frage der 
Software, die Hardware beschränkt da nichts. Aber solange man von Andy 
nicht erfährt, welche Software er benutzt, kann man ihm leider nicht 
weiterhelfen.

Außerdem ist 255+255 immer noch 510 ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.