Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

Da immer mehr Zusi User von einem 1:1 Führerstand mit träumen, soll es zumindest an Datenaustausch nicht hapern.
Nachricht
Autor
Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#1 Beitrag von Arne aus dem Norden »

Moin,

seit über zwei Jahren beschäftige ich mich nun mit der Frage wie man Ausgaben in Zusi einfach, aber ohne große Kompromisse realisieren kann mit möglichst wenig Programmierkenntnissen. Die Beschäftigung mit dem Arduino lohnt sich dabei wirklich, weil die freie Programmierbarkeit selbst mit geringem Wissen gefühlt unendlich viele Einsatzmöglichkeiten beim Pultbau bietet.
Ich habe selber damals wegen Zusi bei Null Ahnung mit dem Arduino angefangen. Sehr dankbar war ich hier für geleistete Vorarbeit mit dem Arduino von Andreas Karg und nonesense, allerdings wollte ich noch einen Schritt weiter gehen und den -für mich (als Nicht-Programmiererfahrenen) eher unübersichtlichen- Teil der Konfiguration des Verbindungsaufbaus über USB mittels .NET komplett loswerden. Vielleicht ist das nichts ganz neues und der eine oder andere hier schon mit so einer Lösung unterwegs. Bislang fand ich allerdings keine Veröffentlichungen dazu.

Das Ergebnis ist also nun, per TCP-Client auf dem Arduino über die Ethernetschnittstelle eine ähnliche Funktionalität allein in der C++ änlichen Arduino-Sprache Processing zu erreichen. Im Grundzustand kann das Script die Werte für den PZB-Leuchtmelder direkt am Server abfragen und am Arduino angeschlossene LEDs ansteuern, siehe https://vimeo.com/71993509 (wurde testweise auch schon erweitert auf Anzeige anderer Werte wie z.B. Manometer über Schrittmotoren, siehe https://vimeo.com/79030868).

Der bisherige Weg über
ZusiServer -> .NET-Client -> Arduino über USB
verkürzt sich also auf
ZusiServer -> Arduino über Ethernet

Was soll das bringen?
- erstens muß ich mich -gerade als Einsteiger- nur noch mit einer Baustelle beschäftigen, dem Arduino. Sämtliche Einarbeitung in weitere Programme wie VisualBasic wird überflüssig
- zweitens halte ich diesen Weg für zukunftsfähig im Bezug auf Zusi3. Das derzeitige Script ist zwar nur für Zusi 2, aber das Prinzip dürfte sich später ähnlich auf Z3 anwenden lassen mit der zusätzlichen Option auf Eingaben über ein und denselben Arduino als Interface direkt mittels TCP-In.

Nachteilig ist höchstens, das man sich ev. einen Moment mit den Netzwerkeinstellungen in Windows beschäftigen muß damit sich der Arduino auch korrekt anmelden kann.

ACHTUNG, ich hab mich inzwischen wohl zwar einige 100 mal mit dem Zusi-Server problemlos auf diese Art über Stunden verbunden und Werte für diverse Ausgaben abgefragt, trotzdem gebe ich natürlich keinerlei Garantie auf die einwandfreie Funktionalität meiner Lösung. Das ganze ist eher als ein funktionierendes, ausbaufähiges Testscript zu betrachten. Ich kein Programmierer, lediglich ausdauernd in Trial-and-error...

1.: das benötigte Material

Hardware:

- einen Arduino mit dem üblichen (5V)-Shield-Design.
Ich hatte diesen TCP-Sketch schon auf dem Freeduino Serial, Arduino UNO und MEGA zum laufen, empfehle aber den MEGA zu verwenden. Der ist vom Preis/Leistungsverhältnis derzeit die erste Wahl. Die Preise beginnen bei Kauf in China um 13, in der BRD um 17 Euro. Zum Beispiel: http://www.ebay.de/itm/MEGA-2560-R3-ATM ... 1319684513

- der Arduino muß um eine Ethernetschnittstelle erweitert werden. Das geht mit dem ebenso überall erhältlichen W5100 Shield. Preis ab 5 Euro in China, ab ca. 10 Euro in der BRD. Zum Beispiel: http://www.ebay.de/itm/Ethernet-Shield- ... 1228626396

- selbstredent einen netzwerkfähigen PC, optional mit DHCP Router sowie zum Arduino passendes USB-Kabel zum Upload der Scripte und zum Netzwerk passende, übliche Ethernetkabel.

- für erste Ausgaben sechs normale LEDs mit passenden Vorwiderständen zum Betrieb an 5V am Arduino mit z.B. einem Steckbrett verdrahtet

Software:

- derzeit Zusi 2 (ist klar)
- Zusi-Server 1.4a
- die aktuelle, kostenlose Arduino IDE unter http://arduino.cc/en/Main/Software
- mein Ethernet-Client-Script für den Arduino http://www.ki.tng.de/~oellermann/zusi/E ... ultV22.zip

Aufbaubeispiel mit Freeduino Serial (statt Arduino MEGA), Ethernetshield W5100 und einem Nachbau des PZB-Würfels mit normalen LED samt Vorwiderständen:
Bild

Im nächsten Teil folgt, wie ich das Script auf den Arduino bekomme und für meinen Rechner anpasse.
Zuletzt geändert von Arne aus dem Norden am 01.02.2014 09:00:38, insgesamt 3-mal geändert.
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Andreas K.
Beiträge: 82
Registriert: 22.01.2007 18:01:17
Wohnort: Nürnberg

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#2 Beitrag von Andreas K. »

Arne, ich sage nur:

:respekt

Das Ethernet-Shield liegt seit Deinem ersten Beitrag schon im Regal :D

Solche Beiträge reißen mich immer wieder aus meiner Baulethargie, wenn ich Zeit hätte aber keine Lust habe, um am Fahruplt was zu machen.

Grüße

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#3 Beitrag von Andreas Karg »

Arne, ganz großartig! Mir tut's ja immer noch leid, dass ich da bei deinem Vorhaben keinerlei Unterstützung war. :( Um so besser, dass du dich von mir nicht hast ausbremsen lassen. :)

Benutzeravatar
Max Senft
Administrator
Beiträge: 3004
Registriert: 04.11.2001 14:01:40
Aktuelle Projekte: Dies und das
Wohnort: Blieskastel, Saarland, Deutschland
Kontaktdaten:

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#4 Beitrag von Max Senft »

Huhu!

Erstmal :tup für das Ergebnis von einem - wie du dich selbst bezeichnet hast - Programmierunerfahrenen. ;) Übung macht den Meister - oder so. :]

Ich habe gerade mal über den Code geschaut und mir ist aufgefallen, dass du doch der Ethernet-Kommunikation recht gut vertraust. Du prüfst bspw. die ACKs, die Zusi sendet nicht? Auch finde ich die Lösung die "Dekodierung" der Daten, die Zusi sendet, recht originell. Hier sieht man mal wieder, dass Programmieren auch nur Mathe ist :angst : Es gibt mehrere Wege um die Lösung zu bekommen.

Find ich gut - wie schon gesagt. Weiter so! :schaffner

Grüße
Max
Administrator, Programmierer, Ansprechpartner bei Problemen mit dem Board

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#5 Beitrag von Arne aus dem Norden »

Moin,
Andreas K. hat geschrieben:Solche Beiträge reißen mich immer wieder aus meiner Baulethargie, wenn ich Zeit hätte aber keine Lust habe, um am Fahruplt was zu machen.
@Andreas K.: Danke, dafür mache ich das. Wenns irgendjemand irgendwie weiterbringt wars nicht umsonst mit dem posten...
Andreas Karg hat geschrieben:Arne, ganz großartig! Mir tut's ja immer noch leid, dass ich da bei deinem Vorhaben keinerlei Unterstützung war. :( Um so besser, dass du dich von mir nicht hast ausbremsen lassen. :)
@Andreas Karg: Du warst ja eine Unterstützung. An zwei, drei Stellen wäre ich ja damals garnicht weitergekommen ohne deine Tipps und wie man einen zerschossenen Freeduino-Bootloader wiederherstellt habe ich ja auch am praktischen Beispiel mal probieren können :rofl
Max Senft hat geschrieben:Ich habe gerade mal über den Code geschaut und mir ist aufgefallen, dass du doch der Ethernet-Kommunikation recht gut vertraust. Du prüfst bspw. die ACKs, die Zusi sendet nicht? Auch finde ich die Lösung die "Dekodierung" der Daten, die Zusi sendet, recht originell.
@Max: die fehlenden Prüf- und Abbruchbedingungen sind -neben der etwas unübersichtlichen Erweiterung der Abfragen- sicherlich große Schwachpunkte.
Als ich vor einem halben Jahr konkret damit rumprobiert habe, war für mich schnell die Frage ob der Aufwand sich überhaupt noch lohnt wenn wegen Z3 das alles eh neu muß.
Ich sehe das hier als so eine Art funktionierende Beweisführung für mich, das es allein mit dem Arduino geht. Daneben soll es vielleicht eine Diskussionsgrundlage sein. Jeder der mehr versteht als ich kann sich gerne -auch mit kleinen Anmerkungen- einbringen. Ich hätts auch ganz für mich behalten können aus Angst belächelt zu werden wegen der "Schreibweise", aber ich glaube immer noch daran das es sich vielleicht weiterentwickelt wenns öffentlich ist.
Obwohl sich die Mühe wohl erst für Zusi 3 richtig lohnt...

Gruß, Arne
Zuletzt geändert von Arne aus dem Norden am 14.01.2014 08:49:26, insgesamt 1-mal geändert.
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#6 Beitrag von Arne aus dem Norden »

So, weiter gehts mit
2.: die Installation

Für alle, die noch nie im Leben etwas mit Arduinos zu tun hatten eine etwas ausführlichere Erklärung.

Nach dem Download der Arduino IDE über den oben genannten Link gibt es hier Anleitungen zur Installation auf allen gängigen Betriebsystemen:
http://arduino.cc/en/Guide/HomePage

Nach erfolgreicher Installation der IDE und ggf der Treiber zuerst den Arduino über USB mit dem Rechner verbinden.
Nach dem Aufruf der IDE müssen noch zwei Sachen vorab erledigt werden:
das angesteckte Board muß aus der Liste unter "Tools" gewählt werden und der verwendete Port.
Als Beispiel unter Windows XP mit einem Arduino MEGA 2560 an COM4:

Bild

Bild

Der verwendete Port kann auch nach dem Anschluß des Arduinos vor dem Start der IDE bereits in den Systemeinstellungen nachgesehen werden.

Nun kann das Script von mir zur Verbindung aufgerufen werden (Link zum Download gabs ja schon oben).
ACHTUNG, NEU
Änderung ab Version Ethernet_PultV21:
Nach dem runterladen und entpacken die Datei Ethernet_PultV21.ino öffnen, und dann oben den Tab Configuration.h wählen. Ich habe alle Grundeinstellungen jetzt dort übersichtlich zusammengefasst.
Auf dieser Konfigurationsseite befinden sich insgesamt 5 anpassbare Werte, von denen im Idealfall sogar nur ein einziger (bei Betrieb an z.B. einem Router mit DHCP) geändert werden muß (und zwar die IP des Rechners, auf dem ZusiServer läuft). Das sollte mit den Kommentaren dort alles selbsterklärend sein hoffe ich.

Das Netzwerk des Server-PC muß selbstredend auf dem Port von ZusiServer freigegeben sein (das Script verwendet DEFAULT den Port 1435).

Nach drücken der "Upload" Taste (oben die zweite von Links mit dem Symbol "->") sollte das Script innerhalb einiger Sekunden auf den Arduino geladen werden. Die TX/RX LEDs auf dem Board zeigen den Uploadvorgang auch optisch an.

Jetzt kann sich -nach Herstellen einer passenden Netzwerkkabelverbindung zwischen PC/Router und dem Shield- der Arduino mit dem Zusi-Server verbinden. Wir lassen die USB-Verbindung zusätzlich angeschlossen, damit das Board mit Strom versorgt wird und die testweise Ausgabe auf den seriellen Monitor erfolgen kann.
-> normalerweise sollte man die Einschaltreihenfolge 1. Zusi-Server und dann 2. Arduino einschalten/resetten nehmen
in diesem Fall bei geöffneter Arduino IDE wird ein Reset des Boards aber auch durchgeführt, wenn wir die Taste für den seriellen Monitor drücken (ganz rechts, Symbol mit der Lupe). Vorher aber Zusi-Server an.

Bei mir wird die Verbindung über einen NETGEAR-Router hergestellt, was 5 bis 10 Sekunden dauern kann.
Dann sollte es so ausschauen:

Bild

Ab jetzt alles wie immer. Zusi öffnen, Strecke und Fahrplan laden, Datenausgabe aktivieren. Die angefragten PZB Werte sollten jetzt ganz normal angezeigt werden:

Bild

Nach Auswahl eines Zuges sollten auch im seriellen Monitor die Werte der PZB LM erscheinen. Mit aufleuchten des Melders "85" steht im Monitor eine 1,00 bei Befehl 19:

Bild

Wer jetzt an die PIN-Belegungen nach der Liste im Script
// Pinbelegungen für angeschlossene LED
int ledPZB40 = 2;
int ledPZB55 = 3;
int ledPZB500 = 5;
int ledPZB70 = 6;
int ledPZB85 = 7;
int ledPZB1000 = 8;

LEDs mit Vorwiderständen für 5V an den Arduino anschließt, sollte bereits eine funktionierende Ausgabe haben.

Zum regulären Betrieb muß die Arduino IDE mit dem seriellen Monitor selbstredend NICHT geöffnet werden und sollte das auch nicht, da diese Ausgabe leistung kostet und -je nach Menge abgefrager Wert- ordentlich bremst.

Zusi-Server starten, Arduino danach einschalten und Anmeldung innerhalb einiger Sekunden abwarten.
Das USB-Kabel muß zur Stromversorgung des Arduinos weiter angeschlossen bleiben. Alternativ kann man ein Steckernetzteil mit Hohlstecker, center positiv, 7 - 12V am Arduino verwenden.

Im nächsten Teil werde ich darauf eingehen, wie man das Script um mehr Abfragen erweitern kann.
Zuletzt geändert von Arne aus dem Norden am 26.01.2014 09:52:53, insgesamt 4-mal geändert.
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#7 Beitrag von Marvin »

Sehr schön, genau sowas fehlt mir für mein Projekt noch :bpl

Benutzeravatar
nonesense
Beiträge: 504
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#8 Beitrag von nonesense »

Arne, da kann man dir nur gratulieren!

Meine aufgabe ist es dann wohl weitere I²C Komponenten für diese Sache zu entwickeln.
Zauberwürfel und Schrittmotorkarte hätten wir ja schon.

Da wäre es ja fast kosequent auch ein ganzes MFA zu konzipieren.

Gruß
Jens

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#9 Beitrag von Arne aus dem Norden »

nonesense hat geschrieben:Meine aufgabe ist es dann wohl weitere I²C Komponenten für diese Sache zu entwickeln.
Zauberwürfel und Schrittmotorkarte hätten wir ja schon.
Ne nahtlose Einbindung der neuen Platine mit einem Demo-Sketch für mechanische Uhren oder Manometer in dieses Projekt wäre natürlich total geil :D

Das setzt aber vorraus, das es mit dem Kram von mir bis hierher überhaupt erstmal positives Feedback aus der praktischen Umsetzung gibt... :rolleyes:
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#10 Beitrag von Marvin »

Also ich würde mich darüber freuen, wenn du noch die restlichen Befehle veröffentlichst 8)

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#11 Beitrag von Arne aus dem Norden »

Marvin hat geschrieben:Also ich würde mich darüber freuen, wenn du noch die restlichen Befehle veröffentlichst 8)
Das mache ich dann doch am Wochenende glatt mal... :D

Hat den Kram denn hier jetzt schonmal jemand getestet?
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#12 Beitrag von Marvin »

Da mein Arduino defekt ist, muss ich gerade auf den neuen warten. Müsste aber morgen da sein, dann teste ich das gleich ;)

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#13 Beitrag von Marvin »

So, mein Board ist heute endlich angekommen.

Wenn du mir noch ein paar Befehle gibst, würde ich diese natürlich auch gerne testen, wenn ich schon dabei bin :)

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#14 Beitrag von Arne aus dem Norden »

Hi,
Marvin hat geschrieben:So, mein Board ist heute endlich angekommen.
Mein Zusi Rechner ist dafür Sonntag Schrott gegangen. Erst ein Kurzschluß in einem gebrochenen USB-Stecker und keine 24h später ist die Festplatte in die ewigen Jagdgründe gegangen.
Marvin hat geschrieben:Wenn du mir noch ein paar Befehle gibst, würde ich diese natürlich auch gerne testen, wenn ich schon dabei bin :)
Sobald ich den Kram von der Datenrettung wieder runter habe stelle ich das ein. Da der PC grundsätzlich schon wieder läuft, wird das in kürze sein.

Trotzdem solltest du das Script erstmal so installieren wie es ist. Man kann es zwar nach Anleitung ohne eigene Programmierkenntnisse erweitern, aber es ist sehr leicht etwas zu übersehen weil an mehreren Stellen geändert werden muß. Wenn es dann nicht läuft weißt du nicht woran es liegt...

Gruß, Arne
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#15 Beitrag von Marvin »

Also die TCP-Verbindung läuft, jetzt muss ich mir nur schnell noch ne PZB zusammenlöten :P

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#16 Beitrag von Marvin »

Also ich hab die Pinbelegung jetzt so angepasst, dass es auf dem Arduino eine Reihe ergibt:

Code: Alles auswählen

// Pinbelegungen für angeschlossene LED
int ledPZB40 = 22;
int ledPZB55 =24;
int ledPZB500 =26;
int ledPZB70 =28;
int ledPZB85 = 30;
int ledPZB1000 = 32;
Aber irgendwie will es nicht so ganz. Pin 22 ist dauerhaft durchgeschalten, alles andere leuchtet nicht.

Muss aber anscheinend an den Ausgängen liegen, Zusi erkennt auch die angeforderten Variablen :(

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#17 Beitrag von Arne aus dem Norden »

Marvin hat geschrieben:Also ich hab die Pinbelegung jetzt so angepasst, dass es auf dem Arduino eine Reihe ergibt:

Code: Alles auswählen

// Pinbelegungen für angeschlossene LED
int ledPZB40 = 22;
int ledPZB55 =24;
int ledPZB500 =26;
int ledPZB70 =28;
int ledPZB85 = 30;
int ledPZB1000 = 32;
Aber irgendwie will es nicht so ganz. Pin 22 ist dauerhaft durchgeschalten, alles andere leuchtet nicht.
Hi,

hab ich sofort mal genau so gemacht. Ich hatte genau das gleiche, LM Befehl 40 leuchtete, sonst nix.

Da habe ich gesehen, das ich den ganzen Kram einen PIN zu weit an Ende der Buchsenleiste gesteckt hatte, also Befehl 40 statt auf PIN 22 auf 5V :rolleyes:
Und ich hatte meine IP im Script nicht aktualisiert nachdem ich heute ja ein neues Windows aufgespielen mußte (Win 7 statt XP).
Beides schnell geändert, jetzt läuft es vollkommen problemlos an PIN 22 bis 32...
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#18 Beitrag von Arne aus dem Norden »

Nächster Teil

3.: individuelle Abfragen

Vorab: man sollte -bevor man den Sketch um eigene Abfragen erweitert- die Sache erstmal in der ursprünglichen Form zum laufen haben. Das verringert die Anzahl möglicher Fehlerquellen. Der Sketch eignet sich derzeit zur Abfrage von Befehlen die als single oder enum-Wert vorliegen. Das sollte für die allermeisten Fahrpulte reichen.
Alle Änderungen, die erweiterte Abfragen betreffen werden nur in der Datei Ethernet_PultV22.ino vorgenommen.

Es gibt drei Bereiche an denen Änderungen nötig sind. Diese sind von mir als Block kenntlich gemacht.
In diesem Beispiel wird es um die Erweiterung um den Leuchtmelder SiFa gehen.

Setup:
In diesem ersten Bereich muß die Pinbelegungen für die SiFa definiert werden. ledSIFA und Pinnummer sind nicht fest, die Werte könnten auch irgendwie anders lauten. Das muß dann aber in jedem vorkommen für die Sifa-LED so sein.

// <-- Anfang des 1. Bereichs für individuelle Anpassungen -->
// Pinbelegungen für angeschlossene LED
int ledPZB40 = 2;
int ledPZB55 = 3;
int ledPZB500 = 5;
int ledPZB70 = 6;
int ledPZB85 = 7;
int ledPZB1000 = 8;
int ledSIFA = 9;
// ACHTUNG: je nach Arduino stehen einige PINs hier NICHT für
// Ausgaben frei zur Verfügung, da möglicherweise intern belegt.
// Darunter fallen ggf. PIN 0, 1, 4, 10, 50, 51, 52, 53


void setup()
{
// PINs für Ausgaben als Ausgänge setzen
pinMode(ledPZB55, OUTPUT);
pinMode(ledPZB70, OUTPUT);
pinMode(ledPZB85, OUTPUT);
pinMode(ledPZB40, OUTPUT);
pinMode(ledPZB500, OUTPUT);
pinMode(ledPZB1000, OUTPUT);
pinMode(ledSIFA, OUTPUT);
// <-- Ende des 1. Bereichs für individuelle Anpassungen -->


Details zur Problematik mit Doppelbelegungen von Pins finden sich unter
http://arduino.cc/de/Main/ArduinoEthernetShield


Anforderung der benötigten IDs:
Hier der gesamte Block den es betrifft im original:

// <-- Anfang des 2. Bereichs für individuelle Anpassungen -->
// Hier Anforderung der benötigten IDs
case STATE_NEEDED_DATA: {
#define NUM_NEEDED 15 // Gesamte Größe von needed, Feld 0 mitzählen!
byte length = NUM_NEEDED-4;
byte needed[NUM_NEEDED];
needed[0] = length; // PACKET_LENGTH (4 bytes)
needed[1] = 0x00;
needed[2] = 0x00;
needed[3] = 0x00;
needed[4] = 0x00; // NEEDED DATA (2 bytes)
needed[5] = 0x03;
needed[6] = 0x00; // Befehlsvorrat (2 bytes)
needed[7] = 0x0A;
// ab dieser Stelle können eigene Befehle ergänzt werden
// Übersicht der Befehle unter Configuration.h
needed[8] = 20; // PZB "1000"
needed[9] = 21; // PZB "500"
needed[10] = 22; // PZB "40"
needed[11] = 23; // PZB "55"
needed[12] = 24; // PZB "70"
needed[13] = 25; // PZB "85"
needed[14] = 86; // "Türen"
client.write(needed, NUM_NEEDED);
state = STATE_NEEDED_DATA_ACK;
break; }
// <-- Ende des 2. Bereichs für individuelle Anpassungen -->


Es müssen zwei Änderungen gemacht werden:

1. Der Befehl für die SiFa muß in die Liste. Dazu die Nummer des Befehls aus dem Tab Configuration.h unten heraussuchen. Nun neue Zeile einfügen, den Wert in den eckigen Klammern um eins erhöhen und den Wert 36 für SiFa eintragen:
needed[15] = 36; // LM "Sifa"

2. Wichtig: dem Compiler muß die die Gesamtsumme aller Felder von needed bekanntgemacht werden. Deswegen muß in dieser Zeile:
#define NUM_NEEDED 15
nun angepaßt werden auf
#define NUM_NEEDED 16

Das das ganze bei 15 in der Liste endet obwohl es bei NUM_NEEDED 16 sind ist schon ok, da die Zählung bei 0 beginnt und nicht bei eins. Hauptsache, mit jeder weiteren Ergänzung werden die Werte erneut angepasst.

Fertig sollte es dann so aussehen:

// <-- Anfang des 2. Bereichs für individuelle Anpassungen -->
// Hier Anforderung der benötigten IDs
case STATE_NEEDED_DATA: {
#define NUM_NEEDED 16 // Gesamte Größe von needed, Feld 0 mitzählen!
byte length = NUM_NEEDED-4;
byte needed[NUM_NEEDED];
needed[0] = length; // PACKET_LENGTH (4 bytes)
needed[1] = 0x00;
needed[2] = 0x00;
needed[3] = 0x00;
needed[4] = 0x00; // NEEDED DATA (2 bytes)
needed[5] = 0x03;
needed[6] = 0x00; // Befehlsvorrat (2 bytes)
needed[7] = 0x0A;
// ab dieser Stelle können eigene Befehle ergänzt werden
// Übersicht der Befehle unter Configuration.h
needed[8] = 20; // PZB "1000"
needed[9] = 21; // PZB "500"
needed[10] = 22; // PZB "40"
needed[11] = 23; // PZB "55"
needed[12] = 24; // PZB "70"
needed[13] = 25; // PZB "85"
needed[14] = 86; // "Türen"
needed[15] = 36; // LM "Sifa"
client.write(needed, NUM_NEEDED);
state = STATE_NEEDED_DATA_ACK;
break; }
// <-- Ende des 2. Bereichs für individuelle Anpassungen -->


Die Reihenfolge kann dabei natürlich auch umsortiert werden, z.B.:
needed[8] = 20; // PZB "1000"
needed[9] = 21; // PZB "500"
needed[10] = 22; // PZB "40"
needed[11] = 23; // PZB "55"
needed[12] = 24; // PZB "70"
needed[13] = 25; // PZB "85"
needed[14] = 36; // LM "Sifa"
needed[15] = 86; // "Türen"



Ausgabe:
Dieser dritte und letzte Bereich mit Änderungen ist fast ganz am Ende des Sketches und muß jetzt noch um die Ausgabe für die neue Abfrage erweitert werden. Dazu wird in den gekennzeichnet switch-Block ein neuer Fall eingebaut:

case 36:
Serial.println(singlewert);
digitalWrite(ledSIFA, singlewert != 0);
break;


Wichtig ist hierbei, das zum einen jeder neue Block mit case befehlsnummer: beginnt und mit break; beendet wird und zum anderen -je nach abgefragten Wertetyp (also single oder enum) - mit der entsprechenden Variable singlewert oder intwert innerhalb des jeweiligen case/break-Blocks gearbeitet wird. Das Beispiel sollte das verdeutlichen, case 20 bis 25 arbeiten mit singlewert, case 86 mit enum (intwert)
Wer sich über Details der Ausgaben informieren will, kann das hier nachlesen:
https://people.fh-landshut.de/~gseifert ... enZusi.pdf

Leuchtmelder als singlewerte sollten dabei idealerweise mit "ungleich 0" für ON ausgewertet werden.
Grundsätzlich lassen sich alle Werte auch z.B. auf analoge Pins, angeschlossene Displays, den I2C-Bus oder den seriellen Monitor schreiben.
Beispiele dafür werden in den nächsten Beiträgen folgen.
Zuletzt geändert von Arne aus dem Norden am 26.01.2014 15:51:36, insgesamt 6-mal geändert.
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

lukmilei
Beiträge: 253
Registriert: 29.03.2010 21:00:15
Kontaktdaten:

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#19 Beitrag von lukmilei »

Hallo Dude,
Dude hat geschrieben:Natürlich lassen sich auf diesem Wege nicht nur Leuchtmelder ein- oder ausschalten, sondern auch Werte für Tachos oder Manometer auslesen und auf die Analogpins oder über I2C ausgeben.
Aber das wird ein weiterer Beitrag für sich.
Das wird interessant. Ich kämpfe gerade damit, die Geschwindigkeit über diese Anzeige auszugeben. Im Serial Monitor bekomme ich die aktuelle Geschwindigkeit schonmal angezeigt, nur die siebensegment Anzeige will noch nicht leuchten :(

Viele Grüße
Lukas

PS: Wo liegt der Unterschied zwischen der V2.0 und der V2.1?

Marvin
Beiträge: 43
Registriert: 30.03.2013 22:50:02
Aktuelle Projekte: Br 422-426 Fahrpult [Planung]
Wohnort: Stuttgart

Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP

#20 Beitrag von Marvin »

Okay, jetzt funktioniert es komischerweise :whatever

Ist es mit deinem Script auch möglich, die die Abfahranzeige auszugeben?
Ich will nacher möglichst ohne Hilfefenster fahren, und ich brauche 2 kleine LED's, die mir anzeigen, wann ich die Türen schließen und wann ich losfahren darf.

Antworten