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
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

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

#301 Beitrag von Carsten Hölscher »

Dann dürfte es mit dem Programmieren und Anschließen an den Arduino aber auch schwierig werden.

Carsten

Wolfgang E.
Beiträge: 569
Registriert: 28.10.2021 12:16:41
Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
Wohnort: Köln
Kontaktdaten:

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

#302 Beitrag von Wolfgang E. »

Das Protokoll von Zusi 3 ist nicht ganz einfach, aber beherrschbar. Geduld gehört wohl schon dazu. Am besten schaut man sich mal eine Implementierung an, beispielsweise die von QDmi oder meine. Auch das Beispielprotokoll auf Seite 759 hilft.
Den PZB-Summer findest Du auf Seite 726 unter der ID 02 0A 65 03 09. Leider funktioniert das Signal nach meiner Erfahrung nicht richtig, so dass ich dort aktuell keine Energie reinstecken würde. Wenn ich hoffentlich demnächst mal Zeit habe, bekommt Carsten einen ausführlichen Erfahrungsbericht.
Du kannst aber mit dem Sifa-Summer (Seite 724, ID 02 0A 64 03) starten. Das Signal tut, was es soll.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

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

#303 Beitrag von Carsten Hölscher »

Es gibt zusätzlich ja auch noch 2 Demo-Projekte mit Quellcode im Lieferumfang.

Carsten

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#304 Beitrag von Kevin1897 »

Das Programmieren und anschließen ist nicht das Problem, dazu sehe ich mich noch in der Lage.
Mir ist nicht ganz klar, wo die ID für den PZB Summer Hinsoll in das Skript von Arne...
BR620/622/642 BR8442 ;-)

Wolfgang E.
Beiträge: 569
Registriert: 28.10.2021 12:16:41
Aktuelle Projekte: https://github.com/machinae-vectoriae-ductor/
Wohnort: Köln
Kontaktdaten:

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

#305 Beitrag von Wolfgang E. »

Ich kenne mich jetzt nicht mit dem Skript aus, aber ich denke, so müsste es gehen. Den neuen Text habe ich zwischen dem Ende von Melder O und dem Anfang von Melder 500 Hz hinzugefügt. Den Digitalausgang muss Du natürlich noch geeignet festlegen. Ich habe dort jetzt xx hingeschrieben. Aber wie schon geschrieben: Aktuell wirst Du keine Freude damit haben. Grob gesagt bleibt das Signal bei der I54/60 nach der 1000 Hz-Beeinflussung solange 1, bis der 1000 Hz-Melder wieder ausgeht.

Code: Alles auswählen

                } else if (dataGroup.i == 0x0008) { // Melder O
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(31, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(31, LOW);
                  }
                } else if (dataGroup.i == 0x0009) { // PZB-Summer
                  if (nutzdata.b[0] >= 1) {
                    digitalWrite(xx, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(xx, LOW);
                  }
                } else if (dataGroup.i == 0x000A) { // Melder 500 Hz
                  if (nutzdata.b[0] == 1) {
 

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#306 Beitrag von Kevin1897 »

Super Danke dir, dann macht es mit der Schnarre erstmal keinen Sinn. Schade drum.

Dann versuche ich mich an dem anderen mal.

Wie hieß der Controller nochmal um Tasten als Tastatureingabe zu programmieren?
BR620/622/642 BR8442 ;-)

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#307 Beitrag von Kevin1897 »

Kann mir vielleicht jemand helfen?
Ich habe Arnes Script auf den Arduini 2560 geladen, Serieller Monitor sagt Verbunden, Aber in Zusi3 Bekomme Ich den Arduino unter Netzwerk garnicht angezeigt.
Mache Ich vielleicht was falsch? Kann das vielleicht mit der fehlenden MAC Adresse zusammen hängen? Diese könnte Ich ja noch Nachtragen..

Zusi3 läuft unter Port 1436
Zusi-Server ist bei mir 192.168.178.34
Arduino hat laut Fritzbox die IP 192.168.178.44

// MAC - Adresse des Shields (z.B. auf Aufkleber auf dem Shield)
// wenn unbekannt, dann diese Werten lassen und damit probieren
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


// eigene Adresse des Zusi-Rechners mit dem TCP-Server
// die aktuell eingetragene Werte sind nur beispielhaft
byte server_ip[] = { 192, 168, 178, 34 };


// Port an dem der Zusi-Server läuft
// DEFAULT ist 1436
int port = 1436;


// <-- Ab hier sind Änderungen nur bei Betrieb ohne DCHP nötig. Default ist MIT DHCP -->

// eigene Adresse für das Shield vergeben
// die aktuell eingetragene Werte sind nur beispielhaft
byte shield_ip[] = { 192, 168, 178, 44 };


// diesen Wert DHCP 0 setzen:
#define dhcp 0

Ausgabe Serieller Monitor

20:46:41.754 ->
20:46:41.754 -> disconnecting.
20:52:17.129 -> H-> Server connecting...
20:52:19.626 -> connected

Keine Ahnung was er hat, bei mir steht halt unter Netzwerkeinstellungen nichts unter Client :(
BR620/622/642 BR8442 ;-)

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

#308 Beitrag von Arne aus dem Norden »

Kevin1897 hat geschrieben: 02.11.2022 20:51:08 Kann mir vielleicht jemand helfen?
Ich habe Arnes Script auf den Arduini 2560 geladen, Serieller Monitor sagt Verbunden, Aber in Zusi3 Bekomme Ich den Arduino unter Netzwerk garnicht angezeigt.
Mache Ich vielleicht was falsch? Kann das vielleicht mit der fehlenden MAC Adresse zusammen hängen? Diese könnte Ich ja noch Nachtragen..
Eine Frage: versuchst du da jetzt das uralte Zusi2-Script mit Zusi3 zu verbinden?
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#309 Beitrag von Kevin1897 »

Ich habs scheinbar tatsächlich so gemacht. Hab mich hier mal durchgelesen, und ein Scripft gefunden, was aber keine Tachoangabe oder HL HBL ansteuerrung Beinhaltet :)
Deswegen meine Frage, hast du eventuell das vollständige Script vielleicht?
BR620/622/642 BR8442 ;-)

Benutzeravatar
F. Schn.
Beiträge: 6630
Registriert: 24.10.2011 18:58:26

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

#310 Beitrag von F. Schn. »

Ein "Vollständiges Script" gibt es nicht, stattdessen kannst du die Vollständigen IDs aus der Doku entnehmen. Die wichtigste Tabelle ist dort die Tabelle im Abschnitt 11.3.3.3.1 "Anhang" "Datenaustausch" "Führerstands-IDs"

In diesen Beiträgen hier erkläre ich, wie man das in das Script einbaut:

viewtopic.php?p=274144#p274144
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

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

#311 Beitrag von Arne aus dem Norden »

Kevin1897 hat geschrieben: 02.11.2022 22:29:55 Ich habs scheinbar tatsächlich so gemacht. Hab mich hier mal durchgelesen, und ein Scripft gefunden, was aber keine Tachoangabe oder HL HBL ansteuerrung Beinhaltet :)
Deswegen meine Frage, hast du eventuell das vollständige Script vielleicht?
Ich muß nur zwei Seiten zurückblättern und finde sofort auf Seite 14 fertige Scripte für Zusi3 die Tacho und Manometer ansteuern...
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#312 Beitrag von Kevin1897 »

Alles klar, Ich dummchen sollte abends übermüdet mich da dran setzen :-) Schande über mein haupt ! :wand
Danke dir Arne, Ich werde Testen und berichten :) Hab Allerdings Jetzt einen Compilerfehler :(
BR620/622/642 BR8442 ;-)

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#313 Beitrag von Kevin1897 »

Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino: In function 'void loop()':
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:315:49: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:316:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:317:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:318:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:319:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:320:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:321:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:322:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:323:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:324:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:325:57: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:326:30: error: 'Tacho' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:331:11: error: 'set_hl' was not declared in this scope
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:331:11: note: suggested alternative: 'setbuf'
Kopie\Arduino_ZUSI3_Kopie\Arduino_ZUSI3_Kopie.ino:336:11: error: 'set_hbl' was not declared in this scope

exit status 1

Compilation error: 'Tacho' was not declared in this scope

Mein Code:

Code: Alles auswählen

#include <SPI.h>
#include <Ethernet.h>  //<Ehternet2.h>
boolean running = false;
unsigned long interval = 500;  // the time we need to wait
unsigned long previousMillis = 0; // millis() returns an unsigned long.

byte ZusiIP[4] = {192, 168, 178, 34};
float vv;
int hll = 0;
int n = 0;
int nn = 0;
int f = 1;
int x = 0;
int vIst;
int Data1[5];
int Eingangswerte[16];
int StartSerie[16] = { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 10, 0, 6, 0, 0, 0 };
int StartSerie2[16] = { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0 };
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x1D, 0x8E };
IPAddress ip(192, 168, 178, 44);//ip adres Arduino Ethernet Shield
IPAddress server(192, 168, 178, 34); //ip Adresse Zusi3

// 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, 0x2, 0x0,  // Druck Hauptluftleitung
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0,  // Druck Bremszylinder
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0,  // Druck Hauptluftbehälter
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1D, 0x0, // MG-Bremse
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x25, 0x0, // Fahrtrichtung Vorne
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x26, 0x0, // Fahrtrichtung Rueck
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x57, 0x0, // Zustand Federspeicherbremse
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0,  // Zugkraft gesamt
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x15, 0x0, // Fahrstufe
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1b, 0x0, // LM Schleudern
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1c, 0x0, // LM Gleiten
                      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           <<<<<  T Ü R E N  >>>>>
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7c, 0x0, // Zugkraft gesamt Steuerwagen
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x85, 0x0, // Fahrstufe Steuerwagen
                      0xFF, 0xFF, 0xFF, 0xFF,
                      0xFF, 0xFF, 0xFF, 0xFF,
                      0xFF, 0xFF, 0xFF, 0xFF
                    };

EthernetClient 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;

int count;// Testvariable für TEST LED blinken

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();
}

//Hauptprogramm
void setup() {
  // Aus und Eingänge festlegen
  pinMode(22, OUTPUT); //PIN22 Ausgang LM hohe Abbremsung ein
  pinMode(23, OUTPUT); //PIN23 Ausgang LM TAV
  pinMode(24, OUTPUT); //PIN24 Ausgang TT LINKS
  pinMode(25, OUTPUT); //PIN25 Ausgang TT RECHTS
  pinMode(26, OUTPUT); //PIN26 Ausgang LM SIFA
  pinMode(27, OUTPUT); //PIN27 Ausgang LM 55
  pinMode(28, OUTPUT); //PIN28 Ausgang LM 99
  pinMode(29, OUTPUT); //PIN29 Ausgang LM 70
  pinMode(30, INPUT);  //PIN30 Eingang Lampentest MFA
  pinMode(31, OUTPUT); //PIN31 Ausgang LM 85
  pinMode(32, INPUT);  //PIN32 Eingang Beleuchtung MFA heller
  pinMode(33, OUTPUT); //PIN33 Ausgang LM Befehl 40
  pinMode(34, INPUT);  //PIN34 Eingang Beleuchtung MFA dunkler
  pinMode(35, OUTPUT); //PIN35 Ausgang LM 500Hz
  pinMode(37, OUTPUT); //PIN37 Ausgang LM 1000Hz
  pinMode(21, OUTPUT); //PIN21 AUSGANG LM SCHLEUDERN



  Ethernet.begin(mac, ip);                 // Zuordnung von IP und MAC an das Shield
  Serial.begin(115200);                    // serielle Schnittstelle am USB Anschluss für Debugging
  Serial1.begin(19200);                    // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
  Serial2.begin(19200);                    // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
  Serial3.begin(19200);                    // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe

  while (!Serial) {
    ;                                       // auf die serielle Schnittstelle warten
  }

  delay(1000);                             // Zeit, dass sich das Ethernet Shield initialisiert (1000ms)
  Serial.println("verbinden...");          // Meldung an den seriellen Monitor

  if (client.connect(server, 1436)) {      // Sobald die Verbindung steht erfolgt die Meldung auf den Monitor
    Serial.println("Verbunden!");           // Meldung verbunden
    Serial.println(ip);                     // ip Client (PC) auf dem Monitor ausgeben
    Serial.println(server);                 // ip Server (Zusi3) auf dem Monitor ausgeben
  }
  else {
    Serial.println("Verbindung Fehlgeschlagen");               // Falls die Verbindung nicht klappt erfolgt die Meldung auf den Monitor
  }

  // Byte Serien zum Zusi Server schreiben
  client.write (Anmeldung, 59);
  client.write (Abfrage, 122);              // *** Vorsicht !!! *** Muss der tatsaechlichen Anzahl von Bytes in der Serie "Abfrage" s.o. entsprechen #154
}

void(* resetFunc) (void) = 0;              // Reset Funktion war nur für einen Test gedacht, wird nicht benötigt


// Endlosschleife
void loop() {

  if (client.available()) {

    dataLng.b[0] = clientForceRead();
    dataLng.b[1] = clientForceRead();
    dataLng.b[2] = clientForceRead();
    dataLng.b[3] = clientForceRead();


    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(37, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(37, LOW);
                  }
                } else if (dataGroup.i == 0x0006) { // Melder U
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(27, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(27, LOW);
                  }
                } else if (dataGroup.i == 0x0007) { // Melder M
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(29, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(29, LOW);
                  }
                } else if (dataGroup.i == 0x0008) { // Melder O
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(31, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(31, LOW);
                  }
                } else if (dataGroup.i == 0x000A) { // Melder 500 Hz
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(35, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(35, LOW);
                  }
                } else if (dataGroup.i == 0x000B) { // Melder Befehl
                  if (nutzdata.b[0] == 1) {
                    digitalWrite(33, HIGH);
                  }
                  if (nutzdata.b[0] == 0) {
                    digitalWrite(33, LOW);
                  }
                }
              }
            }
          } else if ((ebene >= 3) && (ebene3Status == 0x0066)) { //Türsystem
            if (dataGroup.i == 0x000A) {
              if (nutzdata.b[0] == 0) {
                digitalWrite(23, LOW);
              }
              if (nutzdata.b[0] == 1) {
                digitalWrite(23, HIGH);
              }

            }
            // TT LINKS

            else if (dataGroup.i == 0x0008) {
              Serial.print("Status Melder links: ");
              Serial.println(nutzdata.b[0]);
              if (nutzdata.b[0] == 1) {

                digitalWrite(24, HIGH);
              }
              if (nutzdata.b[0] == 0) {
                digitalWrite(24, LOW);
              }
            }

            // TT RECHTS
            else if (dataGroup.i == 0x0009) {
              if (nutzdata.b[0] == 1) {
                digitalWrite(25, HIGH);
              }
              if (nutzdata.b[0] == 0) {
                digitalWrite(25, LOW);
              }
            }


            //TT LINKS & RECHTS BLINKEND
            unsigned long currentMillis = millis();
            if (nutzdata.b[0] == 2 && currentMillis - previousMillis >= interval) {
              previousMillis = currentMillis;
              running = !running; // toggle running variable
              digitalWrite(24, running); // indicate via LED
              digitalWrite(25, running);
            }

          } else if (ebene == 2) {
            if (dataGroup.i == 0x0001) {          // Geschwindigkeit Meter/Sekunde
              byte Geschw = nutzdata.f * 3.6;
              //Serial.print("A");
              //Serial.println(Geschw);
            } 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);
              switch(dataGroup.i){
            case 0x0001:   //Geschwindigkeit in m/s
          float geschwindigkeit = nutzdata.f * 3.6;
          if (geschwindigkeit < 0) geschwindigkeit = 0 - geschwindigkeit;
          if (geschwindigkeit == 0) analogWrite(Tacho, 0);
            else if(geschwindigkeit <=  10) analogWrite(Tacho,      geschwindigkeit     /10* 8);
            else if(geschwindigkeit <=  20) analogWrite(Tacho,   8+(geschwindigkeit- 10)/10* 4);
            else if(geschwindigkeit <=  30) analogWrite(Tacho,  12+(geschwindigkeit- 20)/10* 12);
            else if(geschwindigkeit <=  40) analogWrite(Tacho,  24+(geschwindigkeit- 30)/10* 13);
            else if(geschwindigkeit <=  80) analogWrite(Tacho,  37+(geschwindigkeit- 40)/10* 14);
            else if(geschwindigkeit <=  90) analogWrite(Tacho,  93+(geschwindigkeit- 80)/10* 13);
            else if(geschwindigkeit <= 100) analogWrite(Tacho, 106+(geschwindigkeit- 90)/10* 15);
            else if(geschwindigkeit <= 130) analogWrite(Tacho, 121+(geschwindigkeit-100)/10* 13);
            else if(geschwindigkeit <= 140) analogWrite(Tacho, 160+(geschwindigkeit-130)/10* 12);
            else if(geschwindigkeit <= 145) analogWrite(Tacho, 172+(geschwindigkeit-140)/10* 13);
            else analogWrite(Tacho, 177);
          break;
        
        case 0x0002: {   //Druck HL
          Serial.println("HL");
          set_hl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
        break; }
        
        case 0x0004: {   //Druck HBL
          Serial.println("HBL");
          set_hbl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
        break; }
              }
            }
          }
        }

      }
    }
  }
  // wenn der Server getrennt wird, stoppt der Client und gibt seriell eine Meldung ab:
  if (!client.connected()) {
    Serial.println();
    Serial.println("Verbindung abgebrochen");
    client.stop();
    // mache nichts:
    while (true);
    //resetFunc ();
  }
}
BR620/622/642 BR8442 ;-)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

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

#314 Beitrag von Carsten Hölscher »

Wenn Du eine Frage hast, solltest Du sie stellen.

Carsten

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#315 Beitrag von Kevin1897 »

Ich und meine Dicken Wurstfinger... ups.
Sorry falls ich Probleme mache. Mein Problem ist, ich habe mir den Sketch mal zusammen gestellt. Sobald Ich Kompilieren will, schmeißt er mir fehler raus, und ich weiß nicht wo ich noch suchen soll.
Er Stört sich scheinbar an der Tachodefinition...
BR620/622/642 BR8442 ;-)

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

#316 Beitrag von Arne aus dem Norden »

Kevin1897 hat geschrieben: 03.11.2022 22:20:10 Ich und meine Dicken Wurstfinger... ups.
Sobald Ich Kompilieren will, schmeißt er mir fehler raus, und ich weiß nicht wo ich noch suchen soll.
Der Fehler geht doch garnicht deutlicher, u.a.
Compilation error: 'Tacho' was not declared in this scope

Du sagst ihm insgesant 12 mal im Script er soll die Geschwindigkeit auf den AnalogPIN "Tacho" ausgeben ohne vorher geschrieben zu haben welcher Pin das sein soll...
Und was noch viel schlimmer ist: du hast nirgends deklariert was "Tacho" überhaupt ist. Ein int Tacho; ganz am Anfang des Scriptes könnte hier schon Wunder wirken, besser noch wäre int Tacho = 7; wenn z.B. der AnalogPIN 7 genommen werden sollte.

Da sind aber noch mehr Merkwürdigkeiten verschiedenen Ursprungs die ich nicht wirklich nachvollziehen kann. Warum werden z.B. 4(!) serielle Verbindungen aufgemacht?

Code: Alles auswählen

Ethernet.begin(mac, ip); // Zuordnung von IP und MAC an das Shield
Serial.begin(115200); // serielle Schnittstelle am USB Anschluss für Debugging
Serial1.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial2.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial3.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Und warum die Geschwindigkeit Meter/Sekunde gleich zweimal berechnet wird verstehe ich auch nicht wirklich:

Code: Alles auswählen

if (dataGroup.i == 0x0001) { // Geschwindigkeit Meter/Sekunde
byte Geschw = nutzdata.f * 3.6;

switch(dataGroup.i){
case 0x0001: //Geschwindigkeit in m/s
float geschwindigkeit = nutzdata.f * 3.6;
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#317 Beitrag von Kevin1897 »

Hallo Arne,

ich habe mich leider eines Simplen Tricks bedient C&P xD Habe dann nochmal darüber geschaut und für Gut befunden.

Habe jetzt dieses Serial Gedöns weggemacht, sodass nur noch Serial.begin(115200); Serial1.begin(19200); übrig bleibt.
Ebenso habe ich diese Doppelte Geschwindigkeitsberechnung entfernt, sodass nur noch case 0x0001: //Geschwindigkeit in m/s
float geschwindigkeit = nutzdata.f * 3.6;
if (geschwindigkeit == 0) analogWrite(Tacho, 0);

übrig bleibt. Wie Sage Ich ihm denn welcher Analog Pin Benutzt werden soll? Kann dies auch mit einem pinMode Befehl erfolgen?
BR620/622/642 BR8442 ;-)

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

#318 Beitrag von Arne aus dem Norden »

Kevin1897 hat geschrieben: 04.11.2022 14:54:19 Wie Sage Ich ihm denn welcher Analog Pin Benutzt werden soll?
Steht in meiner Antwort. Lesen hilft ;-)
Kevin1897 hat geschrieben: 04.11.2022 14:54:19 Kann dies auch mit einem pinMode Befehl erfolgen?
Nicht bei analogen Ausgaben...
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Kevin1897
Beiträge: 56
Registriert: 07.10.2022 21:53:59

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

#319 Beitrag von Kevin1897 »

Gut dann muss ich nochmal suchen :)
Ich finde es nämlich nicht auf die schnelle xD Gibst du mir nen Tipp Bitte? :wand
Korrektur: Kann es mit dem Befehl AnalogWrite Zusammen hängen? Wo müsste denn was hin?

Aber mal was anderes: Warum zeigt er mir im Seriellen Monitor solche Hyroglyphen denn an: v�������f�
Eine Verbindung zu ZUSI3 kommt auch nicht zustande, obwohl die IP adressen stimmen. :O
BR620/622/642 BR8442 ;-)

Benutzeravatar
F. Schn.
Beiträge: 6630
Registriert: 24.10.2011 18:58:26

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

#320 Beitrag von F. Schn. »

Zwei Ergänzungen:
1. Wenn du hier im Forum Code postest, stelle ihn in einen [ code ]-Block. (5. Knopf von Links im Beitrags-Editor)
2. Für's Programmieren lernen ist ein Netzwerk-Protokoll auf dem Arduino vermutlich nicht das Mittel erster Wahl. Gewisse grundlegende Fähigkeiten, wie z.B. eine grobe Idee, was einem der Kompiler mit einer Fehlermeldung sagen will, oder wie Programme grundsätzlich ablaufen, sind anders vermutlich besser zu erlernen.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Antworten