Hallo zusammen ich habe das Problem, das Mein Programm hängt sobald ich
meinen Serial Port auslesen will.
Ich möchte Dauerhaft Daten auslesen von einer Com Schnittstelle und ein
Start Signal für die Anlage Senden.
mein Code den ich dauerhaft einlesen will kommt so an T25.21F90.54E
Temperatur = 25.21 Füllstand = 90.54 das E steht für Ende
anbei der Code..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace Comschnittstelle
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string[] ports = SerialPort.GetPortNames();
cmb_COM.Items.AddRange(ports);
}
private void btn_An_Click(object sender, EventArgs e)
{
serialPort1.PortName = cmb_COM.Text;
serialPort1.Open();
timer1.Start();
}
private void btn_Aus_Click(object sender, EventArgs e)
{
timer1.Stop();
serialPort1.Close();
}
private void timer1_Tick(object sender, EventArgs e)
{
string werte = serialPort1.ReadTo("E");
char[] char1 = new char[] { 'T', 'F' };
string[] strings = werte.Split(char1);
txt_Temp.Text = strings[1].ToString();
txt_Fuel.Text = strings[2].ToString();
}
private void btn_Start_Click(object sender, EventArgs e)
{
timer1.Stop();
if (serialPort1.IsOpen)
{
serialPort1.WriteLine("s");
}
else
{
MessageBox.Show("Port nicht göffnet");
}
timer1.Start();
}
}
}
vllt könnt ihr mir ja helfen was ich falsch mache
gruß Dominic
Gast
#6161493
Guck doch erst mal nach, ob überhaupt irgendwas im Empfnagspuffer steht: "BytesToRead" ReadTo ist eine blockierende Funktion, die den Progammablauf anhält, bis das gewünschte Zeichen empfangen wurde.
STK500-Besitzer schrieb: > Guck doch erst mal nach, ob überhaupt irgendwas im Empfnagspuffer steht: > "BytesToRead" Sehe ich auch so. Wahrscheinlich ist die Baudrate, Parity oder Datenbreite falsch eingestellt und es liegt garnichts im Eingangspuffer.
Gast
#6161503
geht es denn von Hand?: http://www.der-hammer.info/pages/terminal.html so lange es im Terminal nicht sauber funktioniert würde ich auch auf Verbindungsprobleme tippen
Gast
#6161728
Doch das passt alles sobald ich den Port öffne hängt das Formular, das heißt ich kann den Port nicht mehr schließen... Die Daten werden angezeigt und verändern sich auch wenn sich die Daten an der seriellen Schnittstelle Ändern. Mein Problem liegt also nur darin dass mein Formular sich aufhängt ich ich somit die Schnittstelle nicht mehr schließen kann und auch kein Startsignal Schicken kann.
Gast
#6162418
Mach deinen SerialPort-Kram ggf. einfach in einem BackgroundWorker und update die UI von der DoWork des BackgroundWorkers aus via ReportProgress(). Dann friert dir die Oberfläche nicht ein, wenn .ReadTo() auf Daten wartet. Einen BackgroundWorker kann man wie den Timer in der Toolbox finden und einfach auf die Form ziehen. Zum BackgroundWorker wird man gut Tutorials finden können. (In Windows.Forms kann man in der Regel UI-Elemente nicht ohne weiteres von anderen Threads/BackgroundWorkern aus updaten, daher den Umweg über ReportProgress() oder Invokes gehen!)
Danke für Antwort jedoch hat das ganze nicht so funktioniert wie ich das wollte. mit dem ReportProgress() kann ich leider nur ein int übergeben und kein String und wenn ich das alles nur in den DoWork auslagere dann bekomme ich ebenso eine Fehlermeldung.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.