- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 52

Thema: Beispiel Anwendung C# Zugriff auf SerialPort

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.02.2012
    Beiträge
    8
    Code:
       
     private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)         //Button zum Empfangen
            {
                try
                {              //Globale Variable
                    bool PaketStart = false;
                    List<byte> meineListe = new List<byte>();
    
                    //Event
    
                    byte temp =0;
                    while (temp != -1)   //So lange die Variable temp ungleich -1 ist, also so lange Daten vorhanden sind mache:
                    {
                        temp = (byte)serialPort1.ReadByte();   //Lese ein byte
                        if (PaketStart)    //Sind wir bereits in einem Datenpaket drin ?
                        {
                            if (temp == 66)   //Ist das byte die Endbedingung ?
                            {
                           
                                    //Geschwindigkeit
                                    richTextBox1.Text =  meineListe[5].ToString() + meineListe[6].ToString() + meineListe[7].ToString() + meineListe[8].ToString() +    meineListe[9].ToString();     // Ausgabe Geschwindigkeit
                                    //Rundenzeit
                                    //richTextBox2.Text = char10.ToString() + char11.ToString() + char12.ToString() + char13.ToString() + char14.ToString();    //Ausgabe Rundenzeit
                                    //Runde
                                    label12.Text = meineListe[3].ToString() + meineListe[4].ToString();
                                //Rufe eine Prozedur auf die die Daten in der Liste verarbeitet (Nur eine Kopie der Datenübergeben und die ursprüngliche liste leeren), das Datenverarbeiten macht    man aus Timinggründen wohl am besten aus einem anderen Thread
                                    meineListe.Clear();
                            }     
    
                            }
                            else
                            {
                                meineListe.Add(temp);  //Ansonsten füge das byte der Liste hinzu
                            }
                        }
                        if (temp == 56)  //Wir sind in keinem Datenpaket drin, ist das gerade gelesene Byte die Startbedingung ?
                        {
                            PaketStart = true;   //Ja also setzten wie die Variable PaketStart auf true so dass wir bei dem nächsten Schleifendurchlauf in if-Bedingung weiter oben springen
                        }
    
                    }
           catch { ;}
    }
    Hab das jetzt so geschrieben und unterstreicht mir while (temp != -1) grün mit der Meldung "Warnung 1 Der Vergleich mit einer ganzzahligen Konstante ist nutzlos. Die Konstante befindet sich außerhalb des Bereichs vom Typ "byte".".


    kann ich dieses Temp auch direkt in Char umwandeln, da ich gerne den If(temp == startbedinung) und If(temp == Endbedinung) mit einem Char vergleich will und direk auf den rich text box als Char ausgeben will. wie sieht das dann aus ?

    mfg

  2. #2
    shedepe
    Gast
    Ohh, ja, klar ein byte geht nur von 0 bis 255. Also deklarier die variable temp statt als byte als int und lass bei serialPort1.ReadByte() den cast nach byte weg. Dann sollte die Warnung nicht mehr da sein.

    Damit das ganze allerdings halbwegs erfolg haben kann, würde ich dich bitten dir echt noch mal paar Grundlagen anzuschauen. Das Datenverarbeiten vom SerialPort (der in C# ehh etwas zickig ist) gehört nicht wirklich zu den Einstiegsprogrammen. Z.B. schau dir an was eine globale Variable ist und wie man einen typ in einen anderen Castet.

    Zum Casten mit der Startbedinung wird dir das hier weiterhelfen:
    Angenommen '#' ist die Startbedingung dann kannst du schreiben:

    if(temp == (byte)'#')

    Das direkte ausgeben auf die richTextBox1 sollte sowie so nicht funktionieren, da du einen Fehler aufgrund eines Threadübergreifendenvorgangs bekommen solltest.

  3. #3
    shedepe
    Gast
    So da viel Fragen kamen die sich eigentlich um die selben Kernfragen kamen wollte ich diese noch mal zusammenfassen und auch an dieser Stelle hier auf das Galileo Openbook für C# verweisen, das vollkommen kostenlos und legal im Web erhältlich ist:
    http://openbook.galileocomputing.de/csharp/

    Nun zu den Hauptfragen:

    Wie konvertiere ich den Typ integer (int) in den Typ byte oder in den Typ char?

    Entweder mit einem direkten Cast (der in diesem Fall aufjedenfall funktioniert)
    oder mit der Klasse Convert
    BeispielCode:
    Code:
    int MeinInteger = 100;
    byte MeinByte;
    char MeinChar;
    
    //Den int in byte konvertieren
    MeinByte = (byte)MeinInteger;
    //oder
    MeinByte = Convert.ToByte(MeinInteger);
    
    //Den int in einen char konvertieren
    MeinChar = (char)MeinInteger;
    //oder
    MeinChar = Convert.ToChar(MeinInteger);
    Wenn man bei einen Integer die Methode .ToString() aufruft bekommt man die Zahl als Zeichenkette zurück
    Bsp:
    int EineZahl = 120;
    string EineZeichenkette = EineZahl.ToString();
    //In eine Zeichenkette stehen nun die drei Ziffern 1,2 und 0 drin (Das selbe wie: "120");


    Was ist eine globale Variable?
    In jeder Klasse haben wir verschiedene Methoden. Z.B. Methoden die aufgerufen werden wenn auf einen Button geklickt wurde.
    Nun kann man in einer Methode Variablen definieren auf die man allerdings nicht aus anderen Methoden zugreifen kann.
    Beispiel:
    Ich habe eine Variable in der Methode die aufgerufen wird wenn auf den Button1 geklickt wird. Aus der Methode die aufgerufen wird wenn eine zweiter Button geklickt wird kann man nicht darauf zugreifen.
    Nun gibt es allerdings den Fall, dass auf Variablen aus jeder Methode einer Klasse zugreifen will (Z.B. um einen Status zu speichern), dazu gibt es globale Variablen:

    Beispiel Code:
    Code:
    //Dieser Code steht innerhalb einer Klasse
    
    //Nun eine Globale Variable
    int MeinGlobalerInt = 10;
    
    public void Methode1()
    {
    //Eine lokale Variable
    int MeinLokalerInt = 0;
    
    //Auf die Globale Variable kann ich auch hier zugreifen
    MeinGlobalerInt = 15;
    
    }
    public void Methode2()
    {
    //Auch hier kann ich auf die Globale Variable zugreifen:
    MeinGlobalerInt = 99;
    
    //Auf die Variable aus Methode1 "MeinLokalerInt" kann ich jedoch nicht zugreifen
    MeinLokalerInt = 10; //Gibt Fehlermeldung
    
    }
    Ich erhalte die Fehlermeldung "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement "..." erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."


    Hierzu möchte ich nur auf den folgenden Link verweisen:
    http://www.mycsharp.de/wbb2/thread.php?threadid=33113
    Geändert von shedepe (27.05.2013 um 10:52 Uhr)

  4. #4
    shedepe
    Gast
    Hallo ich hab die Komponente mal etwas erweitert mit Multithreading und Pipes and Filter Architektur bei der der Bytedatenstrom in Datenpaket Objekte zerlegt wird.
    https://www.roboternetz.de/community...pes-and-Filter

Ähnliche Themen

  1. SerialPort & Visual Studio 2008
    Von fat tony im Forum Software, Algorithmen und KI
    Antworten: 31
    Letzter Beitrag: 09.01.2012, 14:26
  2. Warum bremst SerialPort mein Programm aus?
    Von exaware im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 12
    Letzter Beitrag: 29.01.2010, 22:27
  3. Von String to Hex SerialPort
    Von !*sascha*! im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 04.03.2009, 16:52
  4. [ERLEDIGT] Einzelne Leitungen des Serialport steuern
    Von wollez im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 18.02.2005, 20:06
  5. Welche Programmiersprache für SerialPort und Multimedia?
    Von tfranz im Forum Software, Algorithmen und KI
    Antworten: 4
    Letzter Beitrag: 31.08.2004, 13:25

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen