Forum: PC-Programmierung C# Zwei bytes über RS232 Schnittstelle Emfangen


von C-Sharp_neuling (Gast)


Lesenswert?

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

von C-Sharp_neuling (Gast)


Lesenswert?

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

von bluppdidupp (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.