Servus,
ich arbeite derzeit mit Hilfe von QSerialPort an der USB-Kommunikation. Dabei ist mir was merkwürdiges aufgefallen: Während die Kommunikation am meinem PC normal klappt 'verschluckt' mein Laptop immer wieder Daten, die eigentlich ankommen. Beispiel: Der PC empfängt per USB "ELM327 v1.50". Führe ich das gleiche Programm bei meinem Laptop aus, sieht die Ausgabe beispielsweise so aus: "M327 v1.50", also die ersten Zeichen fehlen. Da ich keine Ahnung habe, woran dies liegen könnte, wende ich mich an euch.
Mein Code hierfür sieht folgendermaßen aus:
Initialisierung
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
QSerialPort moPort;
if (!moPort.open(QIODevice::ReadWrite)) {
throw QString("Could not open port"); }
if (!moPort.setDataBits(QSerialPort::Data8)) {
throw QString("Could not set data bits");
}
if (!moPort.setStopBits(QSerialPort::OneStop)) {
throw QString("Could not set stop bits");
}
if (!moPort.setParity(QSerialPort::NoParity)) {
throw QString("Could not set parity");
}
if (!moPort.setFlowControl(QSerialPort::NoFlowControl)) {
throw QString("Could not set flow control");
}
if (!moPort.setBaudRate(QSerialPort::Baud38400)) {
throw QString("Could not set baud rate");
}
|
Senden/Empfangen
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
QByteArray ObdConnection::Send(const QString& sCmd) {
moPort.write(sCmd.toLocal8Bit());
QByteArray aBuffer;
while(moPort.waitForReadyRead(5000)) {
aBuffer += moPort.readAll();
if (aBuffer.size()>2 && aBuffer[aBuffer.size() - 2] == '\r' && aBuffer[aBuffer.size() - 3] == '\r') break;
}
return aBuffer;
}
|
Ideen, was an meinem Laptop anders laufen könnte als am PC?
MfG Kyle
PS: Wieso ist mein Code so furchtbar formatiert? Ich habe brav alles mit Zeilenumbrüchen reinkopiert.