-         

Ergebnis 1 bis 7 von 7

Thema: VS 2010 und Serial Port

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2012
    Beiträge
    10

    VS 2010 und Serial Port

    Anzeige

    Hey Leute,
    ich muss für meine PA mit VS 2010 einen Micro abfragen und die Daten in SQl abspeichern.
    und bevor ich jetzt mich dumm und dämlich suche. Frage ich lieber nach der groben Richtung bei euch nach. wenn das in Ordnung ist.

    wie Forms läuft ist klar. Ist nur der serial Port der mir Kopfzerbrechen macht.
    Ne Grobe Anleitung würde mir wirklich weiterhelfen.

    Viel Dank schon mal.

    Gruß Eik

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    310
    Hallo Eik,

    VS 2010,... welche Programmiersprache nimmst Du denn(C#, C++ usw...)?
    Meinst Du einen Microprozessor über einen seriellen Port abfragen,...da Du nur "einen Micro abfragen" schreibst?

    Prinzipiell kannst Du den seriellen Port auch über die Toolbox einbinden und die Eigenschaften konfigurieren. Ebenfalls auf der Basis kannst Du den Ereignishandler für den Empfang einrichten.
    Genaueres dann je nach Sprache, allerdings gibt es aber hier im Forum schon Beispiele die bei der Suche auftauche.

    Gruß André
    Geändert von Andre_S (19.06.2012 um 19:46 Uhr)
    http://home-robotics.de
    ____________________________

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2012
    Beiträge
    10
    Danke für die schnelle Antwort.
    Ich will einen Microcontroller (FEZ PANDA 2 GHI) über den Port abfragen.
    Wird alles in C# geschrieben.

    Dann such ich mal

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    310
    Hallo Eik,

    da gibt es natürlich viele Wege zum Ziel…
    Wie bereits gesagt im einfachsten Fall über die Toolbox die serielle Schnittstelle ins Windows Form einbinden und entsprechend die Parameter wie Baudrate Com-Port etc. direkt setzen.

    Allerdings kannst Du die Parameter auch innerhalb des Programmes ändern, setzen oder anpassen:
    // Port Schließen wenn bereits offen um Änderungen vorzunehmen
    if (serialPort1.IsOpen) serialPort1.Close();

    // Eigenschaften einzeln direkt einstellen
    serialPort1.PortName =
    serielPort1.xxxx =


    // oder über ein Auswahlfeld der ComboBox
    serialPort1.BaudRate = int.Parse(cmb_Baudrate_Anlage1.Text);


    //Com Port öffnen
    try
    {
    serialPort1.Open();
    }
    catch (Exception)
    {

    //Ausführen wenn Port nicht geöffnet werden kann
    }

    Wenn Du einzelne Bytes schicken möchtest hier eine Variante, wobei es für Write verschiedene Überladungen gibt.

    // als Bytes oder Char Buffer senden mit Offset(int) und Count(int)
    byte[] Send_NKE = { 0x10, 0x40, 0xFD, 0x3D, 0x16 };
    serialPort1.Write(Send_NKE, 0, 5);


    // als String senden
    String Send_Text = “Das ist ein Test”;
    serialPort1.Write(Send_Text);


    Für den Empfang wäre interessant ob Du jederzeit Informationen auf der Schnittstelle erwartest, in dem Falle im Eigenschaftsfenster/Ereignisse einen Ereignisshandler zu einfügen:

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
    // wird beim Eingang von seriellen Daten aufgerufen
    }

    Wenn Du aber nur definierte Antworten unmittelbar nach dem senden erwartest kannst Du diese nach einer Antwortzeit auch direkt abfragen:
    Auch hier gibt es wieder verschiedene Möglichkeiten welche ich jetzt nicht alle ausführen möchte…

    // Bytes oder Char empfangen
    serialPort1.Read(Buffer, 0, serialPort1.BytesToRead);

    // als String lesen
    String = serialPort1.ReadLine();

    Hier gibt es nun für die Auslesung des Empfangsbuffers verschiedene Varianten welche sinnvollerweise vom Thema abhängig sind. Wichtig ist dass der Buffer nicht zu zeitig ausgelesen wird um alles zu erfassen oder entsprechend behandelt wird um die gesamten Daten auszulesen.

    Auch solltest Du zu passenden Zeiten durchaus mal an das Buffer löschen denken:

    serialPort1.DiscardInBuffer();
    serialPort1.DiscardOutBuffer();



    Ich hoffe das hilft als Anregung,
    Gruß André
    http://home-robotics.de
    ____________________________

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    20.03.2012
    Beiträge
    10
    Anbei mein Versuch Daten zu senden, zu empfangen und in einer Labelbox anzeigen zu lassen.

    Hab die Warnmeldungen:

    Der Puffer darf nicht NULL sein.

    Ne kleine Hilfe wäre nett. Vielen Dank schon mal für die Mühe.
    ------------------------------------------------------------------------

    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.Diagnostics;

    namespace SerialPort
    {
    public partial class Form1 : Form
    {
    string pp;
    char [] Buffer;

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    Form3 form = new Form3();
    form.Show(); // wird beim Eingang von seriellen Daten aufgerufen
    }

    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    try
    {

    serialPort1.Open();

    }
    catch (Exception)
    {
    Form2 form = new Form2();
    form.Show();//Ausführen wenn Port nicht geöffnet werden kann

    }
    serialPort1_DataReceived(sender, e);
    }

    private void serialPort1_DataReceived(object sender, EventArgs e)
    {

    String Send_Text = "Das ist ein Test";
    // serialPort1.Write(Send_Text);
    // throw new NotImplement
    // serialPort1.Read(Buffer, 0, serialPort1.BytesToRead);
    serialPort1.Read(Buffer,0, ; // -------- hier erscheint die Fehlermeldung : Der Puffer darf nicht NULL sein.-----------------
    // int z= serialPort1.ReadChar();
    Form3 form = new Form3();
    form.Show();

    // pp = serialPort1.ReadLine(); // wird beim Eingang von seriellen Daten aufgerufen

    //textBox1.Tag = pp;



    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    textBox1.Tag = pp;
    }



    }
    }

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    310
    Hallo Eik,

    ich glaube Du musst Dich unbedingt weiter in die Programmierung einarbeiten, zumindest würde ich das so interpretieren wenn ich Deine bisherigen Programmzeilen so anschaue. Die anderen Inhalte von Windows Form sehe ich llerdings nicht.
    Warum arbeitest Du mit so vielen Fenstern?
    Um z.B. die Exception zu bedienen wäre dies meiner Ansicht nach sinnvoller, allerdings kenne ich Deine Hintergründe nicht:

    MessageBox.Show("Fehler beim öffnen", "Schnittstelle", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);

    Du kannst auch nicht einfach eine Anzahl Bytes aus dem seriellen Buffer holen ohne zu prüfen ob diese überhaupt in ausreichender „Menge“ vorhanden sind.

    Bist Du sicher, dass Du genau das mit Deiner TextBox machen willst was Du da eingegeben hast…
    Schaue Dir nochmal die Hilfe dazu an…

    Aber lassen wir das jetzt mal, Du wirst Dich schon Stück für Stück durchbeißen,… zu Deiner eigentlichen Frage:

    Definiere einfach eine Anzahl Bytes für Deinen Buffer, also statt:

    char[] Buffer;

    so:

    char[] Buffer = new char[250];
    //z.B. Buffergröße 250 Byte


    Gruß André
    http://home-robotics.de
    ____________________________

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    Hey genau dafür hab ich mal ein recht ausführliches Beispiel geschrieben:
    http://www.roboternetz.de/community/...ght=Serialport
    Da wird auch genau drin beschrieben wie man die Daten sich in WinForms anzeigen lassen kann und worauf man achten muss. Auf der letzten Seite sind noch mal häufig auftretende Probleme zusammengefasst.

    Ps. Was das mit dem Buffer angeht würde ich lieber eine System.Collections.Concurrent.ConcurrentQueue<T> verwenden.

Ähnliche Themen

  1. Problem mit Serial Port (empfang)
    Von Tredory im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 07.03.2009, 18:23
  2. Virtual Serial Port
    Von varius im Forum Robby RP6
    Antworten: 1
    Letzter Beitrag: 10.12.2008, 11:02
  3. Serial COM PORT am PC finden
    Von Hucky im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 5
    Letzter Beitrag: 17.12.2007, 20:01
  4. serial port über pascal
    Von pascal01 im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 13.06.2005, 07:54
  5. Linux Serial Port Problem
    Von PistolPete im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 7
    Letzter Beitrag: 09.01.2005, 14:27

Stichworte

Berechtigungen

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