Menu

ProjectBuild

Dave Brondsema Steffen A. Mork

Erstellung des Projektes

Alle genannten Directory-Angaben beziehen sich, soweit nicht anders erwähnt, auf das Hauptverzeichnis des Gesamtprojektes. Mit $HOME ist unter Unix, Linux oder Mac OS X das Home-Verzeichnis des Benutzers gemeint. Unter Windows ist es das Hauptverzeichnis des eigenen Profils. Dieses findet sich in der Regel unter C:\Dokumente und Einstellungen. Wird die Schreibweise ${variable} verwendet, wird auf ein Property aus einer Properties-Datei bezogen.

Damit man das Projekt erstellen kann, sind verschiedene Software-Pakete nötig. Unter Ubuntu müssen folgende Pakete installiert sein:

  • subversion
  • gcc-avr avr-libc avrdude
  • gcc g++ make
  • openjdk-7-jdk librxtx-java ant

Unter Windows müssen folgende Pakete installiert sein:

  • Subversion
  • JDK 7.0

Die Installation und Konfiguration von Eclipse wird weiter unten beschrieben. Zuerst empfiehlt es sich, das Projekt an beliebiger Stelle auszuchecken:

svn co http://svn.code.sf.net/p/mrw/code/trunk mrw

ATmega

Die Programmierung der Mikrocontroller besteht aus drei Teilen:

  • Bootloader der ATmega-Mikrocontroller (für ATmega)
  • Die Firmware selbst (für ATmega)
  • Tools, um die Firmware via CAN-Bus zu flashen (PC-seitig)

Der Bootloader kann über CAN-Bus eine neue Firmware "entgegennehmen" und flashen. Er muss mit einem STK500 oder AVR-ISP mittels avrdude in den ATmega geflasht werden. Es empfiehlt sich, den Bootloader vor dem Verbauen zu flashen. Dies muss nur einmalig geschehen.

cd mc
make clean depend
make -j

Nach diesem Build-Vorgang sind sowohl der Bootloader, als auch dir Firmware kompiliert. Der Bootloader muss auf den ATmega geflasht werden, bevor die Firmware programmiert werden kann. Das geschieht mit SPI oder JTAG. Dafür gibt es z.B. den STK500 oder den AVR-ISP. Mit dem Tool avrdude kann der Bootloader über die entsprechenden Flashergeräte programmiert werden. Um z.B. mit einem STK500v2 mittels avrdude unter Linux programmieren zu können, muss die Datei .avrduderc im Homeverzeichnis angelegt werden:

default_serial = "/dev/ttyUSB1";
default_parallel = "/dev/ttyUSB1";
default_programmer = "stk500v2";

Die Ports müssen den Gegebenheiten angepasst werden. Als default_programmer kommen folgende Werte infrage:

Interface Wert
STK 500v2 stk500v2
JTAG jtag1
AVR ISP avrispmkii

Um die Software mittels avrdude zu flashen, gibt es drei Make-Targets:

  1. make install_gateway installiert die Firmware für ein CAN-Gateway samt Fuses
  2. make install_bootloader installiert den CAN-Bootloader in einen CAN-Knoten samt Fuses und Locks. JTAG wird dabei abgeschaltet.
  3. make install_bootloader_jtag installiert den CAN-Bootloader in einen CAN-Knoten samt Fuses und Locks. JTAG wird dabei eingeschaltet. Somit lässt sich so ein CAN-Knoten debuggen.

canprog Tools

Nachdem die Bootloader geflasht sind, aber noch keine Firmware enthalten ist, ist die grüne LED dauerhaft eingeschaltet und die gelbe blinkt. Die LEDs beschreiben den Betriebszustand. Welcher Betriebszustand aktiv ist, kann auf dieser Seite nachgelesen werden. PC-seitig sind dafür auch Tools nötig, die entsprechend kompiliert werden müssen und nur unter Linux funktionieren. Dementsprechend müssen diese erst kompiliert werden.

cd canprog
make clean depend
make -j

Um die Firmware auf den CAN-Knoten zu übertragen, muss eine Verbindung über CAN-Bus hergestellt sein. Eine bestehende Verbindung kann mit folgendem Kommando überprüft werden:

./ping <serial_device>

Das serial_device ist z.B. unter Linux /dev/ttyS0 oder /dev/ttyUSB0, falls z.B. ein FT232-USB-auf-serial-Adapter eingesetzt wird. Kommen Meldungen zurück, funktioniert die Verbindung. Soll eine neue Firmware geflasht werden, muss folgendes aufgerufen werden:

./canproc <serial_device> ../mc/firmware.hex

Infolgedessen laufen sehr viele hexadezimale Zahlen über den Bildschirm.

Stellwerks-Software

Die Stellwerks-Software kann entweder aus dem Eclipse-SDK gestartet werden, oder Stand-Alone über das RCP-Runtime Binary. Beides muss nur bei http://archive.eclipse.org/eclipse/downloads/ heruntergeladen werden. Danach müssen die Plugins für das Eclipse SDK installiert werden und diverse Property-Dateien im Home-Verzeichnis konfiguriert werden.

Installation des Eclipse-SDK

Es empfiehlt sich die itemis-Distribution mit Xtext, weil hier die wichtigsten Plugins bereits enthalten sind. Beim Start fragt Eclipse nach dem Workspace. Hier wird die Arbeitskopie der Quellen angegeben. Danach müssen die Projekte mit File -> Import... -> General -> Existing Projects into Workspace importiert werden. Danach müssen diverse Update-Sites über Help -> Install new Software... -> Add hinzugefügt werden:

Die oAW-Tools müssen zur Xtext-Version passen. Hier gibt es folgende Reihenfolge:

Version oAW-Tools Xtext-Version Eclipse Version
5.0.x 0.7.x Galileo
5.1.x 1.0.x Helios
5.2.x 2.x.y Indigo und folgende

Nach der Installation von Plugins muss Eclipse neu gestartet werden.

Lokale Konfiguration

Danach sollten im Homeverzeichnis zwei Properties-Dateien angelegt werden: $HOME/.xtext.properties für die Build-Umgebung und $HOME/.comm.properties für die Kommunikation mit dem CAN-Gateway.

Beispiel für $HOME/.xtext.properties:

eclipse.home=/opt/oaw4/eclipse
eclipse.home.plugins=${eclipse.home}/plugins

os.tempdir=/tmp

mrw.home=/opt/mrw/
mrw.deploy=${mrw.home}/eclipse

Folgende Properties müssen korrekt konfiguriert sein:

Property Bedeutung
${eclipse.home} Basisverzeichnis der Eclipse-SDK-Installation mit unten aufgelisteten Plugins
${os.tempdir} Ein beliebiges Zwischenverzeichnis
${mrw.home} Das Basisverzeichnis in dem das RCP-Runtime-Binary-Paket ausgepackt wurde.

Build-Vorgang mit Ant im Terminal

Der Build mit Ant setzt eine funktionstüchtige Installation von Eclipse voraus. Eclipse muss für den Build mit Ant nicht gestartet sein.

Zuerst muss die Steuerungs-Software kompiliert werden:

cd Steuerung
ant clean package
cd ..

Danach muss die Datenstruktur speziell für die Anlage generiert und kompiliert werden. Als Beispiel wird [AnlageZwei] herangezogen.

cd AnlageZwei
ant clean generate package
cd ..

Zum Schluss wird die Stellwerks-Software kompiliert und deployed:

cd Stellwerk
ant clean deploy
cd ..

Danach ist im Verzeichnis ${mrw.deploy} das Stellwerk deployed und betriebsfertig.

Build-Vorgang in Eclipse

Nach erfolgreich importiertem Workspace müssen zuerst die Java-Klassen aus dem Modell generiert werden. Dazu muss ein Ant-View hinzugefügt werden: Window -> Show View -> Ant. Hier sollten alle build.xml hinzugefügt werden. Je nach gewünschter Anlage müssen in folgender Reihenfolge die Ant-Targets gestartet werden:

  • Steuerung package
  • Anlage<xy> generate (das kann auch durch den entsprechenden Start des Workflows geschehen)
  • Anlage<xy> package
  • Stellwerk package (falls RCP-Runtime verwendet wird)

Durch Starten der Ant-Targets package im selben Projekt und im Projekt Steuerung werden die Java-Klassen gepackt und in das Projekt Stellwerk kopiert. Durch Öffnen der plugin.xml im Projekt Stellwerk kann die Applikation gestartet werden. Das Stellwerk zeigt noch nicht das Gleisbild an. Das muss durch Umkonfigurieren im Run As Dialog geschehen. Dort muss das Working directory auf den Wert $(workbench_loc) gesetzt werden. Die Gleisbildkoordinaten werden in einem Verzeichnis des MRW-Hauptverzeichnis gesucht, das wie der Modellname benannt ist.

source:/trunk/Bilder/Trac/ProjectBuild/EclipseRunAsDialog.jpg

Dieser Vorgang muss im Stand-Alone-Build nicht durchgeführt werden, da dort während des Builds die Gleisbildkoordinaten in die Laufzeitumgebung mit kopiert werden.

RS232-Kommunikation unter Java

Um über RS232 unter Java kommunizieren zu können muss das Paket rxtx installiert sein. Unter Ubuntu kann das erfolgen, indem man das Paket folgendermaßen installiert:

apt-get install librxtx-java

Unter Windows müssen zwei DLLs in das system32 der Windows-Installation kopiert werden. Diese DLLs liegen im Verzeichnis rxtx im Projekt Steuerung. Für andere Platformen gibt es Installationshinweise auf der Homepage des RXTX-Projektes. Die Java-seitigen Jar-Dateien sind in den entsprechenden Projekten untergebracht und müssen nicht extra konfiguriert oder installiert werden. Für die Kommunikation über RS232 mit dem CAN-Gateway muss noch der serielle Port konfiguriert werden. Zu diesem Zweck muss in der genannten Properties-Datei das Property ${mrw.port} auf den seriellen Port zeigen. Das Property mrw.railway enthält den Klassennamen der zu steuernden Anlage. Diese Klasse muss eine Ableitung der Klasse de.morknet.mrw.Modell sein.

Jedes Property kann durch einen Host-spezifische Konfiguration ergänzt werden. So ist das Property mrw.port.leo nur für den Host Leo gültig. Es können mehrere Host-Konfigurationen parallel konfiguriert werden. Das ist besonders bei Netzkonfigurationen (z.B. NFS oder Domain Logon) sinnvoll.

Beispiel für $HOME/.comm.properties:

mrw.port=/dev/ttyS0
mrw.railway=de.morknet.mrw.Mork2

Die Kommunikation findet immer mit 115200 Baud mit den Bedingungen 8N1 statt. Es findet kein Hardware-Handshake statt. Diese Parameter werden automatisch von der Steuerungs-Software benutzt. Es muss nur sichergestellt werden, dass die Rechner-Hardware diese Übertragung fehlerfrei nutzen kann.

Achtung!
Sollte die RS232-Kommunikation nicht funktionieren, startet die Stellwerks-Software trotzdem im Simulationsmodus. Erkennen kann man das an den Debug-Ausgaben während des Starts:

    73 [main] INFO  de.morknet.mrw.MrwController  - Validierung vollständig. Fehlerzahl: 0
    76 [main] INFO  de.morknet.mrw.gui.info.Layout  - Lade Layout-Informationen aus Verzeichnis: /opt/mrw/eclipse-3.5/Mork2
    93 [main] DEBUG de.morknet.mrw.util.MrwProperties  - mrw.remotehost=pisces.morknet.de
    94 [main] DEBUG de.morknet.mrw.util.MrwProperties  - mrw.remoteport=4268
    94 [main] DEBUG de.morknet.mrw.comm.tcp.TcpConnection  - Versuche TCP-Verbindung über pisces.morknet.de:4268
  3114 [main] INFO  de.morknet.mrw.comm.Connection  - No route to host
  3114 [main] DEBUG de.morknet.mrw.util.MrwProperties  - mrw.port=/dev/ttyS0x
  3115 [main] DEBUG de.morknet.mrw.comm.Connection  - Port name: /dev/ttyS0x
  3115 [main] DEBUG de.morknet.mrw.comm.rs232.RS232Connection  - Versuche serielle Schnittstelle /dev/ttyS0x
Experimental:  JNI_OnLoad called.
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
  3151 [main] INFO  de.morknet.mrw.comm.Connection  - 
  3152 [main] INFO  de.morknet.mrw.comm.Connection  - Benutze Dummy-Verbindung...
  3152 [main] INFO  de.morknet.mrw.comm.Connection  - Versende Synchronisierungssequenz über die Verbindung...

CAN-Knoten konfigurieren

Um den CAN-Knoten eine Konfiguration zukommen zu lassen, muss das Projekt Stellwerk schon kompiliert sein, wodurch sich durch das Property mrw.railway in der Datei $HOME/.comm.properties die Zielanlage schon ergibt. Desweiteren müssen alle entsprechenden CAN-Knoten ihre korrekten Controller-IDs konfiguriert haben (s. setid). Nach folgendem Aufruf wird die modellierte Konfiguration an alle CAN-Knoten übertragen:

ant config

Sonstige nützliche Targets

Im Rahmen des Continuous Integration sind noch einige nützliche Ant-Targets zu erwähnen, die im Projekt [AnlageZwei] enthalten sind:

  • findbugs
  • emma - Test mit Code Coverage
  • test - Test ohne Code Coverage

Neues Metamodell installieren

Das Metamodell samt Editor ist im Projekt Modelleditor untergebracht. Der Build funktioniert nur bis Eclipse Helios inklusive. Grund herfür ist, dass das benötigte Plugin UML2Tools nicht weiter verwaltet wird. Unter model/Modelrailway.umlclass ist das Metamodell als UML-Diagramm untergebracht. Die Dateien model/Modelrailway.uml und model/Modelrailway.ecore sind über das Genmodel model/Modelrailway.genmodel gekoppelt. Nach Änderungen muss das Genmodel neu geladen werden. Dazu wählt man die Datei model/Modelrailway.genmodel aus und wählt im Kontextmenü den Menüpunkt Reload... aus. Im sich öffnenden Dialog wählt man den Importer UML aus. Danach wird zweimal mit Next > bestätigt. Im letzten Dialog muss das Ecore de.morknet.mrw.metamodel ausgewählt sein, um danach mit Finish den Ladevorgang zu beenden.

Um die Editoren zu generieren, muss die Datei model/Modelrailway.genmodel geöffnet werden. Auf dem Modelleditor genannten Root-Element wird mit der rechten Maustaste der Menüpunkt Generate all ausgewählt.

Um den Modelleditor zu benutzen, muss er als Plugin exportiert werden. Dazu wird - immernoch im Projekt Modelleditor - der Menüpunkt Export... ausgewählt. Im geöffneten Dialog wird unter Plug-in Development der Punkt Deployable plug-ins and fragments ausgewählt. Das Projekt Modelleditor muss ausgewählt werden. Der Export muss in die bestehende Eclipse-Installation erfolgen. Nach erfolgreichem Export muss Eclipse neu gestartet werden, um das Plugin zu aktivieren.

Der Modelleditor kann auch als Feature über die Updatesite installiert werden. Die Updatesite lautet http://eisenbahnsteuerung.org/updates/

Feature Build erzeugen und Updatesite aktualisieren.

Das Plugin kann auch als Feature verteilt werden. Soll ein neuer Feature Build erzeugt werden, muss entsprechend die Versionsnummer vom Feature Projekt Modelleditor Feature und allen geänderten Plugins hochgezählt werden. Haben sich die Abhängigkeiten geändert, müssen sie in der Feature.xml neu geladen und berechnet werden. Im Projekt Updatesite muss die neue Feature-Version der entsprechenden Kategorie angepasst werden. Nach _Build All' sind die entsprechenden JARs erzeugt worden. _

Es empfiehlt sich, die neuen JARs ins Subversion aufzunehmen. Ein Export des Projektes kann direkt mit der realen Updatesite z.B. mit rsync abgeglichen werden.

Viel Spaß!


Related

Wiki: AnlageZwei
Wiki: Home
Wiki: LedAnzeige

MongoDB Logo MongoDB