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
Hallo toto45,
wird Read() überhaupt vom event ausgelöst?
MfG
Rabban
?? 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
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.
_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
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.