Aktuelle Zeit: 21.11.2017 22:22:02

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 230 Beiträge ]  Gehe zu Seite Vorherige  1 ... 7, 8, 9, 10, 11, 12  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 28.06.2016 18:10:04 
Offline

Registriert: 14.09.2015
Beiträge: 13
Es ist ja schon ein Segen das es jemand geschafft hat einen Arduino direkt lauffähig zu bekommen mit Zusi3,

gibt es eine möglichkeit dieses Arduino Script downzuloaden?
Ich fummel die ganze Zeit rum meinen 110er Führerstand ans laufen zu bekommen.

Lg
Mike


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 28.06.2016 19:23:26 
Offline

Registriert: 01.03.2016
Beiträge: 19
Mike B. hat geschrieben:
gibt es eine möglichkeit dieses Arduino Script downzuloaden?

Wenn Sie unser Programm meine, kein Problem, aber Sie müssen noch warten, wir haben eine Störung auf der Website.
Wir sind keine erfahrenen Programmierer und das Programm ist noch nicht fertig.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 03.07.2016 19:04:16 
Offline

Registriert: 01.03.2016
Beiträge: 19
Unser Script finden Sie hier.

http://www.l-vosje.nl/html/arduino_script.html

Vielleicht ist es auch für andere nützlich.


Zuletzt geändert von L-Vosje am 03.07.2016 19:27:58, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 04.07.2016 21:40:35 
Offline
Administrator
Benutzeravatar

Registriert: 03.07.2002
Beiträge: 27059
Wohnort: Braunschweig
Hab mir die Beschleunigungswerte angeschaut und da war ein Rechenfehler drin. Ist in der nächsten Version korrigiert.

Carsten


Nach oben
 Profil Website besuchen  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.07.2016 08:30:55 
Offline

Registriert: 01.03.2016
Beiträge: 19
@Carsten

Danke für die info.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.08.2016 08:17:49 
Offline
Benutzeravatar

Registriert: 25.12.2011
Beiträge: 582
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)
Aktuelle Projekte: Fahr/Bremshebel im Selbstbau
L-Vosje hat geschrieben:
Unser Script finden Sie hier.
http://www.l-vosje.nl/html/arduino_script.html
Vielleicht ist es auch für andere nützlich.

Hi,

der Link gibt leider nur noch ein

Not Found
The requested URL /html/arduino_script.html was not found on this server.

_________________
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6nberg-Streckenblog-1014054601976323/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.08.2016 08:35:14 
Offline

Registriert: 01.03.2016
Beiträge: 19
Seltsam, aber es sollte jetzt funktionieren.

http://www.l-vosje.nl/html/arduino_script.html


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.08.2016 08:39:04 
Offline
Benutzeravatar

Registriert: 25.12.2011
Beiträge: 582
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)
Aktuelle Projekte: Fahr/Bremshebel im Selbstbau
Ja,

sieht gut aus, läuft wieder. Vielen Dank.

_________________
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6nberg-Streckenblog-1014054601976323/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 20.08.2016 20:29:20 
Offline

Alter: 18
Registriert: 16.05.2015
Beiträge: 143
Aktuelle Projekte: Ein eigenes Fahrpult
Hallo Zusianer, ich habe heute mal alle meine neuen Leuchtmelder ans Pult angschlossen, einfach super. Jedoch habe ich noch immer die Verzögerung der PZB. Und absofort wenn sich der Wert der PZB ändert dh von 85 ins wechselblinken, etc... dann verzögern sich auch die Leuchtmelder. Deswegen meine Frage gibt es derzeit schon ein neues Script was den Zusi3 Server benutzt? Denn momentan fahre ich über das Script von Arne aus dem Norden + den Converter von F. Schn

Mit freundlichen Grüßen Jeff

_________________
Mein Projekt: Mein eigenes Fahrpult. Schaut doch mal vorbei
https://m.youtube.com/channel/UCrpDMup3YWCyJkPzLzLuf2w


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.01.2017 16:08:09 
Offline
Benutzeravatar

Alter: 18
Registriert: 30.04.2014
Beiträge: 60
Aktuelle Projekte: Fahrpult Wittenberger Steuerwagen
Hallo zusammen,

ich stehe total auf dem Schlauch...

Code:
if (c == 100) {                       
     //    Serial.print(c);Serial.print("---->");
     n = 0;
     do {
      x = client.read();
      if (n == 27 ) { //|| n==41 || n==48 || n==55 // 27=lamp 34=toeter
       //Serial.print(x);
       //Serial.print(" ");
       if (x == 1) Serial3.println("L1B"); // Sifa aan
       if (x == 0) Serial3.println("L1b"); // Sifa uit
      }
      if (n == 34 ) { //|| n==41 || n==48 || n==55 // 27=lamp 34=toeter
       
      }
      n++;
     }
     while (x != 255);
     //   Serial.println();
     // positie 27 is lampje SIFA/0 is uit/1 is aan
     // positie 34 0 is uit/1 is waarschuwingssignaal/3 is dwangremming
    }


Wie kommt man jetzt auf diese 27 bzw. 34 Male, die mein Ardunio die von Zusi gesendeten Daten ignoriert, bevor er etwas damit anfängt?

Gero


Zuletzt geändert von Gero am 05.01.2017 16:08:59, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 05.01.2017 17:02:17 
Offline
Benutzeravatar

Registriert: 14.03.2009
Beiträge: 1663
Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Anscheinend liest das Skript das Zusi-3-Datenpaket "Status Sifa" nicht strukturiert aus, sondern behandelt es als Folge von Bytes. Wenn man Glueck hat, steht dort tatsaechlich als 28. Byte der Status des Leuchtmelders und als 35. Byte der Status der Hupe. Sobald sich aber Zusi entscheidet, die Knoten in einer anderen Reihenfolge zu senden (was erlaubt ist), oder sobald man eine Sifa-Bauart mit laengerem Namen hat (der Name wird auch uebertragen), loest sich diese Rechnung in Luft auf.

Bild

Fazit: Bitte so nicht programmieren :)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 06.01.2017 13:59:12 
Offline
Benutzeravatar

Alter: 18
Registriert: 30.04.2014
Beiträge: 60
Aktuelle Projekte: Fahrpult Wittenberger Steuerwagen
Hmm...

bekomme bei Zusi auf der passenden Sifa folgendes:

Zitat:
Byte : Byte : 0 Wert : 0 //Erstes immer unbrauchbar
Byte : 1 Wert : 16 //Länge des Attributs in Byte (niedrigstes Byte zuerst)
Byte : 2 Wert : 0 // "
Byte : 3 Wert : 0 // "
Byte : 4 Wert : 0 // "
Byte : 5 Wert : 1 // ID niedrigeres Byte
Byte : 6 Wert : 0 // ID höheres Byte
Byte : 7 Wert : 90 //Z (Beginn Wert des Attributs)
Byte : 8 Wert : 101 //e
Byte : 9 Wert : 105 //i
Byte : 10 Wert : 116 //t
Byte : 11 Wert : 45 //-
Byte : 12 Wert : 90 //Z
Byte : 13 Wert : 101 //e
Byte : 14 Wert : 105 //i
Byte : 15 Wert : 116 //t
Byte : 16 Wert : 45 //-
Byte : 17 Wert : 83 //S
Byte : 18 Wert : 105 //i
Byte : 19 Wert : 102 //f
Byte : 20 Wert : 97 //a

Byte : 21 Wert : 3 //Länge des nächsten Attributs in Byte
Byte : 22 Wert : 0 // "
Byte : 23 Wert : 0 // "
Byte : 24 Wert : 0 // "
Byte : 25 Wert : 2 //ID niedrigeres Byte --> Beginn von ID2
Byte : 26 Wert : 0 //ID höheres Byte
Byte : 27 Wert : 0 //Wert (= 0)

Byte : 28 Wert : 3 //Länge des nächsten Attributs in Byte
Byte : 29 Wert : 0 // "
Byte : 30 Wert : 0 // "
Byte : 31 Wert : 0 // "
Byte : 32 Wert : 3 //ID niedrigeres Byte --> ID3
Byte : 33 Wert : 0 //ID höheres Byte
Byte : 34 Wert : 0 //Wert (=0)

Byte : 35 Wert : 3 //Länge des nächsten Attributs in Byte
Byte : 36 Wert : 0 // "
Byte : 37 Wert : 0 // "
Byte : 38 Wert : 0 // "
Byte : 39 Wert : 4 //ID niedrigeres Byte --> ID4
Byte : 40 Wert : 0 //ID höheres Byte
Byte : 41 Wert : 2 //Wert (=2)

Byte : 42 Wert : 3 //Länge des nächsten Attributs in Byte
Byte : 43 Wert : 0 // "
Byte : 44 Wert : 0 // "
Byte : 45 Wert : 0 // "
Byte : 46 Wert : 5 //ID niedrigeres Byte --> ID5
Byte : 47 Wert : 0 //ID höheres Byte
Byte : 48 Wert : 2 //Wert (=2)

Byte : 49 Wert : 3 //Länge des nächsten Attributs in Byte
Byte : 50 Wert : 0 // "
Byte : 51 Wert : 0 // "
Byte : 52 Wert : 0 // "
Byte : 53 Wert : 6 //ID niedrigeres Byte --> ID6
Byte : 54 Wert : 0 //ID höheres Byte
Byte : 55 Wert : 2 //Wert (=2)
Byte : 56 Wert : 255 //255 = Ende der Übertragung


Sollte jetzt soweit stimmen, oder?

Gero


Zuletzt geändert von Gero am 06.01.2017 16:12:37, insgesamt 5-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 06.01.2017 14:24:46 
Offline
Benutzeravatar

Registriert: 14.03.2009
Beiträge: 1663
Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Ich habe dir das mal richtig kommentiert:

Zitat:
Byte : 0 Wert : 0 // das zweite Byte der Knoten-ID "Status Sifa" (0x0064, uebertragen als 0x64 0x00); das erste Byte ist dasjenige, das in der ersten Zeile auf c = 100 (=0x64) verglichen wird

Byte : 1-4 Wert : 16 0 0 0 // Laenge des ersten Attributs inkl. ID: 16
Byte : 5-6 Wert : 1 0 // ID des Attributs: 0x0001 -> Bauart Sifa
Byte : 7-20 // Es folgen 14 Bytes (16 Bytes Laenge - 2 Bytes Laenge der ID), die den Wert des Attributs darstellen.

Byte : 21-24 Wert : 3 0 0 0 // Laege des zweiten Attributs inkl. ID: 3
Byte : 25-26 Wert : 2 0 ID des Attributs: 0x0002 -> Status Leuchtmelder
Byte : 27 Wert : 0 //Wert = 0

[...]

Byte : 56-59 Wert : 255 255 255 255 // Es folgt kein weiteres Attribut, sondern der Knoten ist zu Ende -> 0xffffffff


Wenn man eine Zeit-Weg-Sifa verwendet, dann ist der Name ein Zeichen kuerzer, das erste Attribut schon bei Byte 19 zu Ende und der Leuchtmelderstatus steht in Byte 26.

Lies dir bitte mal in der Doku Kapitel 11.3.1 durch, um zu verstehen, wie das Datenformat aufgebaut ist. Anhand dieses Scripts kann man das nicht sinnvoll lernen.

(Edit: Der vorherige Beitrag wurde nachtraeglich stark editiert, jetzt stimmt er einigermassen :))


Zuletzt geändert von Johannes am 06.01.2017 17:42:17, insgesamt 3-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 06.01.2017 14:29:42 
Offline
Benutzeravatar

Registriert: 24.10.2011
Beiträge: 1820
Ich verlinke mal meine Gedanken für eine alternative Loop-Implentierung:

viewtopic.php?p=263157#p263157

_________________
Diese Signatur möchte folgendes bekannter machen: ZusiWiki: Führerstände · ZusiWiki: Fahrzeugprojekte · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 06.01.2017 17:05:04 
Offline

Registriert: 01.03.2016
Beiträge: 19
Gero hat geschrieben:
Hallo zusammen,

ich stehe total auf dem Schlauch...

Code:
if (c == 100) {                       
     //    Serial.print(c);Serial.print("---->");
     n = 0;
     do {
      x = client.read();
      if (n == 27 ) { //|| n==41 || n==48 || n==55 // 27=lamp 34=toeter
       //Serial.print(x);
       //Serial.print(" ");
       if (x == 1) Serial3.println("L1B"); // Sifa aan
       if (x == 0) Serial3.println("L1b"); // Sifa uit
      }
      if (n == 34 ) { //|| n==41 || n==48 || n==55 // 27=lamp 34=toeter
       
      }
      n++;
     }
     while (x != 255);
     //   Serial.println();
     // positie 27 is lampje SIFA/0 is uit/1 is aan
     // positie 34 0 is uit/1 is waarschuwingssignaal/3 is dwangremming
    }


Wie kommt man jetzt auf diese 27 bzw. 34 Male, die mein Ardunio die von Zusi gesendeten Daten ignoriert, bevor er etwas damit anfängt?

Gero


Es stimmt, dass dieser Abschnitt nicht funktioniert, es war nur ein erster Test.
Die Absicht war, je nach name, die zugehörigen Daten Suche und dann weiter zu verarbeiten.
Es ist also noch nicht fertig.

Im übrigen funktioniert der Rest einwandfrei.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 25.03.2017 20:40:51 
Offline
Benutzeravatar

Registriert: 24.10.2011
Beiträge: 1820
Hi,
ich habe gerade eine PN erhalten, die nach einem lauffähigen Script fragt. Da das sicherlich für alle interressant ist, wollte ich hier mal die Frage an alle, insbesondere Arne richten, ob es da etwas gibt. Das von L-Vosje ist jedenfalls schon wieder nicht mehr erreichbar, und kam ja glaube ich auch nicht mit beliebig tiefen Verschachtelungstiefen des Knoten-Protokolls zurecht.

Für den Fall das keiner Antwortet, habe ich noch mal die Kombination von L-Vosjes setup mit meiner Loop-Idee unten angehängt, es kann aber sein, dass ihr dort noch ein bisschen basteln müsst, bevor es läuft.
Code:
#include <SPI.h>
#include <Ethernet2.h>


IPAddress ip(192, 168, 1, 100);//IP-Adresse vom Arduino Ethernet Shield
IPAddress server(192, 168, 1, 103); //IP-Adresse vom Zusi3-Rechner

uint8_t aanmelding[] = { 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
            };

uint8_t vraagsnelheid[] = { 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, // Snelheid
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // Luchtdruk Hoofdleiding
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // Druk Remcylinder
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // Luchtdruk Tank
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xD, 0x0, // Stroom
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xE, 0x0, // Spanning (Draad)
              //0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hoofdschakelaar
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x19, 0x0, // Afgelegde weg in Mtr
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x23, 0x0, // Tijd Digitaal
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4C, 0x0, // Bocht Radius
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4F, 0x0, // Acceleratie X
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x50, 0x0, // Acceleratie Y
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x52, 0x0, // Middelpuntzoekende kracht X
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x53, 0x0, // Middelpuntzoekende kracht Y
              0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
              //0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Deuren
              0xFF, 0xFF, 0xFF, 0xFF,
              0xFF, 0xFF, 0xFF, 0xFF,
              0xFF, 0xFF, 0xFF, 0xFF
             };

EthernetClient client;

void setup() {
 Ethernet.begin(mac, ip);
 Serial.begin(9600);                        // seriele poort naar de USB poort voor debugging
 Serial1.begin(19200);
 Serial2.begin(19200);
 Serial3.begin(19200);                       // seriele output naar de print met lampen en analoge meters
 while (!Serial) {
  ;                                // Wacht op seriële poort om contact op te bouwen
 }



 delay(1000);                            // Geef de Ethernet Shield even tijd om te intialiseren
 Serial.println("verbinden...");

 if (client.connect(server, 1436)) {                // Als de verbinding gelukt is dan melding op de monitor
  Serial.println("Verbunden!");
  Serial.println(ip);                       // ip Client
  Serial.println(server);                     // ip Server (Zusi3)
 }
 else {
  Serial.println("Verbinden Fehlgeschlagen");               // Als de verbinding niet gelukt is dan melding op de monitor
 }
 client.write (aanmelding, 59);
 client.write (vraagsnelheid, 158);                 // *** Let op !!! *** Moet overeenkomen met werkelijk aantal bytes in de reeks
}
Code:
union {
  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;

union {
  byte b[4];
  float f;
  int i;
} nutzdata;

#define MAX_NUTZDATA 4

void loop() {
 if (client.available()) {
   dataLng.b[0] = client.read();
   dataLng.b[1] = client.read();
   dataLng.b[2] = client.read();
   dataLng.b[3] = client.read();
   
   if (dataLng.i == 0) { //BEGIN NODE
      ebene++;
      dataGroup.b[0] = client.read();
      dataGroup.b[1] = client.read();
      if (ebene == 1) {
         ebene1Status = dataGroup.i;
      } else if (ebene == 2) {
         ebene2Status = dataGroup.i;
      } else if (ebene == 3) {
         ebene3Status = dataGroup.i;
      }
   } else if (dataLng.i == -1) { //END NODE
      ebene--;
   } else { //ATTRIBUTE
      dataGroup.b[0] = client.read();
      dataGroup.b[1] = client.read();
      nutzdata.i = 0; //CLEAR
      for(int i = 0; i < dataLng.i - 2; i++) {
         byte b = client.read();
         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) Serial.println("sifa aan");
                     if (nutzdata.b[0] == 0) Serial.println("sifa uit");
                  } else if (dataGroup.i == 0x0003) { // Status Sifa-Hupe
                     if (nutzdata.b[0] == 2) Serial.println("sifa dwangrem aan");
                     if (nutzdata.b[0] == 1) Serial.println("sifa toeter aan");
                     if (nutzdata.b[0] == 0) Serial.println("sifa toeter uit");
                  }
               }
            } else if ((ebene >= 3) && (ebene3Status == 0x0065)) { //PZB
            } else if ((ebene >= 3) && (ebene3Status == 0x0066)) { //DOORS
            } else if (ebene == 2) {
               if (dataGroup.i == 0x0001) { // Geschwindigkeit m/s
                  byte v = nutzdata.f * 3.6;
                  Serial3.print("A");
                  Serial3.println(v);
               } else if (dataGroup.i == 0x004F) { // Beschleunigung x m/s^2
                  byte vv = nutzdata.f * 3000;
                  Serial2.println(vv);
               }
            }
         }
      }
   }
 }
 // if the server's disconnected, stop the client:
 if (!client.connected()) {
  Serial.println();
  Serial.println("verbinding verbroken");
  client.stop();
  // do nothing:
  while (true);
 }
}


_________________
Diese Signatur möchte folgendes bekannter machen: ZusiWiki: Führerstände · ZusiWiki: Fahrzeugprojekte · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat


Zuletzt geändert von F. Schn. am 25.03.2017 20:56:43, insgesamt 2-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 26.03.2017 20:44:27 
Offline
Benutzeravatar

Alter: 18
Registriert: 30.04.2014
Beiträge: 60
Aktuelle Projekte: Fahrpult Wittenberger Steuerwagen
Moin,
hab den Code von L-Vosje mit kleinen Änderungen auf Deutsch noch rumfliegen, Fehler bitte per PN melden!

Code:
#include <SPI.h>
#include <Ethernet.h>  //<Ehternet2.h>
byte ZusiIP[4] = {192, 168, 0, 44};
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, 0, 100);//ip adres Arduino Ethernet Shield
IPAddress server(ZusiIP[0], ZusiIP[1], ZusiIP[2], ZusiIP[3]); //ip Adresse Zusi3

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

uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,   // Abfrage = "Serie"
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // v Ist
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // P HLL
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // P BrZyl
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // P HBL
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0, // F Gesamt
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xD, 0x0, // I Fahrleitung LOK
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xE, 0x0, // U Fahrleitung LOK
                      //0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // HS LOK
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x19, 0x0, // s Zurückgelegt
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x23, 0x0, // t
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4C, 0x0, // r Bogen
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4F, 0x0, // a X
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x50, 0x0, // a y
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x52, 0x0, // Drehbeschleunigung X
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x53, 0x0, // Drehbeschleunigung Y
                      0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // Status SIFA
                      //0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Status Türen
                      0xFF, 0xFF, 0xFF, 0xFF,
                      0xFF, 0xFF, 0xFF, 0xFF,
                      0xFF, 0xFF, 0xFF, 0xFF
                    };

EthernetClient client;

void setup() {
  Ethernet.begin(mac, ip);
  Serial.begin(9600);                        // Serial 1 für Debugging
  Serial1.begin(19200);
  Serial2.begin(19200);
  Serial3.begin(19200);                       // Serial 3 für LM und Analoganzeigen
  while (!Serial) {
    ;                                // Wartet, bis die serielle Schnittstelle Kontakt aufgebaut hat
  }

  delay(1000);                            // Zeit zum initialisieren
  Serial.println("Verbinden...");

  if (client.connect(server, 1436)) {                // Wenn Verbindung erfolgreich auf Monitor ausgeben
    Serial.println("Verbunden");
    Serial.println(ip);                       // ip Client (Shield)
    Serial.println(server);                     // ip Server (Zusi3)
  }
  else {
    Serial.println("Verbinden fehlgeschlagen");               // Wenn Verbindung nicht erfolgreich auf Monitor ausgeben
  }
  client.write (Anmeldung, 59);
  client.write (Abfrage, 166);                 // *** Achtung !!! *** Muss der tatsächlichen Anzahl von Bytes in der Serie entsprechen
}

float inputValue;

union u_tag {
  byte b[4];
  float fval;
} u;

void loop() {
  if (client.available()) {
    byte c = client.read();
    Eingangswerte[16] = (c);

    if (f == 1) {
      for (int i = 0; i <= 15; i++) {
        Eingangswerte[i] = Eingangswerte[i + 1];
      }
      n = 0; nn = 0;
      for (int i = 0; i <= 15; i++) {
        if (Eingangswerte[i] == StartSerie[i]) {
          n++;
        }
        if (Eingangswerte[i] == StartSerie2[i]) {
          nn++;
        }
      }

      if (n == 16 || nn == 16) {
        byte c = client.read();
        //************Sifa******************************************************************************************
      }
      //************Türen******************************************************************************************
      if (c == 102)
      {
      }
      //------------------------------------------------
      //************Zugbeeinflussung******************************************************************************************
      if (c == 101) // Nicht in der Serie!
      {
      }
      //------------------------------------------------
      else    //Andere Datenverarbeitung
        if (c != 100 && c != 101 && c != 102) {
          {
            Data1[0] = c;       //ID
            x = client.read();     //leeres High-Byte der ID
            Data1[1] = client.read(); //Wert
            Data1[2] = client.read(); //Wert
            Data1[3] = client.read(); //Wert
            Data1[4] = client.read(); //Wert


            u.b[0] = Data1[1];
            u.b[1] = Data1[2];
            u.b[2] = Data1[3];
            u.b[3] = Data1[4];



            inputValue = (u.fval);



            //************Geschwindigkeit******************************************************************************************
            if (Data1[0] == 0x1) {
              byte v = inputValue * 3.6;
              vIst = v;
              Serial3.print("A");
              Serial3.println(v);
              if (v >= 38)
              {
                Serial3.println("L1F");//LM Hochabbremsung an
              }
              else
              {
                Serial3.println("L1f");//LM Hochabbremsung aus
              }
            }
            //************Durck HLL******************************************************************************************
            if (Data1[0] == 0x2) {

              hll = inputValue * 10;
              int inputValue = 1180 - (hll * 4.66);
              Serial3.print("#6 P");
              Serial3.print(inputValue);
              Serial3.println(" T1000");
              Serial.print("#6 P");
              Serial.print(inputValue);
              Serial.println(" T1000");
            }

            //************Druck BrZyl******************************************************************************************
            if (Data1[0] == 0x3) {
              hll = inputValue * 10;
              int inputValue = 730 + (hll * 26.6);
              Serial3.print("#7 P");
              Serial3.print(inputValue);
              Serial3.println(" T1000");
              Serial.print("#7 P");
              Serial.print(inputValue);
              Serial.println(" T1000");
            }
            //************Beschleunigung******************************************************************************************
            if (Data1[0] == 0x4F) {
              vv = inputValue * 2000;
              Serial2.println(vv);
            }
            //************Radius******************************************************************************************
            if (Data1[0] == 0x4C) {
              vv = int(0 - (inputValue * 1000));
              if (vv > 3500) {
                vv = 3500;
              }
              if (vv < -3500) {
                vv = -3500;
              }
              Serial1.println(vv);
              //Serial.println(vv);
            }
            //************Uhrzeit******************************************************************************************
            if (Data1[0] == 0x23) {
              long ZeitInSekunden = inputValue * 86400;
              long Stunden = ZeitInSekunden / 3600;
              long Minuten = (ZeitInSekunden - (Stunden * 3600)) / 60;
              long Sekunden = (ZeitInSekunden - (Stunden * 3600) - (Minuten * 60));
              Serial3.print("T");
              Serial.print("T");
              if (Stunden < 10) Serial3.print("0");
              if (Stunden < 10) Serial.print("0");
              Serial3.print(Stunden);
              Serial.print(Stunden);
              Serial.print(":");
              if (Minuten < 10) Serial3.print("0");
              if (Minuten < 10) Serial.print("0");
              Serial3.println(Minuten);
              Serial.println(Minuten);

            }

            //************Oberspannung******************************************************************************************

            if (Data1[0] == 0xE) {
              int vv = (inputValue / 100);
              Serial3.print("E");
              Serial3.println(vv);
              Serial.print("Spanning "); Serial.println(vv);
            }

            //************Zugkraft gesamt******************************************************************************************

            if (Data1[0] == 0x9) {
              int vv = (inputValue / 100);
              Serial3.print("D");
              Serial3.println(vv);
              Serial.print("Kracht "); Serial.println(vv);
            }

            //------------------------------------------------
            do {
              x = client.read(); // 255
              //------------------------------------------------
              if (x != 255) {
                x = client.read(); //leeres Byte
                x = client.read(); //leeres Byte
                x = client.read(); //leeres Byte

                Data1[0] = client.read(); //ID
                x = client.read();     //leeres Byte, HIGH-Byte der ID
                Data1[1] = client.read(); //Wert
                Data1[2] = client.read(); //Wert
                Data1[3] = client.read(); //Wert
                Data1[4] = client.read(); //Wert

                u.b[0] = Data1[1];
                u.b[1] = Data1[2];
                u.b[2] = Data1[3];
                u.b[3] = Data1[4];
                inputValue = (u.fval);

                //************Geschwindigkeit******************************************************************************************
                if (Data1[0] == 0x1) {
                  byte v = inputValue * 3.6;
                  vIst = v;
                  Serial3.print("A");
                  Serial3.println(v);
                  if (v >= 38)
                  {
                    Serial3.println("L1F");//LM Hochabbremsung an
                  }
                  else
                  {
                    Serial3.println("L1f");//LM Hochabbremsung aus
                  }
                }
                //************Druck HLL******************************************************************************************
                if (Data1[0] == 0x2) {

                  hll = inputValue * 10;
                  int inputValue = 1180 - (hll * 4.66);
                  Serial3.print("#6 P");
                  Serial3.print(inputValue);
                  Serial3.println(" T1000");
                  Serial.print("#6 P");
                  Serial.print(inputValue);
                  Serial.println(" T1000");
                }

                //************Druck BrZyl******************************************************************************************
                if (Data1[0] == 0x3) {

                  hll = inputValue * 10;
                  int inputValue = 730 + (hll * 26.6);
                  Serial3.print("#7 P");
                  Serial3.print(inputValue);
                  Serial3.println(" T1000");
                  Serial.print("#7 P");
                  Serial.print(inputValue);
                  Serial.println(" T1000");
                }
                //************Beschleunigung******************************************************************************************
                if (Data1[0] == 0x4F) {
                  vv = inputValue * 2000;
                  Serial2.println(vv);
                }
                //************Radius******************************************************************************************
                if (Data1[0] == 0x4C) {
                  vv = int(0 - (inputValue * 1000));
                  if (vv > 3500) {
                    vv = 3500;
                  }
                  if (vv < -3500) {
                    vv = -3500;
                  }
                  Serial1.println(vv);
                  //Serial.println(vv);
                }
                //************Uhrzeit******************************************************************************************
                if (Data1[0] == 0x23) {
                  //Serial.print("Zeit in Prozent: "); Serial.println(inputValue, DEC);
                  long ZeitInSekunden = inputValue * 86400;
                  long Stunden = ZeitInSekunden / 3600;
                  long Minuten = (ZeitInSekunden - (Stunden * 3600)) / 60;
                  long Sekunden = (ZeitInSekunden - (Stunden * 3600) - (Minuten * 60));
                  Serial3.print("T");
                  Serial.print("T");
                  if (Stunden < 10) Serial3.print("0");
                  if (Stunden < 10) Serial.print("0");
                  Serial3.print(Stunden);
                  Serial.print(Stunden);
                  Serial.print(":");
                  if (Minuten < 10) Serial3.print("0");
                  if (Minuten < 10) Serial.print("0");
                  Serial3.println(Minuten);
                  Serial.println(Minuten);
                }
                //************Oberspannung******************************************************************************************
                if (Data1[0] == 0xE) {
                  int vv = (inputValue / 100);
                  Serial3.print("E");
                  Serial3.println(vv);
                  Serial.print("Spanning "); Serial.println(vv);
                }
                //************Zugkraft gesamt******************************************************************************************
                if (Data1[0] == 0x9) {
                  int vv = (inputValue / 100);
                  Serial3.print("D");
                  Serial3.println(vv);
                  Serial.print("Kracht "); Serial.println(vv);
                }
              }
            }
            while (x != 255);
          }
        }
    }
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("Verbindung abgebrochen");
    client.stop();
    // do nothing:
    while (true);
  }
}


Gero


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 19.05.2017 16:51:50 
Offline

Registriert: 26.01.2017
Beiträge: 8
Hallo,
ich bin mit dem Thema Arduino Anbindung über TCP zwar ziemlicher Neuling, doch ich habe es mit dem Sketch von L-Vosje ziemlich schnell zum laufen bekommen. Nur habe ich jetzt noch ein Problem mit dem ich auch nach ewigem Rumprobieren nicht weiterkomme.
Zur Situation, ich habe meine Arduino Mega mit Ethernet Shield direkt an den Versuchs-Laptop über Ethernet angebunden, darüber hinaus ist der µC auch noch über USB für die Spannungsversorgung und das Debugging angeschlossen.
Sobald sich der Arduino erfolgreich mit dem TCP Server verbindet gibt er das auch wie gewollt über den seriell Monitor aus, und gibt auch dann die Daten der SIFA kontinuierlich aus. Testweise habe ich noch eine LED angeschlossen, die den SIFA Leuchtmelder darstellen soll, passt soweit auch.
Doch dies funktioniert nur mehr oder weniger lange, dann bricht die Auswertung ab, das Shield ist zwar dann immer noch mit dem TCP Server verbunden, was auch über WireShark erkennbar ist. Aber die Ausgabe über den Seriellen Monitor stoppt und auch die LED wird nicht mehr angesteuert.
Ich habe auch schon an den Einstellungen für Sendeintervall und Buffergröße verschiedene Konfigurationen getestet, doch dies ist auch nicht sehr zielführend. Aktuell habe ich folgende Einstellungen, die mehr oder weniger lange funktionieren:
Sendeintervall: 0,1s
Buffergröße: 2000
kontinuierliches Senden ein
Baudrate der seriellen Ausgabe: 9600

Hat von euch evtl. jemand eine Idee woran das liegen kann? Kann es sein, dass sich der µC aufhängt?
Ich wäre auf jeden Fall für einen Lösungsansatz sehr dankbar da ich leider nicht mehr weiter komme.

Max


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 19.05.2017 17:00:18 
Offline
Benutzeravatar

Registriert: 25.12.2011
Beiträge: 582
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)
Aktuelle Projekte: Fahr/Bremshebel im Selbstbau
Allgäu Max hat geschrieben:
Hat von euch evtl. jemand eine Idee woran das liegen kann? Kann es sein, dass sich der µC aufhängt?
Ich wäre auf jeden Fall für einen Lösungsansatz sehr dankbar da ich leider nicht mehr weiter komme.

Hi,

bei mir wurde das damals besser nachdem ich einen Kühlkörper auf den Prozessor vom Ethernetshield aufgeklebt habe. Die Dinger von den Stepper-Drivern vom 3D-Drucker passten da glaub ich ganz gut. Mein Arduino hatte sich damals immer wieder komplett resettet. War mit dem Kühlkörper dann kein Problem mehr.
Darüber hinaus sorgt auch eine zu hohe Spannungsversorgung am Mega manchmal für Hitzeprobleme am Spannungsregler. Aber wenn du ihn über USB versorgst ist das kein Problem.

_________________
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6nberg-Streckenblog-1014054601976323/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
BeitragVerfasst: 19.05.2017 21:39:00 
Offline

Registriert: 26.01.2017
Beiträge: 8
Das wäre ja super wenn das bereits die Lösung ist.
Komisch ist nur, es geht manchmal 5 Minuten gut und dann wieder nur 10 Sekunden.
Ich probier s mal mit dem Kühlkörper.
Danke.

Max


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 230 Beiträge ]  Gehe zu Seite Vorherige  1 ... 7, 8, 9, 10, 11, 12  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.026s | 17 Queries | GZIP : Off ]