Hallo, ich habe folgendes Problem: Ich bekomme zwar Daten, aber durch den String keine richtigen. Wie kann ich den im Quellcode schreiben damit er mir 2 Bytes ausspukt(niederwertiges Byte und höherwertiges Byte) die muss ich zusammenlegen und dann damit weiterrechnen um auf die Drehzahl zu kommen. Bin leider noch C# anfänger und komme hier nicht weiter, hier mein Code: using System; using System.Collections.Generic;//ArrayListe using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading;//Delagation invoke (Threadübergreifend) using System.Diagnostics; using System.IO.Ports;//serielleSchnittstelle namespace WindowsFormsApplication1 { public partial class Form1 : Form { string RecievedLine;// RecievedLine nicht lokal, sondern in der Klasse definieren byte[] Bereitp; public Form1() { InitializeComponent(); } delegate void InvokeLB(string RecievedLine); InvokeLB lbRecievedDelegate; private void button1_Click(object sender, EventArgs e) { Port_open(); } private void Port_open() { byte[] Startk = new byte[1]; Startk[0] = 1; //try{ COM2.Open(); //Serialport öffnen if (COM2.IsOpen){ button1.Enabled = false; //button1 blass button1.Text = "Erfolgreich"; } // } //catch{ //MessageBox.Show("Keine Verbindung möglich", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); //} COM2.Write(Startk, 0, 1); Thread.Sleep(1000); Bereitp = new byte[1]; Startk[0] = 3; COM2.Write(Startk, 0, 1); Thread.Sleep(50); Startk[0] = 10; COM2.Write(Startk, 0, 1); COM2.Read(Bereitp, 0, 1); Debug.Print(BitConverter.ToString(Bereitp)); } private void button2_Click(object sender, EventArgs e) { Port_Close(); } private void Port_Close() { byte[] Stop = new byte[1]; Stop[0] = 0; COM2.Write(Stop, 0, 1); COM2.Close(); } private void COM2_DataReceived(object sender, SerialDataReceivedEventArgs e) { RecievedLine = COM2.ReadExisting(); //int16 drehzahl = BitConverter.ToInt16(); this.BeginInvoke(new EventHandler(DisplaySerialData)); // lbRecieved.Invoke(lbRecievedDelegate, new object[] { RecievedLine }); } private void DisplaySerialData(object sender, EventArgs e) { Debug.Print(Convert.ToString(RecievedLine)); // MessageBox.Show(RecievedLine); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) // Anwendungen schließen = Verbindung trennen { byte[] Stop = new byte[1]; Stop[0] = 0; COM2.Write(Stop, 0, 1); COM2.Close(); } } } Würde mich über Hilfe sehr freuen. Greez Toni
Habs hiermit hinbekommen: void InvokeLBRecieved(string Data) //Parameter stimmen mit der Deklaration des Delegaten überein { lbRecieved.Items.Add(Data); } private void COM2_DataReceived(object sender, SerialDataReceivedEventArgs e)//Diese Methode wird ausgelöst. Wurde vorher abonniert { string RecievedLine = COM2.ReadExisting(); lbRecieved.Invoke(lbRecievedDelegate, new object[] { RecievedLine }); } void MethodeZumDatenInListboxSchreiben() { lbRecieved.Items.Add(RecievedLine); } Bekomme jetzt auch als emfang "?7" Wieso? Bzw. wie kann ich die zahl nun in Byte umwandeln um damit rechnen zu können? Greez Toni
Mein Ratschlag: Wenn du auf der COM-Schnittstelle mit Bytes arbeitest und nicht mit Strings, dann verwende das DataReceived-Event besser nicht. Nimm besser einen Thread/BackgroundWorker und nimm direkt .Read(). In DataReceived kann man eigentlich nur ReadExisting() sicher nutzen, und das Ergebnis davon ist abhängig vom eingestellten Zeichensatz.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.