Laden...

Daten von RS232

Erstellt von MaWo80 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.852 Views
MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Daten von RS232

Hallo ,

bekomme von einem Mikrocontroller Daten über die RS 232 Schnittstelle gesendet.

Diese will ich in einem Prog visualisieren.

Jetzt habe ich das Problem das ich nicht genau weiß wie ich das machen soll.

habe folgendes schon relisiert, denke auch das es richtig ist:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace OfenSimu1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            

            if (serialPort1.IsOpen)
            {
                toolStripStatusLabel1.Text = "SerialPort verbunden";
                //toolstripStatusLabel1.Name("Serial Port verbunden");
            }
            else
            {
                toolStripStatusLabel1.Text = "Serial Port nicht verbunden";
                //statusStrip1.Show("Serial Port getrennt");

            }             
                        
        }

        private void btnVerSerialPort_Click(object sender, EventArgs e)
        {
            //serialPort1 = new SerialPort("COM2", 9600,Parity.None,8,StopBits.One);

            if (serialPort1.IsOpen)
            {
                MessageBox.Show("Serial Port bereits vorhanden");
               
            }

            else
            {
                serialPort1.Open();
                toolStripStatusLabel1.Text = "SerialPort verbunden";
                //serialPort1.Write("Das ist ein dummer Test");
                //serialPort1.Write("0x0");
                             
            }
            
        }

        private void btnTrenSerialPort_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                toolStripStatusLabel1.Text = "Serial Port nicht verbunden";
            }

            else
            {
                MessageBox.Show("Serial Port ist schon getrennt");
            }
                

        }
             
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        delegate void MessageDataDelegate(string data);
        
        private void MessageData(string data)
        {
            label1.Text = data;
        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageDataDelegate dlgte = new MessageDataDelegate(MessageData);
            string recvData = serialPort1.ReadTo("\r");
            this.Invoke(dlgte, new object[] { recvData });
        }
               
    }
    
   
}

das Problem ist das ich mehrere werte gesendet bekomme, das heißt ich muß einen Identifyer einbauen und die zahlen wahrscheinlich aus mehreren Bits zusammensetzen oder ??

Vielleicht hat schon jemand Erfahrung darin

gruß

S
8.746 Beiträge seit 2005
vor 16 Jahren

Wozu einen "Identifikator"? Du kommst Bytes rein. Mehr nicht. Die serielle ist wie ein Stream.

Zwei Verbesserungsvorschläge:

  1. Statt serialPort1.ReadTo() einfach ReadExisting()
  2. BeginInvoke() statt Invoke(), kannst sonst Thread-Probleme geben
MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Daten von RS 232

Hallo ,

Danke were ich gleich mal ausprobieren, gebe dann bescheid wie es läuft!!

Martin

MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Kann per HyperTerminal nichts senden

habe gerade mal alles ausprobiert, Prog kann ich kompelieren ohne Fehler, habe mir einen virtuellen seriellen Port angelegt um über Hyperterminal mir Sachen in meine anwendung senden zu können, aber ich kann in Hyperterminal nochnichteinaml einen Buchstaben eingeben wenn es gestartet ist,

kennt das Problem jemand ?

Bin für jede Hilfe dankbar

S
8.746 Beiträge seit 2005
vor 16 Jahren

Ich würde dir vorschlagen, dass du dich da erstmal rantastest. Schreib dir ein kleines Programm, welches die einkommenden Daten von seriellen einfach ausgibst (mit DataReceivedEvent und ReadExisting()). Dann würde ich dem virtuellen COM-Port nicht zwingend vertrauen. Oder prüfe ihn wenigstens mit 2 Hyperterminal-Instanzen. Ggf. mal mit Nullmodem-Kabel und 2. Rechner versuchen. Und dann Stück für Stück ausbauen.

M
190 Beiträge seit 2007
vor 16 Jahren

Das Nullmodem kann man sich für Tests auch sparen.
Man kann mit Büroklammern auch den eigenen Ausgang wieder auf den eigenen Eingang legen. Das ist für Tests vielleicht etwas einfacher zu handhaben.

MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Hyper Terminal

Das Problem ist, das ich im Hyperterminal nichts eingeben kann, ich habe einen Cursor aber wenn ich auf der Tastatur etwas eingebe, dann passiert im Hyperterminal nichts!!

Martin

S
8.746 Beiträge seit 2005
vor 16 Jahren

Du kannst schon was eingeben. Das wird auch gesendet. Du siehst nur die Eingabe nicht, es sei denn die Gegenstelle macht ein Echo (wie z.B. Modems) oder du schaltest in den Hyper-Term-Einstellungen das lokale Echo ein.

MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Danke

Danke ,
dein Tipp hat mir super geholfen !!

jetzt klappt es mit dem Testen!!

👍

MaWo80 Themenstarter:in
106 Beiträge seit 2006
vor 16 Jahren
Hyperterminal

Hallo,

also etwas klappt es jetzt, aber in meiner Anwendung klappt nichts! Es kommt aber auch keine Fehlermeldung.

Ich habe jetzt zum testen der virtuellen Schnittstelle 2 x Hyperterminal geöffnet.
1 x als Com 2
1 x als Com 4

wenn ich unter Eigenschaften /Einstellungen / ASCII konfiguration einen Hacken setze bei

  1.      "Gesendete Zeieln enden mit Zeilenvorschub"  
    
  2.      " Eingegebene Zeichen lokal ausgeben (lokales Echo)"  
    

Dann kann ich auf jedem Hyperterminal etwas zum anderem schiken.

benutze ich nur das Com 4 Terminal und meine Software und schicke vom Terminal zu meinem Form, dann kommt nichts an!

Kennt das jemand ?

Martin

S
8.746 Beiträge seit 2005
vor 16 Jahren

Kennt das jemand ?

Ja, nennt sich "Bug".