Ausgaben Zusi für Leuchtmelder
Ausgaben Zusi für Leuchtmelder
Moin zusammen!
Wir sind grade dabei ein Fahrpult aus dem 628 umzubauen. Dank des Forums und persönlicher Unterstützung haben wir auch schon viele Dinge ans laufen gebracht. Die Eingaben werden dabei über ein Arcaze gesteuert, die Ausgaben laufen über einen Arduino Mega über Ethernet-Shield.
Der Tacho und die Bremsanzeigen/Manometer funktionieren alle. Nun stehen wir vor der Herausforderung die Leuchtmelder ans Laufen zu bringen. Die Ausgaben für die PZB und Sifa, sowie mit etwas Trickserei auch die "Türen offen" Leuchtmelder funktionieren annehmbar (wenn auch nicht ganz perfekt). Allerdings erschließen sich uns die TCP-Werte nicht, die Zusi für z.B. Schleuderschutz oder die Mg-Bremse liefert.
Soweit ich das auslesen konnte liefert Zusi nur die Flankenauswertung, ohne dabei eine Unterscheidung zu machen, ob es sich um eine positive oder negative Flanke handelt. Laut seriellem Monitor ist der Inhalt des Bytes "0". Ein einfaches "Leuchtmeder an/aus" gibt's ja nicht.
Hat jemand eine Idee, wie man daraus einen brauchbaren Wert umwandeln kann? Oder muss der Ansatz ein ganz anderer sein.
Wenn wir das Projekt komplett am Laufen haben, wird es dazu übrigens auch nochmal einen eigenen Beitrag mit Erfahrungsberichten und dem Hintergrund geben. Wir sind ja quasi in den letzten Zügen.
Wir sind grade dabei ein Fahrpult aus dem 628 umzubauen. Dank des Forums und persönlicher Unterstützung haben wir auch schon viele Dinge ans laufen gebracht. Die Eingaben werden dabei über ein Arcaze gesteuert, die Ausgaben laufen über einen Arduino Mega über Ethernet-Shield.
Der Tacho und die Bremsanzeigen/Manometer funktionieren alle. Nun stehen wir vor der Herausforderung die Leuchtmelder ans Laufen zu bringen. Die Ausgaben für die PZB und Sifa, sowie mit etwas Trickserei auch die "Türen offen" Leuchtmelder funktionieren annehmbar (wenn auch nicht ganz perfekt). Allerdings erschließen sich uns die TCP-Werte nicht, die Zusi für z.B. Schleuderschutz oder die Mg-Bremse liefert.
Soweit ich das auslesen konnte liefert Zusi nur die Flankenauswertung, ohne dabei eine Unterscheidung zu machen, ob es sich um eine positive oder negative Flanke handelt. Laut seriellem Monitor ist der Inhalt des Bytes "0". Ein einfaches "Leuchtmeder an/aus" gibt's ja nicht.
Hat jemand eine Idee, wie man daraus einen brauchbaren Wert umwandeln kann? Oder muss der Ansatz ein ganz anderer sein.
Wenn wir das Projekt komplett am Laufen haben, wird es dazu übrigens auch nochmal einen eigenen Beitrag mit Erfahrungsberichten und dem Hintergrund geben. Wir sind ja quasi in den letzten Zügen.
Es grüßt aus dem hohen Norden,
Sven
Sven
- Carsten Hölscher
- Administrator
- Beiträge: 33548
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: Ausgaben Zusi für Leuchtmelder
So ganz hab ich das Problem nicht verstanden. Man kann sich ja z.B.im ftd-Editor ein fertiges Arduino-Script generieren lassen.
Carsten
Carsten
Re: Ausgaben Zusi für Leuchtmelder
Moin Carsten.
Soweit eine gute Idee. Leider klappt das bei uns nicht. Unser bis dato funktionierendes Script (PZB LM, Sifa LM, Manometer, Tacho) überträgt über Ethernet, das automatisch erstellte läuft ja über die USB-Verbindung. Wir haben dann einfach mal das vom ftd-Editor erzeugte Script genommen und unsere Ethernetverbindung weggelassen. Der Arduino bemängelt direkt im vom ftd-Editor erzeugten Text alle Variablen, die mit "-" geschrieben sind (wie zum Beispiel "valSchalter_Mg-Bremse"), weil er dies als Minus interpretiert. Heißt: wir konnten es so gar nicht auf den Arduino schreiben. Wir haben dann die "-" dann zu "_" geändert. Damit ging zwar das Überschreiben auf den Arduino (also die Fehlermeldungen waren weg), aber die Anzeigen im Pult machen jetzt einfach gar nichts mehr.
Da wir nach einigen Tage prügeln mit dem Arduino allmählich nur noch Zahlen sehen, könnte der Fehler - wie so oft - natürlich auch zwischen den Ohren liegen.
Insofern wären wir um eine helfende Ohrfeige dankbar.
Soweit eine gute Idee. Leider klappt das bei uns nicht. Unser bis dato funktionierendes Script (PZB LM, Sifa LM, Manometer, Tacho) überträgt über Ethernet, das automatisch erstellte läuft ja über die USB-Verbindung. Wir haben dann einfach mal das vom ftd-Editor erzeugte Script genommen und unsere Ethernetverbindung weggelassen. Der Arduino bemängelt direkt im vom ftd-Editor erzeugten Text alle Variablen, die mit "-" geschrieben sind (wie zum Beispiel "valSchalter_Mg-Bremse"), weil er dies als Minus interpretiert. Heißt: wir konnten es so gar nicht auf den Arduino schreiben. Wir haben dann die "-" dann zu "_" geändert. Damit ging zwar das Überschreiben auf den Arduino (also die Fehlermeldungen waren weg), aber die Anzeigen im Pult machen jetzt einfach gar nichts mehr.
Da wir nach einigen Tage prügeln mit dem Arduino allmählich nur noch Zahlen sehen, könnte der Fehler - wie so oft - natürlich auch zwischen den Ohren liegen.
Insofern wären wir um eine helfende Ohrfeige dankbar.
Es grüßt aus dem hohen Norden,
Sven
Sven
- Carsten Hölscher
- Administrator
- Beiträge: 33548
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: Ausgaben Zusi für Leuchtmelder
Dann beschreib mal im Detail wo es hakt.Allerdings erschließen sich uns die TCP-Werte nicht, die Zusi für z.B. Schleuderschutz oder die Mg-Bremse liefert.
Carsten
Re: Ausgaben Zusi für Leuchtmelder
Moin Carsten,
als Grundlage unseres Programms haben wir den Code benutzt, der im Thema "Der Arduino und direkte Ausgaben vom ZusiServer über TCP" hinterlegt ist und diesen entsprechend unserer Anschlüsse und Gerätschaften (u.a. drei Schrittmotoren für den HBL-, den HL- und den C-Druck, sowie den Tacho direkt) abgeändert.
Der Knackpunkt ist jetzt die Auswertung der Datenpakete. Die Übermittlung findet ja immer bei einer Zustandsänderung statt. Das funktioniert soweit auch. Wenn man sich den Wert für die Mg-Bremse im seriellen Monitor vom Arduino anzeigen lässt, dann ist der Inhalt immer "0". Und das egal, ob die Bremse aus ist oder ein. Laut Dokumentation soll für der übermittelte Wert Ein/Aus sein. Das müsste nach unserem Verständnis also bei positiven Änderung eine "1" und bei einer negativen Änderung eine "0" sein. Dadurch, dass der Wert aber "0" ist, kann der Arduino den Leuchtmelder nicht richtig ansteuern.
Die Auswertung des Programms sieht aktuell so aus:
Wir nehmen hier übrigens immer die Mg-Bremse als Beispiel, weil es sich im Simulator schnell austesten lässt.
Die anderen Leuchtmelder, bei denen das gleiche Problem vorliegt, sind das Schleudern, die Drehzahlverstellung und der Störmelder.
als Grundlage unseres Programms haben wir den Code benutzt, der im Thema "Der Arduino und direkte Ausgaben vom ZusiServer über TCP" hinterlegt ist und diesen entsprechend unserer Anschlüsse und Gerätschaften (u.a. drei Schrittmotoren für den HBL-, den HL- und den C-Druck, sowie den Tacho direkt) abgeändert.
Der Knackpunkt ist jetzt die Auswertung der Datenpakete. Die Übermittlung findet ja immer bei einer Zustandsänderung statt. Das funktioniert soweit auch. Wenn man sich den Wert für die Mg-Bremse im seriellen Monitor vom Arduino anzeigen lässt, dann ist der Inhalt immer "0". Und das egal, ob die Bremse aus ist oder ein. Laut Dokumentation soll für der übermittelte Wert Ein/Aus sein. Das müsste nach unserem Verständnis also bei positiven Änderung eine "1" und bei einer negativen Änderung eine "0" sein. Dadurch, dass der Wert aber "0" ist, kann der Arduino den Leuchtmelder nicht richtig ansteuern.
Die Auswertung des Programms sieht aktuell so aus:
Code: Alles auswählen
if (dataGroup.i == 0x001d) {
Serial.println(nutzdata.b[0]);
if(nutzdata.b[0] == 1) {digitalWrite(27, HIGH);}
if(nutzdata.b[0] == 0) {digitalWrite(27, LOW);}
}
Die anderen Leuchtmelder, bei denen das gleiche Problem vorliegt, sind das Schleudern, die Drehzahlverstellung und der Störmelder.
Es grüßt aus dem hohen Norden,
Sven
Sven
Re: Ausgaben Zusi für Leuchtmelder (gelöst)
[...], könnte der Fehler - wie so oft - natürlich auch zwischen den Ohren liegen.
[...]
Ja Carsten, was soll ich sagen... Der Fehler lag wie erwartet zwischen den Ohren. Unser "Arne aus dem Norden" hat uns die rettende Ohrfeige verpasst:
Wie der Experte vielleicht schon am Code sieht haben wir schlicht und einfach den falschen Datentyp abgefragt. Wenn man als Laie den ganzen Tag nur am Programmieren ist, kann das schon mal vorkommen.
Wir haben den Code jetzt geändert in:
Code: Alles auswählen
if (dataGroup.i == 0x001d) {
if (nutzdata.f == 0) {digitalWrite(27, LOW);}
else {digitalwrite(27, HIGH);}
}
Trotzdem bedanken wir uns für die schnelle Reaktion, denn das Nachhaken hat nochmal Motivation gegeben die grauen Zellen wiederholt zu beanspruchen.
Es grüßt aus dem hohen Norden,
Sven
Sven
- nonesense
- Beiträge: 512
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Ausgaben Zusi für Leuchtmelder (gelöst)
Ich würde das so vereinfachen:
Oder sogar so:
Eine Zeile Code, statt fünf.
Gruß
Jens
Code: Alles auswählen
if (dataGroup.i == 0x001d) {
digitalWrite(27, nutzdata.f != 0);
}
Code: Alles auswählen
if (dataGroup.i == 0x001d) digitalWrite(27, nutzdata.f != 0);
Gruß
Jens
- Jens Haupert
- Beiträge: 4958
- Registriert: 23.03.2004 14:44:34
- Aktuelle Projekte: http://www.zusidisplay.de
- Wohnort: Berlin
- Kontaktdaten:
Re: Ausgaben Zusi für Leuchtmelder
Kannst du beschreiben, welchen Zug du zum Testen verwendet hast und welche Bedienhandlungen du vorgenommen hast, damit der LM hätte kommen müssen?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat