Fragensteller
COM Verbindung

Frage
-
Hallo,
ich möchte eine Com verbindung aufbauen .Beim untere code funkt. wenn das Gerät angeschlossen ist .Wenn nicht angeschlossen ist
steht beim debuggen
true bei IsConnected,IsOpen und ,IsStarted.Kann jemand bitte meine fehler sagen oder eine bessere verbindungsweg erklären??
if (!mySerial.Start()) { MessageBox.Show("Could NOT open the port!"); } if (!mySerial.IsConnected) { mySerial.IOError += new EventHandler<IOErrorEventArgs>(IOErrorEventHandler); } if (mySerial.IsConnected) { mySerial.Send("SI\r\n")); }
- Bearbeitet kc_86 Montag, 14. November 2011 10:37
Alle Antworten
-
if (serialPort1.IsOpen)
{
serialPort1.Close();}
wenn ich das richtig verstanden habe fehlt dir das. Das der Debugger dir eine Meldung ausspuckt, wenn nichts am Port ist, ist doch klar oder nicht? Er kann nichts öffnen wenn kein Gerät vorhanden ist.
- Bearbeitet as_1985 Montag, 14. November 2011 10:54
-
Hallo,
die SerialPort Klasse interessiert sich nicht dafür, ob am COM Anschluss ein Gerät angeschlossen ist, sondern öffnet lediglich die Verbindung. Es liegt beim angeschlossenen Gerät, ob erkannt werden kann, dass es verfügbar ist, angeschlossen und betriebsbereit.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Bearbeitet Thorsten DörflerEditor Montag, 14. November 2011 11:16
-
Evtl. solltest du etwas mehr Code posten. Wie holst du die PortNr des Verbundgerätes?
Hier mal ein Code von mir:
private void ButtonConnect_Click(object sender, EventArgs e) if (serialPort1.IsOpen) { serialPort1.Close(); } else { try { Properties.Settings.Default.Reload(); serialPort1.PortName = "COMNr"; serialPort1.Open(); } catch (UnauthorizedAccessException) { } catch (ArgumentException) { } catch (Exception) { } serialPort1.DiscardInBuffer(); } } } private void Button_Disconect_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); } }
- Als Antwort vorgeschlagen as_1985 Montag, 12. Dezember 2011 13:12
-
"Es liegt beim angeschlossenen Gerät, ob erkannt werden kann, dass es verfügbar ist, angeschlossen und betriebsbereit."
Sorry, ich habe nicht ganz verstanden was du genau meinst...also falls keine Gerät verbunden ist kann ich dann "Could NOT open the port" nicht anzeigen oder wie??
"Wie holst du die PortNr des Verbundgerätes?"
iPort = Int32.Parse(textBoxPortCOM.Text); // ich gucke die Nummer in textbox und muss dann gucken ob sie verbunden ist
- Bearbeitet kc_86 Montag, 14. November 2011 11:50
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 23. November 2011 10:12 Formatierung
-
Wenn du eine Methode hast, zur Ermittlung deines COMPorts, kannst du meinen Quelltext ganz normal benutzen, der funktioniert - habe ich auch in einigen Projekten von mir benutzt. Das einzige was du zu tun hast, ist "COMNr" zu ersetzen. Also du führst deine Methode zur Comport Ermittlung durch und speicherst das Ergebnis in einer Variablen X und dann ersetzt du "COMNr" durch diese Variable.
Dann sollte der Verbindungsaufbau / Abbau kein Problem mehr sein, läuft über einen Connect und Disconect Button. Natürlich kannst du dir dann auch noch x Nachrichten ausgeben lassen, wie "Could not open Comport...".
Wenn du überhaupt keine Methode zur Ermittlung des korrekten Comports hast, such mal im Forum nach "USB Lib". Die meisten Comprodukte führt Windows im Gerätemanager unter USB Geräte, wie zum Beispiel SerialConverter. Das hat den Vorteil, dass du den Port ganz einfach über die ID's ermitteln kannst und somit, egal an welchen Rechner du dein Gerät ansteckst mit dem Programm immer den korrekten Port hast.
- Als Antwort vorgeschlagen as_1985 Montag, 12. Dezember 2011 13:12
-
Hi,
ich habe mitbekommen dass ich dafür ne timer brauche.
ich sende den Befehl ,und setze timer.Timer soll paar sekunden(z.B 3) warten falls das Programm nach 3 sekunden keine daten empfängt .Soll eine Fehlermeldung zeigen.Ungefähr so :
if (mySerial.IsConnected)
{
mySerial.Send("SI\r\n"));//timer setzen
}// in received methode
//falls keine daten//fehler
hat jemand eine Idee wie ich das am Besten machen kann?
-
Einen Timer erstellt du so:
System.Windows.Forms.Timer t1 = new System.Windows.Forms.Timer(); t1.Interval = 10000; t1.Tick += new EventHandler(Methode); t1.Start(); void Methode(object sender, EventArgs e) { }
Nach Ablauf von t1 wird "Methode" aufgerufen. Aber da du kein bisschen auf die Sachen eingehst, sondern einfach nur Abfragen hier postet, gehe ich davon aus - dass es dir eigentlich egal ist, ob man dir hilft oder nicht. Wir Dörfler geschrieben hat, interessiert sich der SerialPort nicht dafür ob das Gerät angeschlossen ist oder nicht. Um zu "schauen" ob ein Gerät angeschlossen ist oder nicht kannst du ganz einfach die USB Lib benutzen und anschließend mit dem obigen Code zum Port conencten und Datenaustauschen.Ich denke es ist alles gesagt...
- Als Antwort vorgeschlagen as_1985 Montag, 12. Dezember 2011 13:12