PositionSync-Demo

Aus ARTECO Wiki
Version vom 18. Dezember 2009, 15:56 Uhr von Alex (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Die PositionSync-Demo ist eine Auskopplung des zum OSC3 gehörenden PositionSync als eigenständige Anwendung. Sie ermöglicht es, Positionsdaten unabhängig vom …“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die PositionSync-Demo ist eine Auskopplung des zum OSC3 gehörenden PositionSync als eigenständige Anwendung. Sie ermöglicht es, Positionsdaten unabhängig vom OSC3-Client zu übertragen und ist zudem als Beispiel für die Nutzung der XML-Schnittstelle gedacht.

Wie komme ich zu einer lauffähigen Anwendung?

Voraussetzungen

  • Qt 4 Entwicklerbibliotheken (z.B. die freie und kostenlose LGPL Version, zu beziehen auf http://qt.nokia.com/downloads)
  • Module: QtXml, QtSql, QtNetwork.

Setzen der Fahrzeug-UUIDs

In Datei src/tool/positionsync.cpp, Funktion syncPositions(), Zeilen 90-92:

m_systemsToSync
   << "A3DBE8F0-3EEA-012C-CE93-000D609CCCD8"
   << "CC580C50-18A2-012C-1FB0-000D609CCCD8"
   << "316A95D0-9F94-012C-056C-000D609CCCD8";

stehen die zu synchronisierenden Fahrzeuge. Als Beispiel drei Fahrzeug-UUIDs eingetragen. Falls keine Leseberechtigung für diese Fahrzeuge existiert, sollten hier UUIDs von Fahrzeugen eingetragen werden, für die Berechtigungen existieren. Die Liste kann beliebig lang sein, es können mehr oder weniger UUIDs eingetragen werden (jeweils mit << "..." wird ein Eintrag angehängt, und nicht das Semikolon am Schluß vergessen).

Übersetzen des Codes

  • entweder: positionsync-demo.pro in die bevorzugte Entwicklungsumgebung laden. Hierfür bietet sich z.B. der von Qt mitgelieferte QtCreator an. Dort existiert ein Menüpunkt Build/Build All.
  • oder: Eine Shell oder Eingabeaufforderung öffnen und dort folgendes tun:
    1. ins Verzeichnis arteco-positionsync‑demo-1.0 wechseln
    2. qmake
    3. make

Die Anwendung wird nun erstellt als bin/positionsync‑demo oder unter Windows als tmp/positionsync‑demo.exe und kann von dort ausgeführt werden.


Hinweise zur Benutzung

Funktionsweise

Nach dem Einloggen und Anklicken des Buttons "Synchronization" wird eine Verbindung zum OSC3-Webservice aufgebaut. Für die im Code eingetragenen Fahrzeugsysteme werden nun Positionsdaten abgerufen. Die Antwort, ein XML-Dokument, wird geparst und die Datensätze werden in einer lokalen SQLite-Datenbank gespeichert. Sodann wird die nächste Menge an Positionsdaten abgerufen, bis die lokalen Datenbanken für die gegebenen Systeme auf dem aktuellen Stand sind.

Datenbankdateien

Die lokalen Datenbanken befindet sich in einem Unterverzeichnis, das in der Datei src/config.h definiert ist:

/** subdirectory for position databases, relative to application directory */
#define DIR_POSITIONS "positions"

Für jedes Fahrzeug wird eine eigene Datenbankdatei angelegt. Sie sind benannt nach dem Namensschema: db_<Fahrzeug-UUID>.

Eine Datenbank kann durch einfaches Löschen der jeweiligen Datei gelöscht werden.

PositionSync::getLastTimestamp()

Hier wird bestimmt, ab wann die ersten Positionsdaten abgefragt werden sollen, falls noch keine Daten in der lokalen Datenbank vorliegen. Als Default wird hier "2000-01-01T00:00:00" (yyyy-MM-ddThh:mm:ss) zurückgegeben. Wenn keine Daten aus der Urzeit gebraucht werden, kann der Defaultwert hier geändert werden.

Dieser Wert gilt nur für Fahrzeuge, die zum ersten mal gesynct werden. Sind schon Daten in der Datenbank vorhanden, wird automatisch der letzte Datenbankeintrag als neuer Zeitstempel gewählt.

Muttithreading

Um die Benutzeroberfläche agil zu halten, läuft die Synchronisation in einem eigenen Thread. Wenn der Code angepaßt wird, ist zu beachten, daß Kommunikation zwischen Objekten, die in verschiedenen Threads leben, nur durch (queued) Signals/Slots erfolgen sollte - nicht durch direkte Methodenaufrufe.


Abhängigkeitsbaum

MainWindow  (interagiert mit dem Nutzer)
     `--> SyncThread  (startet neuen Thread und erzeugt PositionSync-Objekt)
                 `--> PositionSync  (steuert Synchronisation and Datenbankeinträge)
                          `.`----> ResourceLoader  (Erstellt Anfragen an den Webservice)
                            `.          `--> HttpXml  (Kommunikation mit Webservice
                              `--> Position  (hält Daten)