Laden...

Mehrere ComPorts in einem Programm verwenden

Erstellt von Codeless vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.170 Views
C
Codeless Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
Mehrere ComPorts in einem Programm verwenden

Hallo zusammen,
ich bin neu hier und nicht sonderlich geübt was das Schreiben von eigenen Beiträgen angeht. Jedoch habe ich nirends etwas gefunden das mir weiterhilft, daher wende ich mich an Euch.
Seit längeren verwende ich ein kleines Programm um mit Hilfe eines TTL/UART2USB-Converter Daten seriell zu versenden, empfangen und zu steuern. Das klappt bis jetzt alles wunderbar.

Nun versuche ich seit neustem eine zweite Schnittstelle zu implementieren. Damit möchte ich zwei Geräte gleichzeitig mit einem C#-Programm steuern und so Daten hin- und herschicken. Das sollte ja eigentlich kein Problem sein. Jedoch kappt das irgendwie nicht. Beide Converter funktionieren aber immer nur an Com A, Com B bleibt tot. Es kommt zu keiner Fehlermeldung, RX und TX geht beide nicht. Alle Funktionen der Schnittstellen ist doppelt vorhanden, aber es geht einfach nicht. Wahrscheinlich mache ich nur einen dummen Anfängerfehler…
Ich weiß aber nicht mehr weiter, kann mit jemand weiterhelfen?

Das ganze Mini-Projekt habe ich angefügt.

Vielen Dank im Vorraus

SG Codeless

R
1 Beiträge seit 2018
vor 5 Jahren

Warum dein Port B nicht geht, kann ich dir nicht sagten, aber...

Alle Funktionen der Schnittstellen ist doppelt vorhanden, aber es geht einfach nicht.

... du hast so gut wie alle Methoden durch Copy-and-Paste dupliziert, nur um ein serialPortB ansprechen zu können. Wenn du eine serialPortC hast, kopierst du dann wieder alles?

So ist es echt schwer einen Fehler zu finden.

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

um ehrlich zu sein - du scheinst selbst nicht mehr durchzublicken - wie soll das jemand anders jetzt noch tun? (Zumal debugging wohl eher schwierig wird, wenn man nicht zufällig 2 COM-Geräte rumliegen hat)

Noch schlimmer: "Funktioniert nicht" - hast du mal selbst debuggt was er denn genau nicht macht?

Wie von redux bereits angemerkt - würdest du dir wohl selbst einen Gefallen tust und das so umbaust, dass du keine Codeduplizierung hast, sobald ein neuer COM-Port angesprochen werden soll.

Ebenfalls hübscher gehen deine Funktionen "EnableControls_PortX" - aus:


private void EnableControls_PortB(bool value)
{
	if (value == true)
	{
		cbComPortB.Enabled = true;
	}
	else
	{
		cbComPortB.Enabled = false;
	}
}

könnte z.B. problemlos so aussehen:


private void EnableControls_PortB(bool value)
{
	cbComPortB.Enabled = value;
}

LG

1
124 Beiträge seit 2012
vor 5 Jahren

Hallo,

ich habe gerade mal geschaut was dein Problem ist:
1.Du hast try, catch nicht verstanden 1.Du öffnest immer COM1 1.Wie meine Vorredner schon sagten, fehlt dir die Objektorientierte Programmierung

zu 1:


try
{
  //hier wird Code ausgeführt

 //wenn hier am Ende angekommen ist, dann ist alles gut verlaufen
}
catch ( Exception ex)
{
  //kommt er in den catch, dann wurde der try Block nicht bis zu Ende ausgeführt und es wurde ein Fehler ausgelöst.
 //daher sollte hier der Fehler abgefangen (ex.Message) und dem Benutzer wie auch immer angezeigt werden
}

zu 2:
Man kann zwar in der ComboBox ein Com Port auswählen, allerdings wird der COM Port nicht dem SerialPort zugewiesen

zu 3:
Erstelle eine Klasse für den SerialPort und implementiere nur die Schnittstellen, die du zu dem Serialport benötigst, damit du nicht alles kopierst.

Wenn du im try catch den Fehler abgefangen hättest wäre dir angezeigt worden, dass der COM1 bereits geöffnet ist. Obwohl nirgends der COM1 ausgewählt wurde.

Gruß
Thomas

C
Codeless Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Ihr habt ja recht, da werde ich das zusammenkopierte Programm in die Tonne stecken und mir komplett was eigenes bauen. Hier kann ich niemanden fragen, der auch weiß was c# überhabt ist.
Daher Danke für Eure Antworten und den Schubser in die richtige Richtung!
Das objektorientiert aufzubauen ist ja absolut sinnvoll.
Da werde ich mich wohl die nächste Zeit in Anfängerforen rumtreiben.
Wie man das als Klasse aufzieht werde ich wohl nirgendwo einfach so finden.

SG Codeless

2.207 Beiträge seit 2011
vor 5 Jahren

Hallo Codeless,

es gibt auch hier Verweise auf einen guten Einstieg

[FAQ] Wie finde ich den Einstieg in C#?

Einfach vorne anfangen, dann wird schnell vieles klar 😃

Gruss

Coffeebean