Problem mit serieller Schnittstelle beim beschreiben

Gast #3732033
Lesenswert?
• ▲
▼
Hallo Forum,

ich versuche 2 Befehle über den USB-Port an einen µC zu übergeben.

Die Befehle sind richtig (per HTerm funktionieren diese, bzw. habe ich 
sie auch im µC-Quelltext überprüft), trotzdem funktioniert ein Befehl, 
beim anderen erhalte ich die Fehlermeldung "Invalid Command" vom µC...

Ich beschreibe wie folgt:
1
if(!WriteFile(hSerial, c_command1, sizeof(c_command1), &dwBytesWrite, NULL)) 
2
{ 
3
    cerr << "Error: Reading failure" << endl; 
4
}

die Befehle lauten:

(funktionierend):
1
START\r\n

(nicht funktionierend):
1
PARAM NR 5\r\n

per monitoring konnte ich auch herausfinden das die Zeichenketten auch 
versendet werden.

Ich bin momentan leicht verzweifelt, kann mir jemand helfen? Mir gehen 
die Ideen aus wo ich noch meinen Fehler suchen könnte... sizeof() habe 
ich überprüft; 8 und 13; dwBytesWrite ist ein DWORD Counter für die 
Anzahl der gesendeten Bytes.
Persönliche Seite #3732067
Lesenswert?
• ▲
▼
ProblemFalke schrieb:
> beim anderen erhalte ich die Fehlermeldung "Invalid Command" vom µC

Hast Du denn mit einem Terminalprogramm (putty, teraterm, hyperterminal 
o.ä.) überprüft, daß Dein Kommando ("PARAM NR 5") korrekt verarbeitet 
wird?

Da c_command1 ein char-Array zu sein scheint, solltest Du statt sizeof 
besser strlen verwenden; spätestens, wenn Du Deine Funktionalität in 
einer Funktion unterbringst, wird Dir sizeof sonst nur noch die Größe 
des übergebenen Pointers statt der erwarteten Stringlänge liefern ...
Gast #3732282
Lesenswert?
• ▲
▼
Rufus Τ. Firefly schrieb:
> Hast Du denn mit einem Terminalprogramm (putty, teraterm, hyperterminal
> o.ä.) überprüft, daß Dein Kommando ("PARAM NR 5") korrekt verarbeitet
> wird?

ProblemFalke schrieb:
> Die Befehle sind richtig (per HTerm funktionieren diese...

Ich gehe stark davon aus. Aber trotzdem Danke.
Die c_commandX sind c-Arrays, werden aber direkt in der Schreibfunktion 
(also die umliegende) gebildet, momentan noch fest, am Ende wird dann 
eine Benutzereingabe (GUI) eingelesen, aber auch innerhalb der Funktion. 
Trotzdem ändere ich das, scheint besser zu sein...

Eventuell noch irgendein andere Idee? Kann es noch irgendwie am CR-LF 
liegen? Bei Start geht es aber auch... Es ist ja wirklich die gleiche 
Schreibmethode, nur dass das Kommando/der Befehl ein anderer ist...
Gast #3732376
Lesenswert?
• ▲
▼
ProblemFalke schrieb:
> (nicht funktionierend):PARAM NR 5\r\n

Bist du sicher, dass das überhaupt stimmt? Der Befehl besagt so wie er 
da steht, wähle Parameter Nr. 5 - und dann? Soll der Parameter auf einen 
bestimmten Wert gesetzt werden, aber wo steht der? Der Befehl macht so 
keinen Sinn, man sollte sowas erwarten wie "PARAM NR 5 = 42".

Georg
Gast #3732395
Lesenswert?
• ▲
▼
Georg schrieb:
> Bist du sicher, dass das überhaupt stimmt?

ProblemFalke schrieb:
> Die Befehle sind richtig (per HTerm funktionieren diese,
> bzw. habe ich sie auch im µC-Quelltext überprüft

Der Befehl sagt genaugenommen:
Parameter "Nummer" auf 5, oder um es nochmal in deiner Art zu schreiben 
Param Nr = 5

Das Problem konnte ich jetzt lösen. Die Zeichen "\r" und "\n" werden als 
jeweils "1" Zeichen gelesen, aber ich muss sie als 2 Zeichen übertragen.
Persönliche Seite #3733177
Lesenswert?
• ▲
▼
ProblemFalke schrieb:
> ich auch, aber auf jedenfall funktioniert das jetzt so...
> Bessere Hypothesen, evtl. mit Erklärung, nehme ich aber gerne an ;-)

Dann solltest du mal den Konkreten Code (geht/geht nicht) posten. Und 
mal verraten wie man 2 Zeichen "als eins" sendet, das wäre nämlich 
revolutionär da man damit die effektive Bandbreite verdoppeln könnte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren