PZB 90 Leuchtmelderblock zu verkaufen
- Timo
- Beiträge: 43
- Registriert: 17.01.2011 14:47:24
- Aktuelle Projekte: www.railswitch.de
- Kontaktdaten:
PZB 90 Leuchtmelderblock zu verkaufen
Bereits verkauft, wer noch so einen haben möchte findet ihn im RailSwitch Webshop.
Beste Grüße,
Timo
Beste Grüße,
Timo
Zuletzt geändert von Timo am 17.03.2024 16:05:09, insgesamt 5-mal geändert.
Schalter und Leuchtmelder für deinen Eisenbahnsimulator: www.RailSwitch.de
- Timo
- Beiträge: 43
- Registriert: 17.01.2011 14:47:24
- Aktuelle Projekte: www.railswitch.de
- Kontaktdaten:
Re: PZB 90 Leuchtmelderblock zu verkaufen - wieder verfügbar!
Anbei noch der Programmcode für den NodeMCU zur drahtlosen Übertragung der Daten zwischen Zusi TCP und PZB Leuchtmelderblock.
Liebe Grüße aus Hessen,
Timo
Code: Alles auswählen
#include <ESP8266WiFi.h>
#define SendKey 0
const char *host = "192.168.178.80"; // Lokale IP vom Zusi TCP Server häufig 192.168.X.X
const uint16_t port = 1436; // Port zum Server
//WiFiServer server(port);
//Server connect to WiFi Network
const char *ssid = "FRITZ!Box 7590"; // WiFi SSID (Netzwerkname)
const char *password = "xxxxxx"; // WiFi Passwort
// Byte Serie zum Verbindungsaufbau
uint8_t Anmeldung[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x4, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0xA, 0x0,
0x0, 0x0, 0x3, 0x0, 0x46, 0x61, 0x68, 0x72, 0x70, 0x75, 0x6C, 0x74, 0x5, 0x0, 0x0, 0x0, 0x4, 0x0, 0x32, 0x2E, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
// Byte Serie der angeforderten Daten, die der Server senden soll
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xA, 0x0, // Zugkraft IST/Achse N
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xC, 0x0, // Zugkraft Soll/Achse N
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x17, 0x0, // AFB Soll m/s
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
int count=0;
WiFiClient client;
union //Datentyp zur Abfrage des Knotens
{
byte b[4];
int i;
} dataLng;
union
{
byte b[2];
int16_t i;
} dataGroup;
int ebene = 0;
int16_t ebene1Status = 0;
int16_t ebene2Status = 0;
int16_t ebene3Status = 0;
int16_t ebene4Status = 0;
union
{
byte b[4];
float f;
int i;
int16_t i16;
} nutzdata;
#define MAX_NUTZDATA 4
uint8_t clientForceRead()
{
while (!client.available()) {}
return client.read();
}
void(* resetFunc) (void) = 0;
//=======================================================================
// Power on setup
//=======================================================================
void setup()
{
// Aus und Eingänge festlegen
pinMode(15, OUTPUT); // Tacho
pinMode(23, OUTPUT); // PIN23 Ausgang LM ZS Aus
pinMode(24, OUTPUT); // PIN24 Ausgang LM HS Aus
pinMode(25, OUTPUT); // PIN25 Ausgang LM TAV
pinMode(26, OUTPUT); // PIN26 Ausgang LM SIFA
pinMode(14, OUTPUT); // PIN27 Ausgang LM 55
pinMode(28, OUTPUT); // PIN28 Ausgang LM 99
pinMode(13, OUTPUT); // PIN29 Ausgang LM 70
pinMode(30, INPUT); // PIN30 Eingang Lampentest MFA
pinMode(5, OUTPUT); // PIN31 Ausgang LM 85
pinMode(32, INPUT); // PIN32 Eingang Beleuchtung MFA heller
pinMode(12, OUTPUT); // PIN33 Ausgang LM Befehl 40
pinMode(34, INPUT); // PIN34 Eingang Beleuchtung MFA dunkler
pinMode(2, OUTPUT); // PIN35 Ausgang LM 500Hz
pinMode(4, OUTPUT); // PIN37 Ausgang LM 1000Hz
Serial.begin(115200);
pinMode(SendKey,INPUT_PULLUP);
Serial.println();
WiFi.hostname("PZB 90 LM");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Verbindung mit WiFi herstellen
// Wait for connection
Serial.println("Verbindung herstellen zu ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("Erfolgreich verbunden mit ");
Serial.println(ssid);
if(client.connect(host, port))
{
Serial.println("Verbunden mit Zusi TCP");
} else {
Serial.println("ERROR: Keine Verbindung zu Zusi TCP möglich!");
delay(5000);
return;
}
if(client.connected()){
client.write (Anmeldung, sizeof(Anmeldung));
delay(5000);
client.write (Abfrage, sizeof(Abfrage));
}
}
//=======================================================================
// Loop
//=======================================================================
void loop()
{
if (client.available()) {
dataLng.b[0] = clientForceRead();
dataLng.b[1] = clientForceRead();
dataLng.b[2] = clientForceRead();
dataLng.b[3] = clientForceRead();
Serial.println(dataLng.b[0]);
Serial.println(dataLng.b[1]);
Serial.println(dataLng.b[2]);
Serial.println(dataLng.b[3]);
if (dataLng.i == 0) { //BEGINN KNOTEN
ebene++;
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
if (ebene == 1) {
ebene1Status = dataGroup.i;
} else if (ebene == 2) {
ebene2Status = dataGroup.i;
} else if (ebene == 3) {
ebene3Status = dataGroup.i;
} else if (ebene == 4) {
ebene4Status = dataGroup.i;
}
} else if (dataLng.i == -1) { //ENDE KNOTEN
ebene--;
if (ebene < 0) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
}
} else if (dataLng.i == 1) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
} else { //ATTRIBUT
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
nutzdata.i = 0; //Löschen der Nutzdaten Variable
for(int i = 0; i < dataLng.i - 2; i++) { //Schleife zum Auslesen der Nutzdaten
byte b = clientForceRead();
if (i < MAX_NUTZDATA) {
nutzdata.b[i] = b;
}
}
//AUSWERTUNG
if ((ebene >= 1) && (ebene1Status == 0x0001)) { // VERBINDUNGSAUFBAU
} else if ((ebene >= 1) && (ebene1Status == 0x0002)) { // FAHRPULT
if ((ebene >= 2) && (ebene2Status == 0x000A)) { // FST-DATA
if ((ebene >= 3) && (ebene3Status == 0x0022)) { // NBÜ-DATA
} else if ((ebene >= 3) && (ebene3Status == 0x0064)) { // SIFA
if (ebene == 3) {
if (dataGroup.i == 0x0002) { // Status Sifa-Leuchtmelder
if (nutzdata.b[0] == 1) {digitalWrite(26, HIGH);} // SIFA Leuchtmelder einschalten
if (nutzdata.b[0] == 0) {digitalWrite(26,LOW);} // SIFA Leuchtmelder ausschalten
} else if (dataGroup.i == 0x0003) { // Status Sifa-Hupe
if (nutzdata.b[0] == 2) Serial.println("SIFA Hupe Zwangsbremsung");
if (nutzdata.b[0] == 1) Serial.println("SIFA Hupe Warnung");
if (nutzdata.b[0] == 0) Serial.println("SIFA Hupe aus");
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0065)) { // PZB
if ((ebene >= 4) && (ebene4Status == 0x0003)) { // Indusi-Betriebsdaten
if (ebene == 4) {
if (dataGroup.i == 0x0005) { // Melder 1000 Hz
if (nutzdata.b[0] == 1) {digitalWrite(4, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(4, LOW);}
} else if (dataGroup.i == 0x0006) { // Melder U
if (nutzdata.b[0] == 1) {digitalWrite(14, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(14, LOW);}
} else if (dataGroup.i == 0x0007) { // Melder M
if (nutzdata.b[0] == 1) {digitalWrite(13, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(13, LOW);}
} else if (dataGroup.i == 0x0008) { // Melder O
if (nutzdata.b[0] == 1) {digitalWrite(5, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(5, LOW);}
} else if (dataGroup.i == 0x000A) { // Melder 500 Hz
if (nutzdata.b[0] == 1) {digitalWrite(2, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(2, LOW);}
} else if (dataGroup.i == 0x000B) { // Melder Befehl
if (nutzdata.b[0] == 1) {digitalWrite(12, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(12, LOW);}
}
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0066)) { // Türsystem
} else if (ebene == 2) {
if (dataGroup.i == 0x0001) { // Geschwindigkeit Meter/Sekunde
byte Geschw = nutzdata.f * 3.6;
byte tacho = Geschw * 2.125; // Umrechnen für den Tacho
//Serial.print("A");
//Serial.println(Geschw);
analogWrite(15, tacho);
} else if (dataGroup.i == 0x000A) { // Zugkraft Ist/Achse in Newton
byte Zugkraft_ist = nutzdata.f;
//Serial.println(Zugkraft_ist);
} else if (dataGroup.i == 0x000C) { // Zugkraft Soll/Achse in Newton
byte Zugkraft_soll = nutzdata.f;
//Serial.println(Zugkraft_soll);
}
}
}
}
}
}
// wenn der Server getrennt wird, stoppt der Client und gibt seriell eine Meldung ab:
if (!client.connected()) {
Serial.println();
Serial.println("Die Verbindung mit Zusi TCP wurde getrennt!");
client.stop();
// mache nichts:
while (true);
//resetFunc ();
}
}
Timo
Schalter und Leuchtmelder für deinen Eisenbahnsimulator: www.RailSwitch.de
Re: - verkauft - PZB 90 Leuchtmelderblock zu verkaufen
Hi Timo,
ich hab's gekauft und muss sagen das sieht top aus. Gute Arbeit!
Funktioniert der Code auch mit einem Arduino Uno R4 Wifi oder muss ich da noch was basteln?
Grüße
Till
ich hab's gekauft und muss sagen das sieht top aus. Gute Arbeit!
Funktioniert der Code auch mit einem Arduino Uno R4 Wifi oder muss ich da noch was basteln?
Grüße
Till
- Timo
- Beiträge: 43
- Registriert: 17.01.2011 14:47:24
- Aktuelle Projekte: www.railswitch.de
- Kontaktdaten:
Re: - verkauft - PZB 90 Leuchtmelderblock zu verkaufen
Hey Till,
Das sollte funktionieren, ich habe leider keinen Uno R4 Wifi zur Hand, du kannst aber mal folgendes probieren:
Ersetze #include <ESP8266WiFi.h> durch #include <WiFi.h>, um die richtige Bibliothek für den ESP32-Chip zu verwenden.
Du kannst den Quelltext gerne mal ausprobieren und mir eine Rückmeldung geben, gerne auch was im Seriellen Monitor ausgegeben wird.
Dein positives Feedback freut mich sehr!
Und falls jemand noch so einen PZB90 Würfel haben möchte, der findet ihn im RailSwitch Webshop.
Beste Grüße,
Timo
Das sollte funktionieren, ich habe leider keinen Uno R4 Wifi zur Hand, du kannst aber mal folgendes probieren:
Ersetze #include <ESP8266WiFi.h> durch #include <WiFi.h>, um die richtige Bibliothek für den ESP32-Chip zu verwenden.
Code: Alles auswählen
#include <WiFi.h>
#define SendKey 0
// Zusi TCP Verbindungsdaten
const char *host = "192.168.178.80"; // Lokale IP vom Zusi TCP Server
const uint16_t port = 1436; // Port zum Server TCP Server
// Mit deinem bestehenden Netzwerk verbinden
const char *ssid = "FRITZ!Box 7590"; // WiFi SSID (Netzwerkname)
const char *password = "xxxxxx"; // WiFi Passwort
// Byte Serie zum Verbindungsaufbau
uint8_t Anmeldung[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x4, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0xA, 0x0,
0x0, 0x0, 0x3, 0x0, 0x46, 0x61, 0x68, 0x72, 0x70, 0x75, 0x6C, 0x74, 0x5, 0x0, 0x0, 0x0, 0x4, 0x0, 0x32, 0x2E, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
// Byte Serie der angeforderten Daten, die der Server senden soll
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xA, 0x0, // Zugkraft IST/Achse N
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xC, 0x0, // Zugkraft Soll/Achse N
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x17, 0x0, // AFB Soll m/s
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
int count=0;
WiFiClient client;
union //Datentyp zur Abfrage des Knotens
{
byte b[4];
int i;
} dataLng;
union
{
byte b[2];
int16_t i;
} dataGroup;
int ebene = 0;
int16_t ebene1Status = 0;
int16_t ebene2Status = 0;
int16_t ebene3Status = 0;
int16_t ebene4Status = 0;
union
{
byte b[4];
float f;
int i;
int16_t i16;
} nutzdata;
#define MAX_NUTZDATA 4
uint8_t clientForceRead()
{
while (!client.available()) {}
return client.read();
}
void(* resetFunc) (void) = 0;
void setup()
{
// Aus und Eingänge festlegen
pinMode(15, OUTPUT); // Tacho
pinMode(23, OUTPUT); // PIN23 Ausgang LM ZS Aus
pinMode(24, OUTPUT); // PIN24 Ausgang LM HS Aus
pinMode(25, OUTPUT); // PIN25 Ausgang LM TAV
pinMode(26, OUTPUT); // PIN26 Ausgang LM SIFA
pinMode(14, OUTPUT); // PIN27 Ausgang LM 55
pinMode(28, OUTPUT); // PIN28 Ausgang LM 99
pinMode(13, OUTPUT); // PIN29 Ausgang LM 70
pinMode(30, INPUT); // PIN30 Eingang Lampentest MFA
pinMode(5, OUTPUT); // PIN31 Ausgang LM 85
pinMode(32, INPUT); // PIN32 Eingang Beleuchtung MFA heller
pinMode(12, OUTPUT); // PIN33 Ausgang LM Befehl 40
pinMode(34, INPUT); // PIN34 Eingang Beleuchtung MFA dunkler
pinMode(2, OUTPUT); // PIN35 Ausgang LM 500Hz
pinMode(4, OUTPUT); // PIN37 Ausgang LM 1000Hz
Serial.begin(115200);
pinMode(SendKey,INPUT_PULLUP);
Serial.println();
WiFi.hostname("PZB 90 LM");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Verbindung mit WiFi herstellen
// Wait for connection
Serial.println("Verbindung herstellen zu ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("Erfolgreich verbunden mit ");
Serial.println(ssid);
if(client.connect(host, port))
{
Serial.println("Verbunden mit Zusi TCP");
} else {
Serial.println("ERROR: Keine Verbindung zu Zusi TCP möglich!");
delay(5000);
return;
}
if(client.connected()){
client.write (Anmeldung, sizeof(Anmeldung));
delay(5000);
client.write (Abfrage, sizeof(Abfrage));
}
}
void loop()
{
if (client.available()) {
dataLng.b[0] = clientForceRead();
dataLng.b[1] = clientForceRead();
dataLng.b[2] = clientForceRead();
dataLng.b[3] = clientForceRead();
Serial.println(dataLng.b[0]);
Serial.println(dataLng.b[1]);
Serial.println(dataLng.b[2]);
Serial.println(dataLng.b[3]);
if (dataLng.i == 0) { //BEGINN KNOTEN
ebene++;
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
if (ebene == 1) {
ebene1Status = dataGroup.i;
} else if (ebene == 2) {
ebene2Status = dataGroup.i;
} else if (ebene == 3) {
ebene3Status = dataGroup.i;
} else if (ebene == 4) {
ebene4Status = dataGroup.i;
}
} else if (dataLng.i == -1) { //ENDE KNOTEN
ebene--;
if (ebene < 0) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
}
} else if (dataLng.i == 1) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
} else { //ATTRIBUT
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
nutzdata.i = 0; //Löschen der Nutzdaten Variable
for(int i = 0; i < dataLng.i - 2; i++) { //Schleife zum Auslesen der Nutzdaten
byte b = clientForceRead();
if (i < MAX_NUTZDATA) {
nutzdata.b[i] = b;
}
}
//AUSWERTUNG
if ((ebene >= 1) && (ebene1Status == 0x0001)) { // VERBINDUNGSAUFBAU
} else if ((ebene >= 1) && (ebene1Status == 0x0002)) { // FAHRPULT
if ((ebene >= 2) && (ebene2Status == 0x000A)) { // FST-DATA
if ((ebene >= 3) && (ebene3Status == 0x0022)) { // NBÜ-DATA
} else if ((ebene >= 3) && (ebene3Status == 0x0064)) { // SIFA
if (ebene == 3) {
if (dataGroup.i == 0x0002) { // Status Sifa-Leuchtmelder
if (nutzdata.b[0] == 1) {digitalWrite(26, HIGH);} // SIFA Leuchtmelder einschalten
if (nutzdata.b[0] == 0) {digitalWrite(26,LOW);} // SIFA Leuchtmelder ausschalten
} else if (dataGroup.i == 0x0003) { // Status Sifa-Hupe
if (nutzdata.b[0] == 2) Serial.println("SIFA Hupe Zwangsbremsung");
if (nutzdata.b[0] == 1) Serial.println("SIFA Hupe Warnung");
if (nutzdata.b[0] == 0) Serial.println("SIFA Hupe aus");
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0065)) { // PZB
if ((ebene >= 4) && (ebene4Status == 0x0003)) { // Indusi-Betriebsdaten
if (ebene == 4) {
if (dataGroup.i == 0x0005) { // Melder 1000 Hz
if (nutzdata.b[0] == 1) {digitalWrite(4, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(4, LOW);}
} else if (dataGroup.i == 0x0006) { // Melder U
if (nutzdata.b[0] == 1) {digitalWrite(14, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(14, LOW);}
} else if (dataGroup.i == 0x0007) { // Melder M
if (nutzdata.b[0] == 1) {digitalWrite(13, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(13, LOW);}
} else if (dataGroup.i == 0x0008) { // Melder O
if (nutzdata.b[0] == 1) {digitalWrite(5, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(5, LOW);}
} else if (dataGroup.i == 0x000A) { // Melder 500 Hz
if (nutzdata.b[0] == 1) {digitalWrite(2, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(2, LOW);}
} else if (dataGroup.i == 0x000B) { // Melder Befehl
if (nutzdata.b[0] == 1) {digitalWrite(12, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(12, LOW);}
}
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0066)) { // Türsystem
} else if (ebene == 2) {
if (dataGroup.i == 0x0001) { // Geschwindigkeit Meter/Sekunde
byte Geschw = nutzdata.f * 3.6;
byte tacho = Geschw * 2.125; // Umrechnen für den Tacho
//Serial.print("A");
//Serial.println(Geschw);
analogWrite(15, tacho);
} else if (dataGroup.i == 0x000A) { // Zugkraft Ist/Achse in Newton
byte Zugkraft_ist = nutzdata.f;
//Serial.println(Zugkraft_ist);
} else if (dataGroup.i == 0x000C) { // Zugkraft Soll/Achse in Newton
byte Zugkraft_soll = nutzdata.f;
//Serial.println(Zugkraft_soll);
}
}
}
}
}
}
// wenn der Server getrennt wird, stoppt der Client und gibt seriell eine Meldung ab:
if (!client.connected()) {
Serial.println();
Serial.println("Die Verbindung mit Zusi TCP wurde getrennt!");
client.stop();
// mache nichts:
while (true);
//resetFunc ();
}
}
Dein positives Feedback freut mich sehr!
Und falls jemand noch so einen PZB90 Würfel haben möchte, der findet ihn im RailSwitch Webshop.
Beste Grüße,
Timo
Schalter und Leuchtmelder für deinen Eisenbahnsimulator: www.RailSwitch.de
Re: PZB 90 Leuchtmelderblock zu verkaufen
Jo ich Versuche es und melde mich. Hatte mir auch fix ein NodeMCU bestellt und da hängt das Blinken der Lampen etwas. Also es ist unregelmäßig. Ist das bei dir auch so?
Grüße
Grüße
- nonesense
- Beiträge: 528
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: PZB 90 Leuchtmelderblock zu verkaufen
Code: Alles auswählen
else if (dataGroup.i == 0x0006) { // Melder U
if (nutzdata.b[0] == 1) {digitalWrite(14, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(14, LOW);}
} else if (dataGroup.i == 0x0007) { // Melder M
if (nutzdata.b[0] == 1) {digitalWrite(13, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(13, LOW);}
} else if (dataGroup.i == 0x0008) { // Melder O
if (nutzdata.b[0] == 1) {digitalWrite(5, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(5, LOW);}
}
Wenn man so programmiert ist das normal.
Die Leuchtmelder gehen dann an and aus, wenn Zusi ein neues Paket übertragen hat.
Nun gibt es auf der TCP Verbindung aber keine Echtzeitübertragung. Von daher läuft das recht unregelmäßig.
Besser ist es die IDs 0x0030 bis 0x0032 anstatt 0x0006 bis 0x0008 zu verwenden und sich das Blinken im Arduino selber zu erzeugen. Wollte hierzu schon immer mal einen generischen Code machen. ...Iregend wann^^
Zuletzt geändert von nonesense am 21.03.2024 12:30:51, insgesamt 1-mal geändert.
-
- Beiträge: 719
- Registriert: 28.10.2021 12:16:41
- Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
- Wohnort: Köln
- Kontaktdaten:
Re: PZB 90 Leuchtmelderblock zu verkaufen
ZusiDisplay hört auch auf die Bit-Signale für die Leuchtmelder. Dort fühlt es sich nicht so unregelmäßig an. Aber die Lösung, den Blinktakt selber zu erzeugen, ist auf jeden Fall besser.
Re: PZB 90 Leuchtmelderblock zu verkaufen
Wesentlich einfacher und schneller als das ist, einfach in die Zusi-Einstellungen zu gehen und die Übertragungsrate noch mal etwas nach oben setzen. (Die Wirkung ist da aber natürlich begrenzt. )
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
Re: PZB 90 Leuchtmelderblock zu verkaufen
Sowas dachte ich auch schon, aber ich habe keinen Plan wie das alles abgefragt wird. Da müsste ich mich jetzt erst reinfuchsen. Aber danke für die Antwort. Da weiß ich, was noch möglich ist.Besser ist es die IDs 0x0030 bis 0x0032 anstatt 0x0006 bis 0x0008 zu verwenden und sich das Blinken im Arduino selber zu erzeugen. Wollte hierzu schon immer mal einen generischen Code machen. ...Iregend wann^^
Re: PZB 90 Leuchtmelderblock zu verkaufen
Du musst dich dann halt um einige Punkte selbst kümmern, wie z.B. die verschiedenen Taktraten von LZB- und Nicht-LZB-Geräten, sowie bei Bedarf auch den Einfluss des Zeitraffers, sowie möglichen abweichenden Daten bei Alt-PZB-Bauarten. (Ich bin mal gespannt, klingt zwischen den Zeilen so, als gäbe es mehrere Leute, die mal irgendwann was in die Richtung veröffentlichen wollten. )
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
- Timo
- Beiträge: 43
- Registriert: 17.01.2011 14:47:24
- Aktuelle Projekte: www.railswitch.de
- Kontaktdaten:
Re: PZB 90 Leuchtmelderblock zu verkaufen
Das ist am Anfang normal und lässt sich wie von F. Schn. beschrieben mit geringeren Werten (kürzere Zeiten) in den TCP Einstellungen bei Zusi gut kompensieren.
Einfach ein bisschen probieren, dann läuft es stabil und ohne störenden Verzug. Habe es so bei mir am Laufen und bin zufrieden mit der Übertragung.
Es macht natürlich Sinn den Quelltext zu optimieren, der ist im Moment jedenfalls mehr als Basis gedacht worauf man aufbauen kann.
Funktionieren sollte es aber und die Latenzen bei einer echten 189er sind schon zum Teil ausgeprägter im Display
Das mag für manche nur eine Spielerei sein, aber zusammen mit einer 18650er Zelle kann das einfach kabellos auf dem Tisch gestellt werden.
Super erklärt, danke dir! Das wird ein kleines Projekt werden, da ist die direkte Ansprache vielleicht ein guter Kompromiss.F. Schn. hat geschrieben: ↑19.03.2024 23:50:16 Du musst dich dann halt um einige Punkte selbst kümmern, wie z.B. die verschiedenen Taktraten von LZB- und Nicht-LZB-Geräten, sowie bei Bedarf auch den Einfluss des Zeitraffers, sowie möglichen abweichenden Daten bei Alt-PZB-Bauarten. (Ich bin mal gespannt, klingt zwischen den Zeilen so, als gäbe es mehrere Leute, die mal irgendwann was in die Richtung veröffentlichen wollten. )
Beste Grüße,
Timo
Schalter und Leuchtmelder für deinen Eisenbahnsimulator: www.RailSwitch.de