serielle Schnittstelle: mehrer Bytes einlesen

PariX

Grünschnabel
Hallo zusammen,

ich habe eine serielle-Klasse in meiner Anwendung eingebunden, womit ich bis jetzt nur ein Byte schreiben und lesen kann.
Wenn mehrer Bytes oder alphapetische Zeichen hintereinander an der seriellen Schnittstelle ankommen, wird immer das erste Byte eingelesen.
Ich würde jetzt gerne die Lese-Methode so erweitern, dass auch mehrer Bytes hintereinander eingelesen werden können.
Code:
BOOL CSerial::ReadByte(BYTE  &resp) 
{ 
    BYTE rx; 
    resp=0; 

    DWORD dwBytesTransferred=0; 

if (ReadFile (hComm, &rx, 1, &dwBytesTransferred, 0)) 
{ 
    if (dwBytesTransferred == 1) 
      { resp=rx; 
        return true; 
      } 
} 
              
    return false; 
}
Hat jemand hier eine Idee, wie ich jetzt alle ankommenden Bytes einlesen und in einem String ablegen kann?
Danke
 
Rufe ReadByte() in einer Schleife auf. Abhängig vom Protokoll, welches die Datenüberetragung regelt, gibt es in der Regel ein oder mehrere Bytes, welche das Ende der Übertragung anzeigen. Anhand dieser Infos oder wenn keine Bytes mehr gelesen werden können, kannst du die Schleife abbrechen.

Gruß
MCoder
 
Hallo und danke erstmal für die schnelle Antwort.
Könntest Du mir bitte kurz anhand eines Codes erklären, wie ich die Read-Methode in der Schleife aurufe und das glesene Byte in einer Variable vom Typ CString ablegen kann?

Unter der Annahme, dass die Länger des gesendeten Strings (str1) bekannt ist:
Code:
CString str2;
int str_len = strlen(str1); 
for(int i=0; i<str_len; i++) 
{  
// wie lege das glesen Byte im String "str2" ein?
}

Danke und Gruß,
PariX
 
Könnte man so machen:
C++:
CString str2 = _T("");
int str_len = strlen(str1); 
for(int i=0; i<str_len; i++) 
{  
    BYTE  resp;
    
    if( ReadByte(resp) )
    {
        str2 += (TCHAR)resp;
    }
}
Gruß
MCoder
 
Danke.
Das Programm stürtzt jetzt dauerend ab.
Ich bin jetzt noch am Testen... später sage ich bescheid, ob das geklappt hat.

Gruß, PariX
 
Ich kann jetzt irgendwie nur die ersten 3 Zeichen lesen, auch wenn ich die variable "i" direkt mit einem Wert initialisiere
 
Schwer zu sagen, woran es liegt. Hast du die Parameter (Baudrate usw.) für die serielle Schnittstelle richtig eingestellt?
 

Neue Beiträge

Zurück