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
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.
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
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
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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck