Skip to content

Eine Java / C++(Arduino) basierte Schnittstelle für Zusi 3

Notifications You must be signed in to change notification settings

s256/Zusi3Schnittstelle

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 

Repository files navigation

Zusi3Schnittstelle

Eine Programmierschnittstelle für Zusi 3 in Java und C++ (Arduino)

C++ (Arduino) - Released 23.08.2018

Vorraussetzungen:

  • Hardware:

    • RAM: > 20KB
    • Eine Netzwerkverbindung
  • Software:

    • IDE: Arduino, Visual Studio, ...
    • LinkedList von Ivan Seidel Version 1.2.3, kann im Bibliotheksverwalter heruntergeladen werden
    • Zusi 3: Für ein optimales Erlebnis empfiehlt es sich, den Sendeabstand auf 0,100 - 0,250 sek zu stellen
  • Erfolgreich getestete Boards/Chips:

    • ESP8266 -> NodeMCU 1.0 (ESP12E-Module) (WiFi)
    • ESP32 -> NodeMCU-32S (WiFi)
    • ESP32 -> Olimex ESP32-Gateway (Ethernet)

Den Ordner Arduino klonen und die Arduino.ino starten. Das richtige Board auswählen. Standartmäßig ist in der Zusi3Schnittstelle.h das ESP8266 definiert! Bitte anpassen, oder den Code selber anpassen. Im Sketch wird eine Verbindung zu Zusi aufgebaut, das Programm läuft nicht weiter, ehe eine Verbindung erfolgreich hergestellt wurde.

Zusi3Schnittstelle *zusi;

void setup() {
	/* Netzwerkverbindung muss selber aufgebaut werden */

	zusi = new Zusi3Schnittstelle("10.0.0.20", 1436, "ESP8266 Client");
	zusi->setDebugOutput(true);
	zusi->reqFstAnz(Geschwindigkeit); //0x01
	zusi->reqFstAnz(Status_Zugbeeinflussung); //0x65
	zusi->requestFuehrerstandsbedienung(false);
	zusi->requestProgrammdaten(true); //Pfad, Zugnummer, etc...
	int i = 0;
	while (!zusi->connect()) {
		Serial.print("Verbindung zu Zusi fehlgeschlagen (");
		Serial.print(++i);
		Serial.println(")");
		delay(5000);
	}
	Serial.println("Verbunden mit Zusi");
}

Die Verbinung zu Zusi 3 wurde erfolgreich hergestellt, dann geht es weiter in der Methode loop(). Wichtig ist, dass in der Loop immer zusi->update() aufgerufen wird, da sich dort die Klasse darum kümmert, die Daten abzurufen und in Knoten zu verpacken, dort festgestellt wird, ob noch eine Verbindung zu Zusi besteht und wenn nicht, ein neuer Verbindungsaufbau versucht wird (Blockiert nur solange, wie ein Verbindungsversuch unternommen wird ~5 sek.). Liegen keine Daten an, wird NULL zurückgegeben, ansonsten ein Zeiger auf die Klasse Node. Weitere Informationen zu den Knoten und Attributen finden Sie in der Dokumentation zu Zusi 3.

void loop() {
	Node *node = zusi->update();
	if (node != NULL) {
		// Todo
	}
}

Im Beispiel Sketch Arduino.ino wird die Geschwindigkeit ausgegeben und die Leuchtmelder eines PZB-Leuchtmelderblocks angesteuert. Da Zusi mehrere Knoten der gleichen ID in einem Paket mitsenden kann ist es wichtig, immer mit der Liste direkt zu arbeiten, um wirklich alle Daten auswerten zu können, z.B.:

void loop() {
	Node *node = zusi->update();
	if (node != NULL) {
		for (int i = 0; i < node->getNodes()->size(); i++) {
			Node *subNode = node->getNodes()->get(i);
			if (subNode->getIDAsInt() == 0x0A) {
				//usw ...
			}
		}
	}
}

Attribute können ihre Daten in verschiedenen Datentypen zurückgeben, siehe Zusi 3 Dokumentation. Zur Auswahl stehen hier folgende Datentype:

  • byte* getDATA() : Rohe Daten - Benötigt zusätzlich getDATASize() da es sich immer einen Zeiger auf ein byte array handelt
  • String getDATAsString() : Zeichenkette für Texte
  • int getDATAAsInt() : Für Zahlen, wie die Zeit oder was auch immer
  • float getDATAAsFloat() : Für z.B. die Geschwindigkeit(m/s) (Wert * 3.6), oder HLL/HBL Druck, etc...
  • boolean getDATAAsBoolean() : Für z.B. ist die Taste gedrückt oder nicht

Die Methoden und Klassen sind übereinstimmend mit der Java Schnittstelle, da ich diese auf C++ portiert habe und angepasst habe. Somit ist die in Java geschriebene Schnittstelle (Noch nicht veröffentlicht) genau so zu benutzen, bis auf einen kleinen Unterschied.

Java - not released yet

About

Eine Java / C++(Arduino) basierte Schnittstelle für Zusi 3

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 78.1%
  • C 21.9%