C# SerialPort aus lesen

OP #2396094
Lesenswert?

Hallo,

ich arbeit gerade daran meinen Microkontroller mit dem PC zu verbinden.
Um eine Maschiene gescheit steuern zu können reichen mir die ganzen 
Terminal Programme nicht aus, drum wollte ich es mal mit einem Windows 
Forms in C# veruchen.

Ich habe jetzt ein Programm geschieben wo ich einen String in eine 
TextBox schreibe und dieser mit Enter drücken an den Microkontroller 
gesendet wird. Bis hier hin klappt alles. doch nun soll der 
Microkontroller eine bestätigung zurück senden aber nix passiert nur 
eine Fehlermeldung kommt:

Eine nicht behandelte Ausnahme des Typs "System.IO.IOException" ist in 
System.dll aufgetreten.

Zusätzliche Informationen: Der E/A-Vorgang wurde wegen eines Threadendes 
oder einer Anwendungsanforderung abgebrochen.

Mein coode:
1
private void textBox1_KeyDown(object sender, KeyEventArgs e)
2
        {
3
            if (e.KeyCode == Keys.Enter)
4
            {
5
                
6
                serialPort1.WriteLine(textBox1.Text);
7
               
8
                textBox1.Clear();
9
                
10
            }
11
        }
12

13
        private void Form1_Load(object sender, EventArgs e)
14
        {
15
            CheckForIllegalCrossThreadCalls = false;
16
            serialPort1.Open();
17
        }
18

19
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
20
        {
21
            label1.Text = serialPort1.ReadLine();
22
        }
#2396140
Lesenswert?

Ben S. schrieb:
> ich bin mit c# noch nicht so dicke.
> wie mach ich das?

In dem Fall gar nicht...
Fehlerursache ist, wie in dem anderen Thread vor einigen Wochen
Beitrag "Serielle Daten empfangen mit C#"

- DataReceived wird aufgerufen, wenn Daten vorhanden sind
- DataReceived läuft in einem (eigenen) Thread,
- ReadLine blockiert den Thread in dem DataReceived läuft
- Was passiert wenn jetzt neue Daten angekommen?
OP #2396263
Lesenswert?

der Beitrag "Serielle Daten empfangen mit C#" hat ja nun das selbe 
problem schön das er geschafft hat das problem zu lösen aber selber 
nicht weis warum. der hat einfach nur noch mal alles neu programmiert 
und da hats geklappt. der einzige wesentliche unterschied zu zu meinem 
programm und seinem endprogramm ist nur die try catch anweisung. wenn 
ich die bei mir ein setzte kommt zwar keine fehlermeldung mehr aber die 
daten wurden immer noch nicht empfangen.
OP #2396592
Lesenswert?

Geschafft!!!
Seit 18:00 Uhr sitze ich an dem scheiß Programm und nun fehlt es an 
einem Zeichen. dem newline zeichen.

dachte es reicht wenn ich das Null zeichen 0x00 hinten mit an hänge doch 
das Programm funtzt nur wenn ich einen Zeichenvorschub verwende dem LF 
also 0x0A

Erfolgserlebniss für Heute gehabt. Ich geh jetzt penn...
#2396678
Lesenswert?

Ben S. schrieb:
> Geschafft!!!
> Seit 18:00 Uhr sitze ich an dem scheiß Programm und nun fehlt es an
> einem Zeichen. dem newline zeichen.
>
> dachte es reicht wenn ich das Null zeichen 0x00 hinten mit an hänge doch
> das Programm funtzt nur wenn ich einen Zeichenvorschub verwende dem LF
> also 0x0A
>
> Erfolgserlebniss für Heute gehabt. Ich geh jetzt penn...

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.newline.aspx
Gast #2396696
Lesenswert?

Hier ein kleines Beispiel mit C#, Forms, .Net4. Die benutzte Textbox 
muss natürlich in der Forms-Anwendung existieren.

1
using System;
2
using System.Windows.Forms;
3
using System.IO.Ports;
4

5
namespace SerialPortWinForms
6
{
7
  public partial class Form1 : Form
8
  {
9
    SerialPort myport;
10
    delegate void UpdateCallback(string s);
11
    
12
    public Form1()
13
    {
14
      InitializeComponent();
15
      myport = new SerialPort("com1", 9600);
16
      myport.DataReceived += OnDataReceived;
17
      myport.Open();
18
    }
19

20
    void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
21
    {
22
      SerialPort sp = (SerialPort) sender;
23
      textBox1.Invoke(new UpdateCallback(this.UpdateTheTextbox), sp.ReadExisting());
24
    }
25

26
    void UpdateTheTextbox(string s)
27
    {
28
      textBox1.Text += s;
29
    } 
30
  }
31
}

DropsMan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren