Laden...

RS232 Verbindung: senden geht, empfangen nicht

Erstellt von toto45 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.837 Views
T
toto45 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren
RS232 Verbindung: senden geht, empfangen nicht

Hallo,
habe vor ein paar Tagen ganz neu angefangen mit C# in Visual Studio 2010. Ich habe eigentlich eine ganz einfache Aufgabe. Senden und Empfangen über die Serielle Schnittstelle. Senden ist kein Problem aber empfangen kann ich nichts. Hier mein Code


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;
using System.Threading;


namespace RS232_Verbindung_Test
{
    public partial class Form1 : Form
    {
                
        static SerialPort _serialPort;
        string Texte,message;
        
        public Form1()
        {
            InitializeComponent();
        }

        public static void SEND(string Texte)//Funktion zum Senden
        { 
            _serialPort.Open();
            _serialPort.WriteLine(String.Format(Texte));
            _serialPort.Close();
        }

       private void Read(object sender,SerialDataReceivedEventArgs e)//Funktion zum Lesen
        {
            message = _serialPort.ReadLine();
            this.BeginInvoke(new EventHandler(DoUpdate));   
        
        }

       private void DoUpdate(object s, EventArgs e)//Funktion für empfangenen Text in Textbox einzufügen
       {
           textBox1.Text += message;
       }

       private void button1_Click(object sender, EventArgs e)// Sende Button
       {
           Texte = "Hallo";
           SEND(Texte);
       }

        private void button2_Click(object sender, EventArgs e) //Connect COM1 Button
        {
            //string message;
            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;


            // Create a new SerialPort object with default settings.
            _serialPort = new SerialPort();

            // Allow the user to set the appropriate properties.
            _serialPort.PortName = "COM1";
            _serialPort.BaudRate = 9600;
            _serialPort.Parity = Parity.None;
            _serialPort.DataBits = 8;
            _serialPort.StopBits = StopBits.One;
            //_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

            // Set the read/write timeouts
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(Read);
        }
           
    
    }

Ich klicke zuerst auf den CONNECT COM1 Button. Wenn ich dann auf den SENDE Button klicke wird auch gesendet. Aber sende ich von dem anderen PC etwas wird mir nie etwas in die Textbox eingefügt.

Wäre super wenn ihr mir helfen könntet!!!

Gruß
007

106 Beiträge seit 2011
vor 11 Jahren

Hallo toto45,

wird Read() überhaupt vom event ausgelöst?

MfG
Rabban

T
toto45 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren

?? Sorry bin wie gesagt absoluert Einsteiger!!!

Ich dachte die Funktion Read() wird einfach bei jedem programmdurchlauf wieder aufgerufen(also sequenziell). Und die anderen Funktionen nur bei einem Klick auf den jeweiligen button. Ist dem nicht so??

Gruß
007

C
258 Beiträge seit 2011
vor 11 Jahren

Data received wird aufgerufen wenn auch wirklich daten an der seriellen schnittstelle ankommen. (Event basierend nicht sequenziell)

was Rabban meinte war ob diese Methode auch überhaupt einmal aufgerufen wird.

wenn du nämlich den port zu machst kannst du nichts mehr lesen / das event wird nicht mehr ausgelöst.

106 Beiträge seit 2011
vor 11 Jahren

_serialPort.DataReceived += new SerialDataReceivedEventHandler(Read);

Gibt an, das sobald _serialPort Daten erhält, soll die Funktion Read() aufgerufen werden.
Read() hat 2 Parameter:


object sender, SerialDataReceivedEventArgs e

der "sender" ist _serialPort.
"e" sind zusätzliche Informationen zu dem ausgelösten Vorgang.
In "e" solltest du auch alle nötigen Informationen zu dem ausgeösten Ereignis finden, unter anderem auch was an _serialPort gesendet wurde.
Bin nicht vertraut mit der Klasse SerialPort, deshalb kann ich dir auch nicht aus dem Kopf sagen, welche Infos darin enthalten sind. Die Doku dürfte dir darüber aber einiges erzählen können.

Desweiteren würde ich dir auch empfehlen, das du dich erstmal durch die Basics durcharbeitest.
Für Ein- und Umsteiger ist dieses kostenlose Buch Visual C# 2010 von Andreas Kühnel sehr gut geeignet.

Um nochmal auf dein Problem zu kommen, setz einfach mal nen Breakpoint in Read() und schau ob der überhaupt ausgelöst wird und wenn ja, was es genau macht.

MfG
Rabban

185 Beiträge seit 2005
vor 11 Jahren

        public static void SEND(string Texte)//Funktion zum Senden
        {
            _serialPort.Open();
            _serialPort.WriteLine(String.Format(Texte));
            _serialPort.Close();
        }

das funktioniert so nicht. Du musst den Serialport öffnen, und auch geöffnet lassen.

Wenn du hier mal die Suche benützt, dann wirst du einige Beiträge finden, die dir weiterhelfen.

888 Beiträge seit 2007
vor 11 Jahren
T
toto45 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren

Ich habe es geschafft. Danke an alle...

Gruß
007