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


von John I. (dartox)


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?

von Severino R. (severino)


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.ports.serialport_members(VS.80).aspx

>
> 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?

von John I. (dartox)


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!?

von Karl H. (kbuchegg)


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?

von John I. (dartox)


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...
1
 private void Form1_Load(object sender, EventArgs e)
2
        {
3
            //Programm in die Mitte des Bildschirms setzen
4
            CenterToScreen();
5
            
6
      //Seriellen Port Konfigurieren
7
      MSComm1.PortName = "COM8";
8
            MSComm1.BaudRate = 57600;
9
            MSComm1.DataBits = 8;
10
            MSComm1.Parity = Parity.None;
11
            MSComm1.StopBits = StopBits.One;
12
13
            //Seriellen Port öffnen
14
            //MSComm1.Open();
15
16
            MSComm1.Encoding = Encoding.ASCII;
17
        }
18
19
        //Test-Button
20
        private void button1_Click(object sender, EventArgs e)
21
        {   
22
          if (MSComm1.BytesToRead > 0)
23
          {
24
                    ...
25
                }
26
                else{...}
27
        }

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!

von Markus V. (Gast)


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? ...

von Markus V. (Gast)


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...

von Severino R. (severino)


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?

von John Inkognito (Gast)


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?

von Severino R. (severino)


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).

von John Inkognito (Gast)


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)?

von Chris .. (dechavue)


Lesenswert?

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

von John Inkognito (Gast)


Lesenswert?

Danke.

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

Vielen Dank leute, habt mir sehr weiter geholfen!

von Severino R. (severino)


Lesenswert?

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

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.