-
OK mach ich aber ich würde aber auch gerne mas sehn wie du die Daten von Comport holst. ( Event-Handler usw.. )
Buffer erstellen:
Code:
byte[] M_byte_Buffer_01 = new byte[5];
byte[] M_byte_Buffer_02 = new byte[5];
Wenn du die Daten hast werden sie abwechselnd in M_byte_Buffer_01 / M_byte_Buffer_02 geschickt ! Und zu gleich holst du die Daten von M_byte_Buffer_01 / M_byte_Buffer_02. Aber nicht von den die gerade beschrieben werden ;)
PS: Wenn man es jetzt genau nimmt ist es 3 fach gepuffert! Ich hab vergessen das beim:
( serialPort1 System.IO.Ports.SerialPort ) Puffer dabei sind?
Wie gross ist "ReadBufferSize" bei dir ?
MFG Oliver G
-
Danke für die Antwort. Ich überlege aber auf USB umzusteigen, dann Hatte ich die Übertragungsprobleme nicht mehr. Kennt sich da jemand aus mit der USB-Kommunikation in C#. Und auch wie ich das mit einem USB-Fähigem Atmell µC mache?
-
Aber Vielleicht bleibe ich doch bei RS232. Hier ist mein Code. Hoffentlich weiß jemand, wie ich es verbessern könnte. Ich verwende einen 6 Byte buffer und das Data_Recive Event wird nach 5 empfangenen Bytes ausgelöst.
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 NationalInstruments;
using NationalInstruments.UI;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public static double Messwert;
public static int werte = 0;
public static double[] dataValues = new double[200];
public Form1()
{
InitializeComponent();
serialPort1.Open();
}
private delegate void SetTextDeleg(double text);
public void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
double messval = messen();
this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { messval });
waveformGraph1.PlotY(dataValues, 0, 10, 0, 5);
}
private void si_DataReceived(double data)
{
label1.Text = data.ToString();
meter1.Value = data;
}
public double messen()
{
string mess = "";
mess = serialPort1.ReadTo("a");
serialPort1.DiscardInBuffer();
try
{
Messwert = Convert.ToDouble(mess) / 1023 * 5.07*2.794;
dataValues[i] = Messwert;
i++;
}
catch
{
serialPort1.DiscardInBuffer();
}
return Messwert;
}
}
}