Forum: PC-Programmierung C# Uart Befehle senden


von Holger L. (max5v)


Lesenswert?

Guten Abend zusammen.

Da C# in den letzten paar Jahren von mir nicht mehr verwendet wurde, es 
einige Erneuerungen gab, sowie einiges Vergessen wurde, folgende Frage:

Es werden Hex Befehle (ca. 30, mehr oder weniger unterschiedlich) über 
USB an ein Uart Gerät gesendet (Die Kommunikation funktioniert)  welche 
sowohl in der Länge als auch in ihrem "Aufbau" unterschiedlich sind.
1
// Senden 
2
1  Byte Startbyte     -> immer gleich
3
1  Byte Länge         -> Variabel, resultiert aus den folgenden Byte (errechenbar):
4
1  Byte Kommando -> Variabel   
5
60 Byte Daten        -> Variabel, von 0 - 60 Byte
6
1  Byte Endbyte      -> immer gleich
7
8
// Empfangen
9
5  Byte Antwort      -> immer gleich, solange kein Fehler aufgetreten ist bei einfachen Befehlen
Es gibt nach dem Senden,bei einigen Befehlen, noch komplexere Antworten 
mit unterschiedlichen Längen welche aber der Programierung prinzipiell 
dem Empfang gleichen.


Eine Klasse erstellen, eigene Datentypen, Enumeration, Typen etc.?
Ich stehe momentan ein wenig auf dem Schlauch.

von Mark B. (markbrandis)


Lesenswert?

Im Prinzip läuft das ja auf sowas heraus:
1
switch (command)
2
{
3
    case CommandLoad: 
4
        // Code für dieses Kommando
5
    break; 
6
    
7
    case CommandSave: 
8
        // Code für dieses Kommando
9
    break;
10
    
11
    case CommandWhatever: 
12
        // Code für dieses Kommando
13
    break; 
14
    
15
    // und so weiter
16
    
17
    default:
18
    break;
19
}


Die Anzahl der Cases entspricht der Anzahl der unterschiedlichen 
Kommandos. Diese wiederum ist in dem Protokoll definiert, welches hier 
eben bedient werden soll.

> Eine Klasse erstellen

Kann man machen. Man kann es aber auch genau so gut prozedural 
abhandeln.

> eigene Datentypen, Enumeration, Typen etc.?

Für die jeweiligen Kommandos bietet es sich an, selbstsprechende Namen 
zu vergeben, etwa so wie in dem Beispielcode oben. Man will ja nicht mit 
"Magic Numbers" arbeiten. Also z.B.:
1
enum CommandCode : byte
2
{
3
    None = 0,
4
    Unknown = 1,
5
    CommandLoad = 10,
6
    CommandSave = 32,
7
    CommandWhatever = 255
8
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.