 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 28.01.2009, 19:12 Titel: Leerzeichen verschwindet |
|
|
Hallo zusammen,
ich habe folgendes, scheußliches Problem:
über eine COM - COM - Verbindung zweier PC's sende ich in einem Telegramm 6 Zeichen a 8 Bit, die ich normalerweise in dem anderen PC auch richtig empfange.
Wenn das letzte Zeichen (ein zufälliges ParityByte) aber gerade den ASCII-Code für das Leerzeichen (032 oder 00100000) ergibt, dann hat die Zeichenfolge vor dem Senden zwar noch die Länge von 6 Byte, wenn ich mir die aber auf der Empfangsseite ansehe, fehlt das letzte Byte und die Länge der Zeichefolge ist nur noch 5!
Ich öffne die COM-Schnittstellen mit:
Code: | OPEN "COM1: 9600,N,8,1,BIN,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1 |
sende das Telegramm mit:
und empfange es mit:
Auf der Sendeseite kann ich nichts ändern, da muss ich die Telegramme so nehmen wie sie kommen. Ich hoffe, dass die COM-SS das noch richtig sendet.
Kann ich auf der Empfangsseite irgendetwas korrigieren?
Wie würdert ihr so ein Problem angehen?
vG und danke
fredyxx
[/code] |
|
Nach oben |
|
 |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 29.01.2009, 20:35 Titel: |
|
|
Hallo zusammen,
ich möcht noch mal nachfragen, ob nicht doch noch einer eine Lösung für mein Problem findet. Es kann doch nicht sein, dass ein Leerzeichen am Ende eines Telegramms beim Empfänger nicht sichtbar ist.
Die Abfrage der COM-SS mit der LOC-Funktion ergibt die richtige Länge, wenn ich mir aber die Zeichenfolge ansehen oder deren Länge mit der LEN-Funktion abfragen will, fehlt das Leerzeichen immer.
Wer das mal selber probieren möchte, der kann das folgende Programm verwenden:
Code: | 'Diese Programm kann mit einer 3-adrigen Verbindung der COM1-Schnittstellen
'zweier PC's Zeichen an den andern PC senden
'Verbindungen: RxD - TxD; TxD - RxD; Ground
'SteckerKontakt: 2 - 3 ; 3 - 2 ; 5-5
'####################################################################
' Zum Abbrechen bei Empfamgen beliebige Taste drücken
'####################################################################
INPUT "soll dieser PC senden oder empfangen? s oder e eingeben!! ", se$
OPEN "COM1: 1200,n,8,1" FOR RANDOM AS 1 öffnet die Schnittstelle
nochmal:
IF se$ = "s" THEN
INPUT "Zeichenfolge eingeben! ß = Programmende ", a$
IF a$ = "ß" THEN GOTO aus
PRINT a$
PRINT #1, a$ 'Zeichen an Partner senden
GOTO nochmal
END IF
IF se$ = "e" THEN
IF INKEY$ <> "" THEN GOTO aus 'Beendet das Programm bei Tastenbetätigung
IF LOC(1) = 0 THEN GOTO nochmal
INPUT #1, l$ 'Zeichen vom Partner einlesen
PRINT "Zeichenfolge: "; l$; " L„nge der Zeichenfolge: "; LEN(l$)
GOTO nochmal
END IF
aus: CLOSE 'schließt die geöffnete Schnittstelle
END |
Das Programm muss auf beiden PC's laufen, eines auf senden, das andere auf empfangen geschaltet sein (Abfrage mit Programmstart)
Ich brauche dringend eine Lösung, weil alle meine Versuche bisher erfolglos waren!!
 _________________ vG
fredyxx |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 30.01.2009, 14:45 Titel: |
|
|
dreael hat Folgendes geschrieben: |
Sonst generelle Empfehlung: Mit INPUT$() zum Lesen arbeiten, dann bekommst Du praktisch jedes Zeichenbyte als String. |
Heureka das war's!!
Hallo dreael,
Du hast mich gerettet, ganz herzlichen Dank!
Den Befehl habe ich nicht gefunden, weil er nach markieren und F1 nicht auftaucht, wohl aber wenn man im Index sucht. _________________ vG
fredyxx |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|