🔌 Virtuelle COM Ports mit com0com erstellen / emulieren
Inhaltsverzeichnis
Virtuelle COM Ports emulieren statt Kabelsalat
Hast auch Du Dich schonmal gefragt, wie Du virtuelle COM Ports erstellen, bzw. emulieren kannst? Wenn ja, dann bist Du im heutigen Beitrag goldrichtig! Serielle Kommunikation wird auch heute noch häufig in den verschiedensten Bereichen verwendet – über einen, sprach ich in meinem letzten YouTube-Video.
Genauer ging es um die Kommunikation über eine serielle Schnittstelle/einen COM-Port mithilfe der SerialPort-Klasse aus dem .NET Framework. Dort habe ich gezeigt, wie man mit Hilfe eines Arduinos und ein wenig VB.NET Code, einen RFID Chip auslesen konnte. Natürlich kannst Du aber auch allerhand Anderes mit dem Wissen und dem Tool aus dem heutigen Beitrag anfangen – Du musst also kein Entwickler sein.
Falls Du allerdings Entwickler sein solltest – was auf meiner Seite ja nicht unüblich ist 😛 – plane ich auch schon etwas Schönes für den nächsten Beitrag. Ich werde dort nicht nur zeigen wie Du die heutigen Tricks auch mit VB.NET oder C# verwenden kannst, sondern auch eine installierbare Mini-Bibliothek bereitstellen.
So, nun aber genug geplappert, tauchen wir tiefer in die Welt der „Null-Modems“, oder deren Simulation ein.
Not macht erfinderisch – besonders die Eigene
Den guten alten Spruch „Not macht erfinderisch“ kennen wir wohl alle, entweder vom Hörensagen, oder wenn wir es selbst erleben. Erst vor einigen Tagen traf es auch (wieder einmal) auf mich zu. Happy über ein neues Kundenprojekt machte ich mich wie immer motiviert an die Arbeit.
Das heißt bei mir allerdings erstmal: Anforderungen spezifizieren, planen, aufteilen – damit nachher auch das Passende herauskommt. Einerseits qualitativ hochwertig, also effizient/performant und sauber geschrieben, andererseits im Budget des Kunden. Natürlich werde ich hier aus Gründen der Geheimhaltungsvereinbarung nicht zu tief in die Projektdetails tauchen, jedoch grob anreißen.
Im bezeichneten Kundenprojekt ging es konkret um die Ansteuerung einer vom Kunden selbst entwickelte CNC-Maschine. Falls diese Art von Maschine kein Begriff für Dich ist, kein Problem! Stelle Sie Dir einfach als hochpräzise, elektrische Schneidemaschine vor, Welche eben genau das tut: Material präzise zu schneiden. Damit das Ganze natürlich in irgendeiner Weise funktioniert, muss der PC, bzw. die Software natürlich mit der Maschine kommunizieren können. Rate einmal, wer nun ins Spiel kam?
Der Kunde hatte jedoch einige Anforderungen, wie z. B. die Datenübertragung via USB-Kabel und die softwareseitige Übertragung via COM-Ports. Mit der oben bereits erwähnten SerialPort-Klasse des NET Frameworks und meiner bisherigen Arbeiten in diesem Bereich, sollte es von vornherein kein großes Problem darstellen.
Die CNC-Maschine konnte seitens der darauf liegenden Mikrocontroller-Software auf verschiedenen Kanälen kommunizieren. Ohne zu viel ins Detail zu gehen war es so, dass die Maschine dann eben mehrere COM-Ports, statt nur einem verwendete. Auch das wäre auf meiner Seite der Software nicht das Problem, jedoch…
Spoiler: Wenn Du also mehrere Kabel am PC raus und wieder reinstecken muss (und das in der Entwicklungsphase häufiger), dann freuen sich höchstens Deine USB-Ports am PC *Ironie aus*. Nicht nur Dein PC wird unnötig verschlissen, sondern auch automatisierte Tests werden schwer umsetzbar.
Wer also vernünftigen, test- und wartbaren Code schreiben möchte, kommt um eine Art softwareseitige Emulation/Simulation von COM-Ports nicht drum rum.
com0com zu Hilfe – virtuelle COM Ports
Nachdem wir einmal die eventuelle Notwendigkeit von virtuellen COM-Ports besprochen haben, schauen wir uns nun an, wie wir Diese tatsächlich erstellen können. Dazu gibt es im Netz unter anderem die „com0com“-Software. Den Download dazu, findest Du wie in jedem meiner Beiträge weiter unten, das erspart unnötige Sucherei.
Lade Dir am besten nun die verpackte Zip-Datei von meiner Homepage runter, oder besuche Google und finde einen ähnlichen Download. Entpacke die beiden Installer nun in ein Verzeichnis Deiner Wahl und wir sind startklar. Beachte, dass es eine x86 (32 bit) und eine x64 (64 bit) Variante gibt – in meinem Fall habe ich die 64 bit Variante verwendet.
Installation von com0com
Damit Du eine passende Variante für Deinen Computer ausmachen kannst, müssen wir zuerst die Architektur Deines Prozessors herausfinden. Dabei kann es sich entweder um eine 32-, oder um eine 64 bit Variante handeln. Diese werden auch häufig als x86 und x64 bezeichnet.
Architektur des PCs herausfinden
Der einfachste Weg ist wohl, die Windows-Taste auf Deiner Tastatur gedrückt zu halten und dann die „Pause/Unterbrechen“-Taste in Kombination zu drücken. Alternativ kannst Du auch einfach die Windows-Taste einmal drücken und im erscheinenden Suchfeld „computer“ eingeben. Dann kannst Du auf „Dieser PC“ einen Rechtsklick machen und „Eigenschaften“ auswählen.
In beiden Fällen sollte dann ein kleiner Bericht, bzw. ein Eigenschaftsfenster bezüglich Deines PCs erscheinen:
Das passende Setup ausführen
Den relevanten Teil habe ich im Screenshot schon markiert, dort siehst Du, dass es sich bei meinem Gerät (Prozessor + Betriebssystem) um eine 64-bit-Variante handelt. Daher starte ich nun in meinem Fall die passende Installationsdatei:
Verwendung von com0com
Nach Ausführung der passenden com0com Setup-Datei, haben wir nun 2 neue Tools auf unserem PC. Einerseits das „Setup Command Prompt“ und andererseits eine Anwendung namens „Setup“. Man darf hier allerdings nicht denken, dass dies weitere Installationsdateien sind. Namen wie „Virtual COM-Port Configuration“ o. Ä. hätten es hier wohl eher getroffen – naja…
Das Setup-Tool
Das erste kleine Tool ist das „Setup“-Tool, es ermöglicht uns die visuelle Konfiguration von virtuellen COM-Ports mit einer kleinen Oberfläche:
Einen virtuelle COM Ports einrichten (Paar)
Um einen virtuellen COM-Port einzurichten, kannst Du im hier drüber dargestellten Tool ganz einfach auf „Add Pair“ klicken. Standardmäßig erzeugt das Tool dann 2 virtuelle Ports, für gewöhnlich nach folgendem Muster: „CNCA<Nummer>“ & „CNCB<Nummer>“. „Zwei Ports?“ fragst Du Dich nun eventuell – jap, ist schon richtig!
Allgemein kann man natürlich sagen, dass eine „Verbindung“ nun einmal immer zwei Punkte miteinander verbindet. Daher erzeugt com0com immer ein Paar von Ports. Das sind dann im einfachen Beispiel erstmal so aus:
Leider tauchen die erstellten COM-Ports, bzw. das Paar nicht in der Übersicht auf, wo wir es erwartet hätten. Ebenso könnten einen die Bezeichnungen stören, man würde ggf. schon die normalen „COMX“-Namen haben wollen. Kein Problem, dazu kommen wir jetzt!
Gängige Bezeichnungen
Um für unser erstelltes COM-Paar nun die gängigen Bezeichnungen a la „COM“ + Nummer zu bekommen, müssen wir nur einen Haken setzen. Okay, genau genommen sogar zwei…
Wähle das zu ändernde Port-Paar aus, also im Screenshot zum Beispiel „Virtual Port Pair 2“ und markiere auf der rechten Seite beide „use Ports class“ Checkboxen. Klicke im Anschluss auf „Apply“ und schon ändern sich die beiden Bezeichnungen in das von uns bekannte/gängige Muster. Zusätzlich erscheinen die Ports nun auch in der gängigen Geräte-Manager-Kategorie „Anschlüsse“.
Automation über die Commandline (Cmd)
Im obigen Beispiel haben wir nun die „Ottonormalverbraucher“-Variante geführt durch die grafische Oberfläche gesehen. Schauen wir uns doch einmal im nächsten Schritt die etwas automatisierbarere Variante mithilfe der Kommandozeile (Cmd) an. Dort können wir einfache Befehle an die mitgelieferte Software schicken und so ohne manuellen Aufwand Re- und Deregistrierungen von virtuellen COM-Ports durchführen.
Arbeiten wir uns hier einmal durch die Arbeitsschritte von oben durch und schauen, wie Diese sich in der Kommandozeile umsetzen lassen. Nachdem wir jetzt nun wissen, dass durch com0com immer Port-Paare erzeugt werden, wird es auch – Überraschung – auf der Kommandozeile nicht großartig anders laufen.
Verfügbare Befehle auflisten – Hilfe?
Im ersten Schritt empfiehlt es sich, einmal den für viele Konsolenanwendungen gängigen Hilfe-Befehl aufzurufen. Damit können wir uns einen Überblick der Funktionalität(en) verschaffen und so einfacher an unser Ziel kommen. Öffne im nächsten Schritt also die „Setup Command Prompt“-Datei, Welche durch die Installation von com0com mitgeliefert wurde.
Die Datei findest Du relativ einfach über das Windows-Menü. Drücke die Windows-Taste und navigiere in der alphabetischen Übersicht nach „C“, wo Du dann com0com finden wirst. Klappe es auf und klicke die „Setup Command Prompt“-Datei an. Verwende hierzu auch alternativ die Windows-Suche (Welche bei mir in diesem Fall nicht immer zuverlässig geklappt hatte..) und suche einfach nach der jeweiligen Datei.
Nachdem Du die Konsolenanwendung aufhast, kannst Du den „help“-Befehl ausführen, dann solltest Du eine ähnliche Auflistung wie Diese hier bekommen:
Wie wir in der Ausgabe erkennen können, erwartet das Tool immer 2 Bestandteile. Der erste Bestandteil wären die Optionen, der Zweite beinhaltet dann das tatsächliche Command / den tatsächlichen Befehl. Werfen wir einen Blick auf den aktuell für uns wohl wichtigsten Befehl: „install“.
Der Install-Befehl
Um nun mithilfe des Install-Befehls analog zum obigen grafischen Beispiel ein COM-Port-Paar zu erstellen, rufen wir Ihn wie folgt auf:
install PortName=COM# PortName=COM#
Dadurch wird der Installations-Befehl ausgeführt und dabei ein Muster für die Bezeichnung der Ports a la „COM+Nummer“ verwendet. Als Antwort erhalten wir dann die installierten Ports (hier noch als CNCA/B). Wenn Du allerdings einen Blick in den Gerätemanager wirfst, wirst Du dort die korrekten Bezeichnungen sehen können.
Der Remove-Befehl
Wenn Du das gerade erstellte Port-Paar nun wieder löschen möchtest, kannst Du dafür den „remove“-Befehl verwenden. Letztendlich erwartet Dieser nur die „Id“ der Registrierung (das was nach CNCA/B kommt). Diese bekommst Du in der Ausgabe der Registrierung beispielsweise wie folgt:
CNCA0 PortName=COM#
CNCB0 PortName=COM#
In diesem Fall wäre die „0“ praktisch die Id der Registrierung. Diese Registrierung können wir dann so wieder entfernen:
remove 0
Fazit – virtuelle COM Ports
Im heutigen Beitrag habe ich Dir gezeigt, wie Du mithilfe von com0com virtuelle COM-Ports erstellen, bzw. emulieren kannst. Dazu haben wir im ersten Schritt die mitgelieferte grafische Oberfläche und andererseits die Konsolenanwendung verwendet. In einem folgenden Beitrag werde ich auch noch erläutern, wie Du virtuellen COM-Ports in C# und auch in Visual Basic .NET verwalten kannst. Dort werde ich dann auch im Detail auf eine tatsächlich stattfindende Kommunikation eingehen.
Weitere Links
- Virtuelle COM-Ports mit C# & VB.NET erstellen (folgt bald)
- VB.NET RFID Scanner – Chips mit dem Arduino Mikrocontroller auslesen
- Windows Fenster anordnen / aufteilen