Laden...

Wie kann ich zwei Computer via USB-Port verbinden?

Erstellt von Banditoka vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.827 Views
B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren
Wie kann ich zwei Computer via USB-Port verbinden?

Hallo Leute,

Ich bin neu im Forum und hoffe ich habe den richtigen Bereich erwischt.

Ich habe zwei Programme geschrieben die über die USB-Ports miteinander kommunizieren sollen. Im Testing habe ich 2 COM Ports simuliert und dann auch erfolgreich getestet. Das heißt mit simulierten COM Ports funktionieren die Programme.

Das Problem ist mit einem normalen USB-Kabel wird das ganze nicht funktionieren, da meines Wissens ohne Treiber gar nichts geht.

Die Frage wäre ob jemand eine geeignete Lösung kennt oder mir einen wertvollen Tipp geben könnte das ganze auch mit nicht simulierten COM Ports zum laufen zu bringen.

Vielen Dank

T
2.219 Beiträge seit 2008
vor 3 Jahren

Was ist das Ziel des ganzen?
Wenn zwei Rechner mit ein ander kommunizieren soll, würde ich eher eine Netzwerktechnik nutzen.
Also über UDP/TCP.
Aber ohne den Zweck des ganzen zu kennen ist nicht klar, was der sinnvollste Ansatz wäre.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

309 Beiträge seit 2020
vor 3 Jahren

So ist USB nicht gedacht, da bräuchtest du dazwischen einen Master oder ähnliches.

L
95 Beiträge seit 2009
vor 3 Jahren

Du könntest zwei virtuelle Comports nehmen -> USB zu Seriell Adapter

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

Hallo,
erstmal vielen Dank an alle.

TCP geht nicht da ich mit der mir zur Verfügung stehenden Hardware nur ein Netzwerk aufbauen kann und dieses Netzwerk muss mit dem Internet verbunden sein.

Also habe jetzt 2 USB-UART Adapter, funktioniert auch alles. Habe die beiden einfach mit nem selbstgebauten Adapter verbunden.

Nun das Problem welches wohl in der Programmierung liegt:

Benutze ich die Verbindung und TeraTerm Konsole werden mir die Daten die ich schicke angezeigt.

Benutze ich aber mein Konsolenprogramm wird der Port erkannt nur meine Daten werden mir in der Konsole nicht angezeigt --> Benutze die ReadExisting() Methode zum auslesen des Streams.

Benutze ich VSPE mit zwei virtuellen Ports kommunizieren beide Programme wie sie sollen und die Nachrichten werden mir auf meiner Konsole angezigt.

Ich poste auch noch den Code.

Danke für die Hilfe.

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

Code wurde entfernt wahrscheinlich darf man den nicht posten 😄
Sorry ..

5.657 Beiträge seit 2006
vor 3 Jahren

Den Code habe ich entfernt. Du kannst hier nicht einfach seitenweise unformatierten Code posten, und dann erwarten, daß wir ihn für dich debuggen oder neuschreiben.

Bitte beachte [Hinweis] Wie poste ich richtig?, und poste die relevanten Code-Ausschnitte und verwende Code-Tags.

Weeks of programming can save you hours of planning

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

Soll auch niemand neu schreiben für mich 😄
Hoffe das ist jetzt besser so.

while (PortStatus == true)
{

            MessageIn = serialPort1.ReadExisting();  
            DataIn = MessageIn.Split(' ')[0];  
            try  
            {  
                SollTemp = MessageIn.Split(' ')[1];  
            }  
            catch (Exception noTemp)  
            {  
                goto Verbindung;  
            }  
            Verbindung:  
            switch (DataIn)  
            {  

                case "Start":  
                    Console.WriteLine("Message erhalten Start " + SollTemp);  
                    break;
T
2.219 Beiträge seit 2008
vor 3 Jahren

@Banditoka
Die Aussage mit dem Netzwerk erschließt sich mir nicht.
Du sollst doch nur die beiden Rechner per IP verbinden.
Da spielt es keine direkte Rolle ob die am Internet hängen oder nicht.
Wenn der Port, den du zur Kommunikation definieren musst, nicht in der Firewall freigegeben ist, spielt es keine Rolle ob die am Internet hängen oder nicht.
Mein Netzwerk hängt auch am Internet, trotzdem laufen in meinen LAN einige Dienste zwischen den Rechnern, die ich aber nicht über die Firewall freigebe.
Entsprechend ist deine Aussage weder schlüssig noch nachvollziehbar.
Und was du da bastelst ist nichts anderes als eine Netzwerklösung über COM, was dafür nicht ausgelegt ist.
Dafür gibt es UDP/TCP mit IP.
Wenn du dann am anderen Rechner mit COM arbeiten musst, ist das kein Problem.
Die Befehle kannst du dann als Command Objekte z.B. über einen Self Hosted WCF Service senden.
Auch andere Service Lösungen wären möglich, hängen aber von der Architektur ab, z.B. Client + Server Architektur.

Auch sieht dein Code, den du immer noch nicht in die Code Tags gepackt hast, nicht sauber aus.
goto hat in C# sogut wie nie etwas verloren und zeigt meistens ein Code Design Problem auf, was man mit ordentlicher Strukturierung lösen kann und muss!
Es mag ein paar Einsatzzwecke geben, in den letzten 13 Jahren habe ich hier aber nur eine Handvoll Fälle gesehen wo solche Lösungen genutzt wurden.
Und teilweise wäre dies nicht nötig gewesen!
Und hier ist es sogar überflüssig, da du nach dem catch Block auch direkt zu Verbindung kommst ohne goto!

Dein DataIn und SollTemp wäre sinnvoller als Command Pattern umzusetzen.
Dazu braucht es dann keine Sonderlocke.

Nachtrag:
Du kannst übrigens deiner Netzwerkkarte mehrere IPs zuweisen und so ein Netz aufziehen ohne Internetzugang und sogar wie in diesem Fall direkt per P2P zwischen den beiden Rechnern kommunizieren.
Damit wäre dann die Kommunikation nur zwischen diesen beiden Rechnern möglich.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

Erstmal Danke dir T-Virus und auch für die konstruktive Kritik!

Beschäftige mich mit C# erst seit nem Monat und dachte mir schon, dass meine Architektur grottig ist.

Zum Problem der Computer ist vollgepackt mit Restriktionen die ich nicht ändern kann. Dazu gehören auch die Netzwerkeinstellungen.
Das heißt sobald ich ein Ethernet Kabel anstecke, kappt er mir das WLAN welches nötig ist.
Daher muss ich diesen umständlichen Umweg nehmen..
Der PC schickt die Daten dann an ein Board mit Windows der wiederum die Daten verwertet und über IP/TCP an die zu steuernde Maschine weiterleitet.

Das Problem ist, das dass Array je nach Befehl OutofRange sein kann und um dann einen Fehler und somit Programmabbruch zu entgehen habe ich diesen Weg gewählt.

Naja jetzt funktioniert das ganze mittlerweile aber nicht zuverlässig ab und zu wird mir die Nachricht auf meiner Konsole angezeigt und öfter geschieht wiederum nichts nach Senden der Daten.

5.657 Beiträge seit 2006
vor 3 Jahren

Das Problem ist, das dass Array je nach Befehl OutofRange sein kann und um dann einen Fehler und somit Programmabbruch zu entgehen habe ich diesen Weg gewählt.

Das kannst du doch vorher überprüfen, in der Doku findest du alles Wissenswerte dazu:
Arrays (C#-Programmierhandbuch)
[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Hier gibt es auch Tips für den Einstieg: [FAQ] Wie finde ich den Einstieg in C#?

Und formatiere doch bitte deinen Code, du bist jetzt schon zwei Mal darauf hingewiesen worden. [Hinweis] Wie poste ich richtig?, Punkt 6

Weeks of programming can save you hours of planning

T
2.219 Beiträge seit 2008
vor 3 Jahren

@Banditoka
Ob du Daten dann per LAN oder WLAN reinlaufen ist doch Wurst.
Aber ich würde an deiner Stelle die Umsetzung per COM als Netzwerk Ersatz verwerfen.
Wenn du eine Konsolen Anwendung mit Self Hosted WCF Services verwendest, Anleitungen gibt es im Netz zu Hauf, oder andere Lösungen nimmst, dann musst du nicht mal die Kommunikation bauen.
Die Services liefern dir dann alles bereits mit, du musst nur den Service und die nötigen Objekte bauen.

Das würde dir zur aktuellen COM Lösung viel Arbeit sparen und vor allem nicht so Fehler anfällig sein.
Wenn du schon jetzt Probleme hast, die Daten zu übertragen, dann kannst du dir vorstellen, was da noch an Arbeit auf dich zu kommt um hier eine Fehlertoleranz zu erzeugen.
Bei fertigen Service Lösungen hast du bereits den fertigen Unterbau und musst dich nur noch um die Implementierung kümmern.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

@T-Virus

Danke nochmal für den Vorschlag aber wie gesagt sobald der Lan Stecker eingesteckt wird werden andere Netzwerkverbindungen deaktiviert.

Habe nun die COM Lösung erfolgreich abgeschlossen und die Daten werden zuverlässig übermittelt.
Die Goto Anweisungen habe ich aus dem Code entfernt und durch while schleifen ersetzt. Danke nochmal für den Tipp.

T
2.219 Beiträge seit 2008
vor 3 Jahren

@Banditoka
Ich habe nicht geschrieben, dass du jetzt per LAN an der Kiste arbeiten sollst.
Du kannst auch, wenn eh schon vorhanden, auch das WLAN verwenden.
Wenn die im gleichen Netz sind, macht es doch Sinn damit zu arbeiten.

Falls nicht, würde ich vorher noch mit dem entsprechenden Admin der Kiste sprechen ob man da nichts umstellen kann bzw. ein zweites WLAN für dein Netz umsetzen kann und dann beide Kisten per WLAN verbinden sofern die machbar ist.
Falls nicht, kann ich dir ehrlich gesagt mit deiner Umsetzung nicht weiterhelfen.
Dann müsste man auch klar sagen, dass die Umsetzung so nicht sauber machbar ist.
Aber hier müsstest du dich mit dem Auftragsgeber dieser Umsetzung unterhalten.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

B
Banditoka Themenstarter:in
7 Beiträge seit 2020
vor 3 Jahren

@T-Virus

Tut mir Leid aber ich glaube wir haben an einander vorbei geredet. Bzw ich habe mich nicht klar ausgedrückt. Diese Option wurde gewählt, da die Restriction leider nicht änderbar ist.
Falls ich die Möglichkeit gehabt hätte, hätte ich die Kiste die es zu steuern gibt auch direkt an das Firmennetz schließen können und über einen Webserver steuern können.
Wie gesagt leider von der IT nicht erwünscht.

Aber nun klappt alles perfekt.

Danke nochmal !

mfg

T
2.219 Beiträge seit 2008
vor 3 Jahren

@Banditoka
Hatte ich mir fast schon gedacht.
Wenn das Problem erst einmal gelöst ist, dann muss diese Brückenlösung eben erst einmal taugen.
Falls sich an der Situation mal was ändern sollte, solltest du das Programm aber auf eine saubere Netzwerk Verbindung umstellen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.