www.mikrocontroller.net

Forum: PC-Programmierung C# Ports überprüfen?


Autor: John Inkognito (dartox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi leute,

hab ein Problem mit meinem C# Programm.

Und zwar öffne ich den MSComm1 Port, also einen Port, und schicke Daten 
von nem µC zu dem Port.

Nun möchte ich aber später beim Programm überprüfen ob auch tatsächlich 
Daten am Port ankommen. Sprich irgendwie sowas wie if(MSComm1Port == 1) 
-> dann ...

wenn nicht geb ich ne MessageBox aus. Kann man den Port auf Empfang 
überprüfen?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John Inkognito wrote:
> Hi leute,
>
> hab ein Problem mit meinem C# Programm.
>
> Und zwar öffne ich den MSComm1 Port, also einen Port, und schicke Daten
> von nem µC zu dem Port.

Meinst Du etwa einen SerialPort?
Ab .NET 2.0 gibt es das:
http://msdn.microsoft.com/de-de/library/system.io....

>
> Nun möchte ich aber später beim Programm überprüfen ob auch tatsächlich
> Daten am Port ankommen. Sprich irgendwie sowas wie if(MSComm1Port == 1)
> -> dann ...
if (MSComm1Port.BytesToRead > 0)
{
...
}
else // MessageBox ausgeben.

>
> wenn nicht geb ich ne MessageBox aus. Kann man den Port auf Empfang
> überprüfen?

Autor: John Inkognito (dartox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Also ich hab meinen µC gerade nicht da, hab also die Zeile in der der 
Port geöffnet wird als Kommentar markiert, da sich sonst .NET aufregt.

so -> //MSComm1.Open();

jetzt habe ich die if-Anweisung wie von dir beschrieben ausprobiert, 
aber es funktioniert nicht.

.NET regt sich über die Anweisung if (MSComm1.BytesToRead > 0) auf.

Mein Code sieht grad so aus.

private void button1_Click(object sender, EventArgs e)
  {
       if (MSComm1.BytesToRead > 0)
       {
           ...
       }

       else{...}
  }

Also meint Port ist zwar nicht offen, aber das Programm sollte ja nur 
erkennen ob Daten ankommen oder nicht, und da der Port ja zu ist kommen 
keine Daten, somit soll es in die else-Anweisung springen.

Aber es tut sich nichts. Wie gesagt, .NET kompiliert das Programm 
nichtmal, wegen oben genannter Zeile!?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du vernünftige Antworten haben willst, dann solltest du mal 
überlegen, ob wohl irgendjemand mit einer Aussage wie dieser

> .NET regt sich über die Anweisung if (MSComm1.BytesToRead > 0) auf.

etwas anfangen kann.

Anruf in der Werkstatt: Mein Auto geht nicht. Was könnte das sein?

Autor: John Inkognito (dartox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann nicht mehr sagen als das sich .NET darüber aufregt.

Beim kompilieren wird die Zeile gelb unterstrichen... das war's. Keine 
genaue Angabe zum Fehler selber. Schätze dass liegt daran dass einfach 
kein Port geöffnet ist.

Also mein bisheriger Code...
 private void Form1_Load(object sender, EventArgs e)
        {
            //Programm in die Mitte des Bildschirms setzen
            CenterToScreen();
            
      //Seriellen Port Konfigurieren
      MSComm1.PortName = "COM8";
            MSComm1.BaudRate = 57600;
            MSComm1.DataBits = 8;
            MSComm1.Parity = Parity.None;
            MSComm1.StopBits = StopBits.One;

            //Seriellen Port öffnen
            //MSComm1.Open();

            MSComm1.Encoding = Encoding.ASCII;
        }

        //Test-Button
        private void button1_Click(object sender, EventArgs e)
        {   
          if (MSComm1.BytesToRead > 0)
          {
                    ...
                }
                else{...}
        }

Und wie oben schon erwähnt, geht es um die Zeile if (MSComm1.BytesToRead 
> 0) welche gelb unterstrichen wird und ein weiteres Benutzen des 
Programms verhindert!

Autor: Markus V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Karl heinz meint:
Wie sieht denn die Aufregung von .NET genau aus? Welche Version vom 
Visual-Studio verwendest Du? Welchen Datentyp hat denn MSComm1? ...

Autor: Markus V. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn keine genaue Fehlermeldung angezeigt wird (was es übrigens 
nicht gibt, Du mußt vielleicht mal im Menü "Ansicht (View), Fehlerliste 
(Error List)" schauen. Ansonsten halte mal den Mauszeiger über die gelb 
unterstrichen Stelle...

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John Inkognito wrote:
> Ich kann nicht mehr sagen als das sich .NET darüber aufregt.
> Beim kompilieren wird die Zeile gelb unterstrichen... das war's. Keine
> genaue Angabe zum Fehler selber.

Meldung wenn Du mit der Maus auf die gelb unterstrichene Zeile fährst?

> Schätze dass liegt daran dass einfach
> kein Port geöffnet ist.
Falsch, beim Kompilieren kann das Port noch gar nicht offen sein.

> Also mein bisheriger Code...
Bitte poste den gesamten Code, aber auf's Minimum reduziert, damit nur 
noch das Wesentliche drinsteht.

Und wie Markus V. schrieb: Welche C# Version (resp. Visual Studio) 
verwendest Du?

Autor: John Inkognito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab das jetzt nochmal mit C# 2008 Express Edition ausprobiert 
(hatte vorher nur so ein dritt-anbieter Programm).

Da wird die Zeile zwar auch gelb markiert, aber mit einem Hinweis.

Und zwar steht da:
-------------
InvalidOperationExecption wurde nicht behandelt.

Der Anschluss ist geschlossen.
-------------

Ich versteh das aber nicht. Auch wenn der Anschluss geschlossen ist soll 
das Programm in die else-Anweisung hupfen, da ja keine Daten ankommen.

Wisst ihr weiter?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha! Eine Exception ist keine Fehlermeldung vom Compiler!
> Aber es tut sich nichts. Wie gesagt, .NET kompiliert das Programm
> nichtmal, wegen oben genannter Zeile!?

Musst halt den Port zuerst öffnen, d.h. das ...Open() wieder 
ent-kommentieren.

> Also ich hab meinen µC gerade nicht da, hab also die Zeile in der der
> Port geöffnet wird als Kommentar markiert, da sich sonst .NET aufregt.
??????????????????????????????

Wenn Dein µC einbe virtuelle serielle Schnittstelle darstellt, dann 
versuch es mangels µC mal auf einer Standard-Schnittstelle ("COM1).

Autor: John Inkognito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AHHHHHHHHHHH jetz gehts.

Der Fehler lag darin dass ich "COM8" angegeben hab. COM8 gibt es aber 
auf meinem PC nicht, nur auf dem Laptop bei dem ich begonnen hab das 
Programm zu schreiben!! (wie severino gesagt hat).

Dankeschön, war sehr hilfreich.

PS: nochwas, wisst ihr/du vielleicht auch wie ich im Programm die 
linke/rechte Maustaste drücken lassen kann (virtuell sozusagen)? Sprich 
wenn ich in ne Textbox z.b. 1 Eingebe wird die linke Maustaste gedrückt 
(dort wo sich die Maus gerade befindet)?

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Über die Win-API kannst du Maus/Tastatureingaben simulieren
(Siehe http://pinvoke.net/default.aspx/user32/SendInput.html)

Autor: John Inkognito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.

Hat sich schon erledigt. Kann nun linke und rechte Maustaste simulieren.

Vielen Dank leute, habt mir sehr weiter geholfen!

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
John Inkognito wrote:
> Danke.
>
> Hat sich schon erledigt. Kann nun linke und rechte Maustaste simulieren.
Wie?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.