libzusi - Zusi 3 TCP lib für CODESYS V3 SPS

Da immer mehr Zusi User von einem 1:1 Führerstand mit träumen, soll es zumindest an Datenaustausch nicht hapern.
Nachricht
Autor
Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

libzusi - Zusi 3 TCP lib für CODESYS V3 SPS

#1 Beitrag von Thomas B »

Momentan arbeite ich an der Ertüchtigung meines Fahrpultes (Ja, es lebt noch) für Zusi 3.
Thema 1:
Hintergrundinfo zum Fahrpult: Es enthält eine Beckhoff SPS Typ CX9001. Diese verfügt über eine vollständige TCP-Schnittstelle, die mit TwinCat/CoDeSys programmiert werden kann. Bei Zusi 2 hat die SPS die Simulationsdaten direkt aus dem TCP-Bus gelesen und dann Tastenanschläge an ein Windows-Programm geschickt. Das ist natürlich von hinten durch die Brust ins Auge weil dann schon zwei Programme gepflegt werden müssen. Bei Zusi 3 können die Befehle ja zum Glück direkt an Zusi übermittelt werden.
Ich habe das neue Schnittstellen-Modul für TwinCat in groben Zügen bereits fertig und die SPS kann sich mit Zusi verbinden. Allerdings erscheint das Fahrpult nicht in der Liste der angeschlossenen Clients, obwohl die SPS eine ACK_HELLO-Nachricht erhält. Woran kann das liegen? Wird der Client erst aufgenommen wenn Daten angefragt wurden? Und wie kann ich den Netzwerkverkehr auf der Serverseite überwachen um zu sehen ob die Daten richtig übermittelt wurden? Zusi fehlt da im Moment noch eine Debugging-Hilfe. Oder kennt jemand ein gutes 3th-Party-Tool zur Paket-Analyse?

Thema 2, für (potentielle) Fahrpultbastler interessant:
Ich gedenke den Zusi-Client für TwinCat später als vollständige Bibliothek zur Verfügung zu stellen, da die Programmierung der TCP/IP-Schnittstelle doch sehr hardwarenah mit Pointern und direktem Speicherzugriff erfolgt. Das will ich wirklich niemandem zumuten :rolleyes:
Da Beckhoff-Hardware jedoch relativ teuer ist (wenn man nicht gerade ein Schnäppchen bei Ebay schießt), habe ich mich mal nach günstigeren Alternativen umgesehen und bin auf CoDeSys für Raspberry Pi gestoßen. Und das wäre in meinen Augen die perfekte Fahrpult-Hardware! Das System ist mit I2C-Modulen, AI/O, DI/O erweiterbar (sehr preiswert) und die CoDeSys-Lizenz ist mit 35 Euro auch zu verkraften.
Sobald ich den Client für TwinCat fertig habe, werde ich mich mit dem Raspberry Pi und CoDeSys auseinandersetzen und sehen inwieweit man das für Fahrpulte einsetzen kann. Sollte es gut verlaufen werde ich meine Zusi-Lib an diese Plattform anpassen und zur Verfügung stellen. Natürlich nur sofern Bedarf besteht ;)

Aktueller Nachtrag:
Die jeweils aktuelle Version der Zusi 3 TCP-Bibliothek für CODESYS V3 gibt es auf meiner Homepage:
http://www.tbxtools.de/codesys/zusi3tcp" target="_blank


Nachtrag 2:
Die Lib für Twincat habe ich leider entgegen meiner ursprünglichen Pläne nicht weiterentwickelt, da u.a. zur recht teuren Hardware noch zusätzliche kostenpflichtige Plugins benötigt werden. Ich habe mich deshalb voll auf CODESYS3 konzentriert.
Zuletzt geändert von Thomas B am 02.01.2022 16:27:19, insgesamt 6-mal geändert.
Grüße,
Thomas (eh. ElektrikTrick)

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

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#2 Beitrag von Carsten Hölscher »

Wenn der Anmeldevorgang durchläuft, erscheint der Client sofort in der Liste. Kannst Du mit den mitgelieferten TCP-Demos testen.

Carsten

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#3 Beitrag von Thomas B »

Das merkwürdige ist: war ein Fehler im Protokoll, hat Zusi eine Fehlermeldung rausgegeben "Protokoll Version 2.0 erwartet". Das lag an einer falschen Byte-Order was ich korrigiert habe. Die Meldung kommt nicht mehr und dennoch erscheint der Client nicht in der Liste. Auf der Client-Seite sieht das Paket vor dem Versenden auch richtig aus. Ich müsste mir auf der Serverseite den HEX-Dump des HELLO-Paketes ansehen können...
Grüße,
Thomas (eh. ElektrikTrick)

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#4 Beitrag von jonathanp »

Und wie kann ich den Netzwerkverkehr auf der Serverseite überwachen um zu sehen ob die Daten richtig übermittelt wurden?
Du kannst das Monitoring-Programm 'Wireshark' bunutzen, und vergleichst du Byte für Byte dein Programm mit dem Daten der Demos & ZusiDisplay. Es gibt sogar ein Plugin, dass Zusi Netzmitteilungen decodieren - http://forum.zusi.de/viewtopic.php?f=73&t=12635" target="_blank.

Edit:
Und vergisst du nicht, benutzt Zusi nicht 'Network Byte Order'(big-endian), sondern immer Little-Endian byte order.
Zuletzt geändert von jonathanp am 02.11.2016 10:31:47, insgesamt 2-mal geändert.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#5 Beitrag von Thomas B »

Super :tup Das gucke ich mir mal an.
Grüße,
Thomas (eh. ElektrikTrick)

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#6 Beitrag von Thomas B »

Das Tool ist wirklich extrem nützlich :)
Allerdings waren die Daten in Ordnung aber der Client erscheint tatsächlich erst in der Liste wenn Daten angefordert wurden...
Grüße,
Thomas (eh. ElektrikTrick)

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

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#7 Beitrag von Carsten Hölscher »

Vielleicht haben wir uns da mißverstanden. Ich meinte den kompletten Anmeldevorgang inkl. "needed data". Versand von "Live"daten ist nicht nötig.

Carsten

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

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#8 Beitrag von F. Schn. »

Hallo Carsten,

hat es eigentlich einen Grund, warum due needed data als Teil der Anmeldung definiert hast? Ich frage auch, weil ich beim Zusi-2-Zusi-3-Converter Pauschal alles anfordern muss, was ich nicht müsste, wenn Zusi 3 jederzeit einen needed-Data-Befehl akzeptieren würde.

Gruß
F. Schn.

(PS: Im Ordner "Zusi 3 - Technik" würde ich das Thema übrigens nicht suchen, alles andere zu TCP ist im Ordner "Zusi 3 - Zusatztools" oder im Fahrpult-Ordner.)
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

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

Re: Paket-Monitor TCP-Server? / Raspberry Pi mit CODESYS

#9 Beitrag von Carsten Hölscher »

Es gab bisher keinen mir bekannten Anwendungsfall, den Umfang der zu sendenden Größen in der laufenden Verbindung zu ändern.
carsten

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#10 Beitrag von Thomas B »

Nachdem ich endlich mal wieder die Muße gefunden habe mich mit meinem Fahrpult zu beschäftigen, habe ich die TCP-Lib soweit fertig dass ich alle Daten von Zusi auslesen kann.
Um mal einen Eindruck zu bekommen, so sieht Zusi-TCP in IEC 61131-3 (hier in FUP für die SPS-Kenner) aus:
http://www.tbxtools.de/privat/zusitcp.png" target="_blank

Zur Sache:
Jetzt bin ich beim senden von Anweisungen angekommen und hier habe ich ein Verständnisproblem. In der Doku (11.3.3.6) steht bei Knoten "Tastatureingaben" die Anweisungen in der Reihenfolge
  • Tastaturzuordnung
  • Tastaturkommando
  • Tastaturaktion
  • Schalterposition
  • Parameter
Was ich hieran nicht verstehe ist, wenn ich z.B. einen Kombifahrschalter auf Stufe Fahren 4 stellen will, gebe ich das dann als Tastaturaktion oder als absolute Schalterposition an?

p.S. als Anekdote: Ich habe fast den gesamten Samstag damit verbracht einen vermeintlichen Fehler im Code zu suchen weil die Daten nur so schleppend rein kamen. Bis ich dann rausgefunden habe dass man bei Zusi den Übertragungsinterval einstellen kann :wand
Grüße,
Thomas (eh. ElektrikTrick)

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

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#11 Beitrag von Carsten Hölscher »

Was ich hieran nicht verstehe ist, wenn ich z.B. einen Kombifahrschalter auf Stufe Fahren 4 stellen will, gebe ich das dann als Tastaturaktion oder als absolute Schalterposition an?
Am besten als absolute Position.

Carsten

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#12 Beitrag von Thomas B »

Carsten Hölscher hat geschrieben:
Was ich hieran nicht verstehe ist, wenn ich z.B. einen Kombifahrschalter auf Stufe Fahren 4 stellen will, gebe ich das dann als Tastaturaktion oder als absolute Schalterposition an?
Am besten als absolute Position.
Carsten
Sind denn die anderen Parameter dann optional?
Zuletzt geändert von Thomas B am 08.02.2017 07:37:27, insgesamt 1-mal geändert.
Grüße,
Thomas (eh. ElektrikTrick)

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

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#13 Beitrag von Carsten Hölscher »

Da gibt es teils mehrere Möglichkeiten. Einfach mal schauen ob's geht und dann ist alles gut. :D

Carsten

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#14 Beitrag von Thomas B »

Carsten Hölscher hat geschrieben:Da gibt es teils mehrere Möglichkeiten. Einfach mal schauen ob's geht und dann ist alles gut. :D

Carsten
Try-and-error ist mein zweiter Vorname :rolleyes:
Btw. Carsten, spricht eigentlich technisch gesehen irgendwas dagegen auch während der laufenden Simulation noch Clients aufzunehmen?
Zuletzt geändert von Thomas B am 15.03.2018 07:51:21, insgesamt 1-mal geändert.
Grüße,
Thomas (eh. ElektrikTrick)

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

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#15 Beitrag von Carsten Hölscher »

Geht doch.

Carsten

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#16 Beitrag von Thomas B »

Du meinst der Server nimmt Clients nach dem Start an??
Ich muss gestehen dass ich so davon überzeugt war dass das nicht geht, dass ich es gar nicht erst ausprobiert habe 8o
Grüße,
Thomas (eh. ElektrikTrick)

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#17 Beitrag von Thomas B »

Ich fürchte ich muss noch mal um Hilfe bitten.
Ich verzweifle an der Kombischalter-Funktion. Ich übe mit dem LINT und versuche eine Fahrstufe zu übertragen, aber der Kombischalter geht immer auf Schnellbremsen.
Das Kommando sieht so aus:

Code: Alles auswählen

Tastaturzuordnung: 16#0001 [Fahrschalter]
Tastaturkommando:  16#0001 [Aufschalten]
Tastaturaktion:    16#0007 [Absolute Angabe]
Schalterposition:  16#0003 [Fahrstufe 3]
Parameter:         16#0000
Ich kann den Hebel mit den Auf- und Abschalt-Kommandos jeweils eine Stufe rauf oder runterschalten. Nur die Absolute Angabe der Stufe führt immer zur Schnellbremsung...
Allerdings verstehe ich auch schon die Verwendung der Tabelle "Kombischalterfunktion" nicht, wo muss ich die einsetzen? Das geht leider aus der Doku nicht hervor ;(
Ich bitte um Hinweise die zur Lösung dienlich sind :)
Zuletzt geändert von Thomas B am 14.02.2017 18:10:28, insgesamt 2-mal geändert.
Grüße,
Thomas (eh. ElektrikTrick)

Benutzeravatar
Johannes
Beiträge: 3197
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#18 Beitrag von Johannes »

ElektrikTrick hat geschrieben:Allerdings verstehe ich auch schon die Verwendung der Tabelle "Kombischalterfunktion" nicht, wo muss ich die einsetzen? Das geht leider aus der Doku nicht hervor ;(
Ich bitte um Hinweise die zur Lösung dienlich sind :)
Doku 11.3.3.4 (DATA_OPERATION). Diese Tabelle ist nur wichtig, wenn du Daten von Zusi empfangen willst.
Zuletzt geändert von Johannes am 14.02.2017 19:04:31, insgesamt 2-mal geändert.

Benutzeravatar
Johannes
Beiträge: 3197
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#19 Beitrag von Johannes »

Zum Rest: Was passiert denn, wenn du eine hoehere Schalterstellungs-Nummer sendest? Laut Doku ist zwar die Schalterposition relativ zur Grundstellung, in meinen Tests war das jedoch nicht der Fall. Man muss also tatsaechlich die Rastennummer eingeben, wie sie im Kombihebel-Editor des Fuehrerstandes erscheint.

Tastaturkommando kannst du uebrigens weglassen; fuer die Angabe einer absoluten Schalterstellung ist es ja unerheblich, ob du auf- oder abschaltest.
Zuletzt geändert von Johannes am 14.02.2017 19:04:42, insgesamt 1-mal geändert.

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-TCP-Lib TwinCat / CoDeSys

#20 Beitrag von Thomas B »

Moin,
bin wieder ein paar Tage nicht zum basteln gekommen :(
Also ich habe noch ein paar andere Bugs entfernt und es dann noch mal mit verschiedenen Rasterstellungen ausprobiert, aber egal welchen Wert ich sende: Schnellbrems-Stellung :wand
Jetzt ist natürlich die Frage ob es am Protokoll selbst liegen könnte? Das wird übertragen:

Code: Alles auswählen

Zusi 3 TCP data
    Node, id = 0x2
        Node, id = 0x10A
            Node, id = 0x1
                Attribute, id = 0x1, payload = 0100
                Attribute, id = 0x2, payload = 0000
                Attribute, id = 0x3, payload = 0700
                Attribute, id = 0x4, payload = 0F
                Attribute, id = 0x5, payload = 00000000
Ergebnis ist immer das selbe, egal was bei 0x4 steht. Ist da irgendwas falsch was ich nicht sehe?
Grüße,
Thomas (eh. ElektrikTrick)

Antworten