Hallo,
ich habe ein Gerät an Com1, welches permantent Daten schickt - kann ich mit dem HyperTerminal nachsehen!
Nun wollte ich meine kleine C#-Anwendung unter VS C# Express schreiben zum Auslesen der Daten, was sich aber nun gut zwei Tage hinzieht und sich zum echten Problem entwickelt 😉
Ich bekomm aktuell KEINE Daten mit dem unten abgebildeten Code - kann mit jemanden Helfen bzw. sieht den Fehler?
Danke,
Franz
Code:
class SerialPortProgramm
{
SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
public static void Main()
{
SerialPortProgramm obj = new SerialPortProgramm();
obj.startReading();
obj.doSomething();
obj.stopReading();
System.Console.ReadLine();
}
private SerialPortProgramm()
{
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
private void startReading()
{
port.RtsEnable = true;
port.Encoding = Encoding.ASCII;
port.Open();
System.Console.WriteLine("startReading");
}
private void stopReading()
{
port.Close();
System.Console.WriteLine("stopReading");
}
private void doSomething()
{
// port.Write("&hFFFF");
while(true)
{
// int size = port.BytesToRead;
// System.Console.WriteLine("Size: {0}", size);
}
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(port.ReadExisting());
}
}
Hallo,
wenn ich das richig sehe, machst Du den port zwar auf, liest aber keine Daten.
Iregndwo müsste noch ein port.Read() oder port.ReadExisting() gerufen werden.
EDIT:
Vergiss es, ich sollte meine Augen aufmachen.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
kommst Du denn überhaupt in dem Handler vorbei? Vllt. wird DataReceived erst ausgelöst, wenn man vorher ein Read macht?
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Folgener Code der Schleife in doSomething()
int size = port.BytesToRead;
System.Console.WriteLine("Size: {0}", size);
liefert => Size: 0
und
System.Console.WriteLine("Line: {0}", port.ReadLine());
liefert => "" ... er bleibt bei port.ReadLine() stehen, da nichts zum Lesen da ist!
Cori