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
hi, ich bin kein programmiere, aber durch rs232 kannst du nur 8 bit senden also 255 zeichen.
> 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?
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.
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.
@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.
@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.
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.
ich habe es hardwaremässig erklärt. soweit ich weiss, die RS232 wird an UART einer µC angeschlossen dadurch werden die Daten seriell übertragen.
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).
@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.
@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.
@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. :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.