- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
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
    19.07.2011
    Beiträge
    17
    hoffe du blickst durch..

    und wenn du mir da jetzt den passenden code schreibst, bin ich dir unendlich danklbar
    versuche das jetzt natürlich noch selber und morgen auch

    aber wäre dir echt dankbar wenn du was schreibst, ist ja ein leichtes für dich

    DANKE


    PS: ich möchte es auch ohne globale variabeln...hab das eben verucht, gefällt mir alles nicht so :/
    Geändert von bZzR (28.07.2011 um 10:37 Uhr)

  2. #2
    shedepe
    Gast
    Dann wirst du wohl nicht darum kommen dir anzuschaun was das mit den Delegaten auf sich hat, da du ja Daten übergeben möchtest.
    Die Variante mit der globalen Variable ist allerdings wesentlich einfacher:
    Code:
    string Daten = "";
    void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    {     
       Daten = serialPort.ReadLine();   
       lbRecieved.Invoke(new MethodInvoker(MethodeZumDatenInListboxSchreiben)); 
    } 
    void MethodeZumDatenInListboxSchreiben() 
    {    
       lbRecieved.Items.Add(Daten); 
    }

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    17
    schon mal danke dafür
    würds halt gern über delegate machen... wie gesagt habe wirklich gestern 12std fast am stück versucht das zu verstehen
    im internet ist jeder code anders und ich sehe nie einen zusammenhang

    deswegen meine hoffung das du zu meinen code einen passenden befehl eben schnell schreiben kannst...oder ist das schon so viel
    wills ja gern selber machen, aber grad komm ich einfach nicht vorran

  4. #4
    shedepe
    Gast
    Hast du auch schon in der MSDN unter delegate geschaut ? Ist zwar recht viel aber auch verständlich.
    http://msdn.microsoft.com/de-de/libr...(v=vs.80).aspx

    Warum übernimmst für den Threadübergreifendenzugriff eigentlich nicht den Code aus meiner Beispielanwendung? Da hab ich ja auch einen Delegaten verwendet

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    17
    das hat ich auch schon gelesen

    ja un deinen code ausm terminal hatte ich auch versucht...
    sind ja halt mehrere teile..und es passt alles irgendwie nciht zsm... habs versucht anzupassen aber klappt einfach nicht,
    weil ich wohl das prinzip von dem delegate und invoke befehl nich versteh -.-

  6. #6
    shedepe
    Gast
    Der Delegate ist quasi ein Zeiger auf eine Methode. Und den kann man halt einer anderen Methode übergeben. Der Invoke Befehle sagt dem GUI Objekt (in dem Fall eine Listbox): He ich will auf dich aus einem anderen Thread zugreifen.
    In meiner Beispielanwendung hab ich den delegaten zuerst deklariert:
    Code:
            delegate void InvokeLB(string Data);
    Und dann ein Objekt davon deklariert
    Code:
            InvokeLB lbRecievedDelegate;
    Und dann in der Methode bCreateSP_Click eine neue Instanz erzeugt:
    Code:
              lbRecievedDelegate = new InvokeLB(InvokeLBRecieved);
    Die auf diese Methode hier verweist
    Code:
            void InvokeLBRecieved(string Data) //Parameter stimmen mit der Deklaration des Delegaten überein
            {
                lbRecieved.Items.Add(Data);
            }
    Und in der Methode die Aufgerufen wird wenn neue Daten am SerialPort verfügbar sind rufe ich dann die Invoke Methode der Listbox lbRecieved auf und übergebe ihr den davor instanzierten Delegaten und die Parameter (in dem Fall die Daten die Empfangen wurden)
    Code:
                   lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine});

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2011
    Beiträge
    17
    ich danke dir das du mir hilfst... habs grad versucht..

    lbRecieved und RecievedLine ist im aktuellen Kontex nicht vorhanden



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports; //serielleSchnittstelle
    using System.Collections; //ArrayListe
    using System.Threading; //Delagation invoke (Threadübergreifend)
    using System.Timers; //Timer


    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    delegate void InvokeLB(string Data); //Delegaten deklariert
    InvokeLB lbRecievedDelegate; //Objekt deklariert


    SerialPort Schnittstelle = new SerialPort("COM1"); //Deklaration


    byte[] daten = new byte [3];








    private void Form1_Load(object sender, EventArgs e)
    {
    }

















    private void buttonConnect_Click(object sender, EventArgs e)
    { //Festlegung Parameter=

    Schnittstelle.BaudRate = 9600;
    Schnittstelle.Parity = Parity.None;
    Schnittstelle.DataBits = 8;
    Schnittstelle.StopBits = StopBits.One;
    Schnittstelle.Handshake = Handshake.None;
    Schnittstelle.ReadTimeout = 500;
    Schnittstelle.WriteTimeout = 500;


    try
    {
    Schnittstelle.Open(); //Serialport öffnen

    if (Schnittstelle.IsOpen)
    {
    buttonConnect.Enabled = false; //Connect_Button blass
    buttonConnect.Text = "Erfolgreich";
    }
    }
    catch
    {
    MessageBox.Show("Keine Verbindung möglich", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }


    lbRecievedDelegate = new InvokeLB(InvokeLBRecieved); //neue Instanz
    Schnittstelle.DataReceived += new SerialDataReceivedEventHandler(Nebenthread); // Abo_Event abonnieren

    }



    void InvokeLBRecieved(string Data) //Parameter stimmen mit der Deklaration des Delegaten überein
    {
    lbRecieved.Items.Add(Data);

    }




    void Nebenthread(object sender, SerialDataReceivedEventArgs e) //Diese Methode wird ausgelöst. Wurde vorher abonniert
    {

    //string serialIn = Schnittstelle.ReadLine();

    //listBox1.Invoke(new EventHandler(delegate { listBox1.Items.Add(serialIn); }));



    lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine});

    //this.textBox1.Text = Schnittstelle.ReadExisting();



    }



















    private void buttonDisconnect_Click(object sender, EventArgs e)
    {
    Schnittstelle.Close();
    buttonConnect.Enabled = true;
    buttonConnect.Text = "Connect";
    }

    private void buttonSenden_Click(object sender, EventArgs e)
    {
    daten[0] = 1;
    daten[1] = 2;

    if (Schnittstelle.IsOpen)
    {
    Schnittstelle.Write(daten, 0, daten.Length); //Daten senden
    // oder//Schnittstelle.Write(daten, 0, 2);
    }
    }


    private void Form1_FormClosed(object sender, FormClosedEventArgs e) // Anwendungen schließen = Verbindung trennen
    {
    Schnittstelle.Close();
    }

    }
    }



    ich merke grad wie sehr ich anfänger bin... diese invoke und delegate..methoden..threads... überfordert mich total
    dabei wollte ich heut endlich daten empfangen -.-
    Geändert von bZzR (28.07.2011 um 15:06 Uhr)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    13.02.2012
    Beiträge
    8
    Hi, ich bin zur Zeit in meiner Abschlussprojekt Phase. Unser Thema ist "Realisierung einer Geschwindigkeitsmessung und Rundenzeiterfassung mittels Mikrocontroller". Meine Aufgabe besteht darin die Übertragung der Werte an den PC.

    Ich bin jetzt soweit kommen das ich ein AVR C Programm geschrieben habe und eine Benutzeroberfläche mittels C Sharp erstellt habe. Mein Problem liegt darin das ich die Werte die ich übertragen will nicht immer an die Benutzeroberfläche ankommen. Mal klappt es mal klappt es nicht. Im Terminal Programm kommt immer was an also am AVR C Programm liegt es nicht. Als Anhang habe ich mal das Event mit dem Datenempfang hinzugefügt. Wäre nett wenn jemand mir dabei noch Tipps geben könnte, zur Sicherer Datenübertragung.


    Danke im vorauss
    Angehängte Dateien Angehängte Dateien

  9. #9
    shedepe
    Gast
    Meiner ansicht nach gehst du etwas falsch ran an die Sache. Du hofft dass wenn du ReadByte aufrufst das richtige Byte auch da ist. Aber wer sagt dass der Roboter zu dem Zeitpunkt zu dem du ReadByte aufrufst schon das passende Byte gesendet hat (Außerdem müsstest du auch noch einen Fehler aufgrund eines Threadübergreifenden vorgangs bekommen, da du ohne invoke aus einem anderen Thread auf die Gui zu greifs). Da du sowie so schon mit dem DataRecievedEvent arbeitest würde ich vorschlagen du schickst vom Roboter aus erst mal ein bestimmtes Byte als Startbedingung. Wenn das Empfangen wurde schreibst du jedes weitere byte, das danach kommt in eine liste bis deine Endbedingung kommt. In der Liste weist du dann dass z.B. das erste Byte für die Geschwindigkeit und das zweite Byte dann für die Rundenzeit steht.



    Code mäßig könnte das ganze im RecievedEvent so aussehen:
    //Globale Variable
    bool PaketStart = false;


    //Event

    byte temp = 0;
    while(temp != -1)
    {
    temp = (byte)serialPort1.ReadByte();
    if(PaketStart)
    {
    if(temp == Endbedingung)
    {
    //Rufe eine Prozedur auf die die Daten in der Liste verarbeitet

    }
    Liste.Add(temp);
    }
    if(temp == StartBedingung)
    {
    PaketStart = true;
    }


    }

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    13.02.2012
    Beiträge
    8
    Bin nicht frisch in dem Bereich C Sharp, wolte jetzt noch fragen was das Liste.Add(temp) bedeutet? da er mir die Liste rot unterschstreicht

Seite 1 von 2 12 LetzteLetzte

Ä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. 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
  •  

LiFePO4 Speicher Test