• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Übermittlung zusätzlicher ASCII-Zeichen bei Übertragung von Dateiinhalt mit Xmodem - JAVA

Juko

Juko

Mitglied
Guten Abend alle Zusammen,

aktuell arbeite ich an einem Projekt, in dem ich einen Dateiinhalt (.txt-Dokument), mittels Xmodem, an einen COM-Port senden möchte (und natürlich an die damit verbundene Hardware).

Soweit so gut.
Nun ist mir allerdings aufgefallen, dass zu Beginn und am Ende des übertragenen Dateiinhalts zusätzliche ASCII-Zeichen übertragen werden, die ich in diesem Fall natürlich gar nicht da stehen haben darf und will.

Erste Zeile der Textdatei: þ! <-- Hier sollte eigentlich nur das Ausrufezeichen enthalten sein (vor dem Ausrufezeichen steht noch ein ä3/4)
Letzte Zeile der Textdatei: enQ <-- Hier sollte eigentlich ein "end" stehen

Übermittelte ASCII-Zeichen:
//  In order to 4278 Data is transmitted in the form of byte blocks
private final int SECTOR_SIZE = 4278;  //4278

Die Anzahl der übertragenen Zeichen habe ich im Skript soweit angepasst, daran sollte es also eigentlich nicht liegen. Natürlich kann ich mich in diesem Fall auch irren, da ich noch relativ unerfahren im Bereich Xmodem bin.

Aus diesem Grund würde ich gerne hier mein Glück versuchen und fragen, ob jemand zufälligerweise Tipps für mich hat, wie ich das Problem beheben kann.

Mit freundlichen Grüßen
JuKo
 
Robert Zenz

Robert Zenz

Mitglied
Anmerkung: Noch nie von XMODEM gehoert, aber habe mal mit COM Ports gearbeitet. Wie sendest du die Daten denn? Hast du da eine Lib oder werden die einfach in eine Date geschrieben? Kommen die falschen Zeichen in der Hardware auch so an? Kann es sein dass der COM-Port falsch konfiguriert ist und Steuerzeichen mitsendet?
 
Juko

Juko

Mitglied
Anmerkung: Noch nie von XMODEM gehoert, aber habe mal mit COM Ports gearbeitet. Wie sendest du die Daten denn? Hast du da eine Lib oder werden die einfach in eine Date geschrieben? Kommen die falschen Zeichen in der Hardware auch so an? Kann es sein dass der COM-Port falsch konfiguriert ist und Steuerzeichen mitsendet?
Ich lasse die Textdatei auslesen und dann über einen OutputStream an den COM-Port senden.

Leider steht mir die Hardware noch nicht zur Verfügung, deswegen kann ich die Frage nicht beantworten.
Ersatzweise nutze ich ein Programm, welches den COM-Port überwacht und alle eingehenden und ausgehenden Datenströme aufzeichnet und in einer Textdatei ausgibt. Dort tauchen dann die zusätzlichen ASCII-Zeichen auf.

Ich denke nicht, dass der Fehler am COM-Port liegt. Sende ich einzelne Strings an den Port, werden keine zusätzlichen Zeichen ausgegeben.
 
Robert Zenz

Robert Zenz

Mitglied
Eventuell hast du hier ein Problem mit Enkodierung vom Text. Strings in Java sind UTF-16, wenn eine Datei gelesen wird ist es, glaube ich, Plattform-default (also UNIX UTF-8 und Windows CP-1252...leider), ebenso beim schreiben. Also es kann sein dass du einfach nur beim lesen und schreiben explizit die Enkoeriung angeben musst.

Ich habe leider schon wirklich lange nicht mehr mit COM-Ports gearbeitet, lass dir am besten mal den String direkt vor dem Schreiben an dem COM-Port ausgeben um zu testen ob vielleicht in dem Zustand schon die zusaetzlichen Zeichen enthalten sind, oder ob sie erst beim schreiben in den Port hinzukommen.
 
mihe7

mihe7

Top Contributor
@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) :)

dass zu Beginn und am Ende des übertragenen Dateiinhalts zusätzliche ASCII-Zeichen übertragen werden, die ich in diesem Fall natürlich gar nicht da stehen haben darf und will.
Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).
 
Robert Zenz

Robert Zenz

Mitglied
Klingt besser was @mihe7 sagt, es ist gut moeglich dass dein Programm welches den COM Port "ueberwacht" das Protokoll nicht beruecksichtigt und deswegen dir falsche Werte anzeigt.

@mihe7 Ich hab' nur den Wiki-Artikel ueberflogen. :)
 
Juko

Juko

Mitglied
Alles klar, ich werde mir das morgen auf jeden Fall nochmal anschauen und dann Rückmeldung geben.

Vielen Dank für die Hilfe soweit.
 
Juko

Juko

Mitglied
@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) :)


Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).

@Robert Zenz XMODEM ist ein Übertragungsprotokoll. Wurde z. T. bei BBS (aka Mailbox-System) zur Dateiübertragung genommen (wobei später eher ZMODEM verbreitet war) :)


Das dürften Teile des Protokolls sein, die übertragen werden müssen.

XMODEM versendet Blöcke, die wie folgt aussehen (vgl. http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt, S. 20 ff.):
Code:
<SOH><BlockNr><255-BlockNr><Daten><Prüfsumme>
Dabei ist SOH ein Byte mit dem Wert 1. Die BlockNr ist ebenfalls ein Byte lang und wird stetig inkrementiert (Überlauf von 255 auf 0). Daten sind 128 Bytes und die Prüfsumme ist ein Byte, wobei die Daten aufsummiert werden (auch dieses Byte läuft dann von 255 auf 0 über).
Ok, das ist möglich. Nur wundert es mich dann in diesem Fall, dass mein letzter String in der Datei "end" nicht ausgeschrieben wird, sondern in ein "enQ" umgewandelt wird.
Eigentlich müsste aus diesem dann ja ein endQ werden oder hab ich da jetzt was falsch verstanden?
 
Robert Zenz

Robert Zenz

Mitglied
Ok, das ist möglich. Nur wundert es mich dann in diesem Fall, dass mein letzter String in der Datei "end" nicht ausgeschrieben wird, sondern in ein "enQ" umgewandelt wird.
Eigentlich müsste aus diesem dann ja ein endQ werden oder hab ich da jetzt was falsch verstanden?
Eventuell verwendet das Programm die falsche Laenge wegen dem fuehrenden Steuerzeichen oder aehnlich. Die Nachricht ist ja quasi genau um ein Byte/CodePoint verschoben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Erstellen zusätzlicher Konstanten beim Kompiliervorgang Allgemeine Java-Themen 3
R Datentypen Korrekte integer in Hex ASCII Konvertierung und serialisierung Allgemeine Java-Themen 1
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
C ASCII-Code in Java Allgemeine Java-Themen 1
B ASCII als 8-bit Binärstring darstellen Allgemeine Java-Themen 5
C BigInteger nach ASCII Code in String Allgemeine Java-Themen 11
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
C Datei als ASCII text einlesen ? Allgemeine Java-Themen 16
D Datei mit allen Ascii Zeichen Allgemeine Java-Themen 2
P Ascii Bild aus einem input file nur kommt nix im outputfile an?????? Allgemeine Java-Themen 5
F Hexcode von ASCII Zeichen erhalten Allgemeine Java-Themen 2
dru Graph aus Ascii Daten erstellen Allgemeine Java-Themen 2
S Hexzahl in ASCII umwandeln Allgemeine Java-Themen 3
R Auslesen von File - ASCII und Binärzeichen Allgemeine Java-Themen 13
D Datei im DOS/ASCII-Format einlesen. Allgemeine Java-Themen 9
Daniel_L ASCII in UniCode umwandeln? Allgemeine Java-Themen 14
K Datei als HEX oder dezimal gem. ASCII einlesen Allgemeine Java-Themen 4
S String auf ASCII Kodierung überprüfen? Allgemeine Java-Themen 4
F Unicode zu ASCII konvertieren Allgemeine Java-Themen 5
E Alarm ausgeben (ASCII Zeichen 7) über Lautsprecher Allgemeine Java-Themen 11
I Nochmal ASCII-Code Allgemeine Java-Themen 9
I ASCII Code in Java Allgemeine Java-Themen 3
B ASCII-Gui Bibliothek Allgemeine Java-Themen 2
M ASCII85 to ASCII Allgemeine Java-Themen 4
S int nach Ascii konvertieren Allgemeine Java-Themen 2
U ASCII ZEichenkette wird net richtig ausgegeben Allgemeine Java-Themen 2
M Problem mit bestimmten ASCII Codes Allgemeine Java-Themen 3
I Suche Methode: Buchstaben in ASCII umwandelt Allgemeine Java-Themen 2
R ascii-wert zuweisung Allgemeine Java-Themen 4
J String in ASCII werte umwandeln Allgemeine Java-Themen 7
T ASCII decodieren Allgemeine Java-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben