Homepage Stefan Krauß
Modellbahn

Quelltext (Source Code) des Programms GBox2Eth

Allgemeines

Das Programm wurde in erster Linie geschrieben, um die Machbarkeit der Verwendung der Gleisbox als Mini-Zentrale an einem PC-Steuerprogramm zu zeigen. Es hat sich gezeigt, dass dies sehr gut funktioniert. Deshalb habe ich das Programm an dieser Stelle zur Verfügung gestellt.

Ich selbst verwende kein PC-Steuerprogramm und kann deshalb keine Hilfestellung bei dessen Betrieb geben. Auch wurde nicht auf die Umsetzung von Feinheiten geachtet, die eventuell von einem bestimmten Programm gefordert werden würden. Da das Programm aber im Quelltext zur Verfügung steht, kann das Programm gerne als Basis für eine entsprechende Entwicklung verwendet werden.

Da mir leider nicht die notwendige Zeit zur Verfügung steht, erhebt das Programm und der Code keinen professionellen Anspruch. Insbesondere sind nicht alle möglichen Fehlersituationen sauber abgefangen, was im Alltag aber kaum eine Rolle spielt. Es wurde darauf geachtet, dass das Programm möglichst einfach ist; auf besonders trickreiche Programmierung wurde verzichtet. Außerdem ist der Code im Wesentlichen reiner C-Code und verwendet kaum C++-Konstrukte, auch wenn die Programmierumgebung VisualStudie C++ Express mehr erlaubt hätte. Ich hoffe, der Code kann so mit wenige Aufwand in eigene Projekte und andere Umgebungen übernommen werden.

Voraussetzungen und Installation

Das Programm wurde mit Microsoft VisualStudio 2010 C++ Express Edition entwickelt. Microsoft stellt die Entwicklungsumgebung kostenlos im Internet zur Verfügung. Das Quellcode-Archiv enthält neben den eigentlichen Code-Dateien ein entsprechendes Projekt.

GBox2Eth-Quellcode für Tiny-CAN (Version 1.3, ZIP-Paket, etwa 15 kByte)

Aus dem Treiberpaket des Tiny-CAN (Download bei MHS-Elektronik, zur Zeit Datei tiny_can_210.zip, bei Verwendung einer anderen Version muss ggf. das Programm angepasst werden) wird die sogenannte CAN API benötigt. Dies ist eine Treiber-DLL, die den Zugriff auf das Tiny-CAN-Interface ermöglicht. Das Verzeichnis can_api aus dem Treiberpaket wird parallel zum Source-Code-Verzeichnis GBox2Eth kopiert. Die Dateistruktur sieht dann so aus:

- <Projektverzeichnis>
  |- GBox2Eth
  |  |- GBox2Eth
  |  '- ipch
  '- can_api
     |- doku
     |- lib
     '- sample

Auch der Quellcode der Variante für die CC-Schnitte ist verfügbar. Für dieses Paket sind keine weiteren Treiber notwendig, da die CC-Schnitte direkt über die virtuelle serielle Schnittstelle angesprochen wird.

GBox2Eth-Quellcode für CC-Schnitte (Version 1.0, ZIP-Paket, etwa 15 kByte)

Übersetzen

GBox2Eth wurde unter Windows XP kompiliert und getestet. Es läuft aber auch unter Windows Vista und Windows 7 und dürfte ebenso unter Windows 2000 laufen. Unter den alten Windows-Versionen wie Windows 98 und Windows NT funktioniert das Programm nicht, weil die neuen VisualStudio-Compiler diese Windows-Versionen nicht mehr unterstützten. Da das Programm keine Besonderheiten der neuen Betriebssysteme verwendet, müsste es auch unter einem älteren Windows mit einer älteren Studio-Version verwendbar sein. Der Programmtext ist dazu in ein neues Win32-Konsolenprojekt zu übernehmen und ggf. daran anzupassen.

Erläuterungen zum Code

Das Einlesen und Bearbeiten der Konfigurationsdatei sowie das Einlesen von Kommandos auf der Kommandozeile sind in eigenen Modulen ausgelagert. Die eigentliche Aufgabe wird hingegen komplett in der Hauptdatei abgearbeitet.

Das Programm benötigt (leider) drei Threads für die Bearbeitung der Daten vom CAN-Bus, vom Netzwerk und von der Kommandozeile:

  1. Warten auf den Empfang einer CAN-Botschaft, Bearbeiten der Botschaft und Weitergabe an das Netzwerk. Der Thread versteckt sich hier in der Bibliothek des CAN-Interfaces und wird durch das Aufsetzen einer Callback-Routine initiert. Diese Funktion wird aufgerufen, wenn die eine CAN-Botschaft empfangen wird. Bei der Variante für die CC-Schnitte wird dieser Thread explizit angelegt und wartet auf den Empfang von Zeichen von der seriellen Schnittstelle.
  2. Warten auf den Empfang eines Netzwerk-Frames, Weitergabe an den CAN-Bus. Für diese Aufgabe wird explizit ein eigener Thread geöffnet, weil der Empfang von Netzwerk-Frames einen blockierenden Aufruf erfordert.
  3. Warten auf Benutzereingaben. Auch das Abfragen der Konsoleneingaben ist ein blockierender Betriebssystem-Aufruf und wird hier im Haupt-Thread gemacht.

Da sowohl im Haupt-Thread auf Grund von Benutzereingaben, wie auch in den Empfangs-Threads für CAN- und Netzwerk-Daten zur Ausgabe auf die CAN-Bibliothek bzw. das Netzwerk zugegriffen wird, sind diese Schreiboperationen über Mutexe abgesichert. Eine weitergehende Synchronisation ist nicht notwendig, weshalb das Programm trotz Multi-Threading einigermaßen einfach und übersichtlich bleibt.

Lizenz und Haftungsausschluss

Das Programm GBox2Eth wird von mir frei, aber ohne jede Gewähr zur Verfügung gestellt. Ich hoffe, dass es nützlich ist, übernehme aber keinerlei Verantwortung für die Fehlerfreiheit oder auch nur Funktionstüchtigkeit für einen bestimmten Zweck (siehe GPL-Lizenz). Ich übernehme ebenso wenig eine Haftung für Probleme und Schäden, die mittelbar oder unmittelbar durch die Nutzung des Programms entstehen. Es besteht keinerlei Anspruch gegen mich, das Programm zu warten oder zum Laufen zu bringen.

GBox2Eth darf unter den Bedingungen der GNU General Public License Version 3 (GPL3, inoffizielle deutsche Übersetzung) weiter verbreitet und verändert werden.