Autor Beitrag
andy11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 21.05.10 21:09 
ich habe mir HERCULES runtergeladen und habe mal die Daten, die ich vom STK500, über die ein ATMEGA16 Daten zurückschickt, bekomme ausgelesen.
Dann habe ich gestoppt und mit meinem Programm ausgelesen.
Siehe da: Es kommen genau die Hälfte der Daten an. Dh: ein Wert wird immer ausgelassen, aber wieso`?
Es kann einmal nicht and der Hardware liegen und alle EInstellungen vom HERCULES stimmen mit meinem Programm überein.
Irgend eine Idee was da der Hund sein kann?

lg andy

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
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.Threading;

namespace SerielleSchnitschtelle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false//Da sonst: Ungültiger threadübergreifender Vorgang
        }

        private void cmdclose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cmdReceive_Click(object sender, EventArgs e)
        {
            serialPort1.BaudRate = Convert.ToInt16(cBBaud.Text);    //übernehme neue Einstellungen
            serialPort1.PortName = cBSchnitt.Text;                  //port usw...
            Schluss = false;
            backgroundWorker1.RunWorkerAsync();
        }
        
        bool Schluss = false;   
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            do
            {
                serialPort1.Open();
                rtxtReceive.Text += serialPort1.ReadLine() + "\n";
                serialPort1.Close();
            }
            while (Schluss != true);
        }

        private void cmdStop_Click(object sender, EventArgs e)
        {
            Schluss = true;
            backgroundWorker1.CancelAsync();
        }

        private void cmdClear_Click(object sender, EventArgs e)
        {
            rtxtReceive.Text = null;
        }

    }
}
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 21.05.10 22:46 
Also, in einem BackgroundWorker den Port zu öffnen und zu schließen, das ist auf jeden Fall der falsche Weg.

Du öffnest den Port so lange Du Daten empfangen willst und erst wenn Du nichts mehr "hören" willst, schließt Du den Port. Währenddessen reagierst Du auf das DataReceived-Event des Ports. In dem rufst Du dann ReadLine auf.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".