Interaktion mit Zusi

Erste Ansprechstelle für technische Fragen der Add-On Bastler, Fragen/Umgang mit den Zusi 2-Editoren
Antworten
Nachricht
Autor
Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Interaktion mit Zusi

#1 Beitrag von Bono »

Ich bitte um Nachsicht, falls ich mit dieser Frage "Längst Gesagtes" aufrühre. Aber ich bin bis jetzt zu keinem brauchbaren Ergebnis gekommen:

Ich würde in 2 selbstgeschriebenen Anwendungen den Zugriff auf Zusi-Informationen brauchen:

1. Ein im Excel geschriebener "Streckenspiegel", der die Positionen der Züge mittels eines nachgeschriebenen "Fahrplans" an ihren Positionen auf der Strecke darstellt.

Hier wäre ein Zugriff mittels VBA-Excel auf die Zusi-Zeit erforderlich
Ich stelle mir vor, dass das
entweder über TCP/IP Lesen der Zusi-Streams
oder (einfacher) durch Lesen des Info-Fensters
möglich sein sollte.
Beides schaffe ich mit meinen bescheidenen VBA Kenntnissen nicht.
Und wenn man in den Foren die Aussagen der Excel-Gurus anschaut, dann findet man meist über mehrere Seiten gehende Codelisten, die dann (zumindest bei mir) im Endeffekt auch nicht funktionieren :wand

Dabei kann es doch nicht so schwer sein, entweder auf den IP-Output von Zusi oder auf das Infofenster zuzugreifen und damit die Zusi-Zeit in Excel zur Verfügung zu haben?

2. In einer in Delphi gschriebenen Straßenbahn-Türsteuerung wäre ein Zugriff auf die Info hilfreich, ob das Fahrzeug gerade fährt oder steht.
Auch das müsste über TCP/IP Zugriff oder Zugriff auf das Infofenster möglich sein.
Allerdings überfordert auch dieser Zugriff meine programmtechnischen Möglichkeiten....

Frage: Gibts da vielleicht irgendwo fertige Module, die man ohne Informatik-Nobelpreis benutzen kann

Sorry für mein Unwissen und H E L P!
saluti Bono

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

Re: Interaktion mit Zusi

#2 Beitrag von Johannes »

Hallo,

ich würde vermuten, dass man die Infos einfacher auch aus der Registry auslesen kann.

Schau dir mal die Schlüssel „SimZeit“ und „ZugSteht“ unter HKEY_CURRENT_USER\Software\Zusi\Zusi an, vielleicht genügt das ja schon deinen Ansprüchen.

Grüße
Johannes

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

Re: Interaktion mit Zusi

#3 Beitrag von Carsten Hölscher »

Andi Karg hat auch eine dll erstellt, die den ganzen Verbindungskram übernimmt. Sollte sich im Forum finden, ist auch erst kürzlich noch diskutiert worden.

Carsten

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#4 Beitrag von Bono »

Hallo Johannes!

Danke mal für den Tipp mit der Registry. Ich hab das auch aus Excel-VBA relativ schnell zusammengebracht.
ABER ?( : Der SimZeit Wert in der Registry ändert sich bei Betrieb von Zusi nicht. ist offenbar nur der in der Simulation angegebene Zeitwert - und fix.
Auch ZugSteht zeigt 1 und das bleibt auch so, wenn ich meinen Zug in Bewegung setze.

Also ist die Hoffnung auf eine einfache Lösung wieder etwas kleiner geworden.........
saluti Bono

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#5 Beitrag von Bono »

Hallo - nochmal Zusatzfrage (speziell an Carsten):

Siehst Du eine Chance, das Infofenster - oder die Informationen, die drinnen stehen irgendwie zu lesen? In Wahrheit lässt es ja nur die Eingabe von F2, F3 F9 und F10 zu.....

Ansonsten muss ich mich halt doch mit TCP/IP befassen....
saluti Bono

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

Re: Interaktion mit Zusi

#6 Beitrag von Carsten Hölscher »

Kann sein, dass man das Fenster mit einem Hook o.ä. erfassen kann. Dazu kann ich aber keine Erfahrung beisteuern.
Dann vielleicht doch besser TCP angehen, das wird es ja auch in Zusi 3 geben, also das wäre auch eine Investition in die Zukunft.

Carsten

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

Re: Interaktion mit Zusi

#7 Beitrag von F. Schn. »

Ich habe versucht .Net-TCP-DLL in das Office-VBA einzubauen, das erwies sich aber als schwierig.

Das Infofenster auszuwerten würde Texterkennung benötigen, ist also noch schwieriger.
Die Registry-Werte werden meines Wissens nur aktualisiert, wenn du mauell fährtst (nicht Autopilot).
Im Notfall könnte man die zusätzlichen Informationen mit einer .Net-Anwendung in eine Austauschdatei oder einen Austauschwert in der Registry zwischenspeichern...

In Delphi kannst du die .Net-TCP-DLL eventuell auch über einen "COM-Funktionsaufruf" einbauen.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#8 Beitrag von Bono »

Hallo F!

Vielen Dank für den Tipp mit der Registry, dass es offenbar nur bei manuellem Fahren funktioniert.
Die Registry scheint für ein paar Zwecke doch ganz brauchbar zu sein. Ich denke da zunächst bei meinem Türsteuerprogramm an das Feld "Zug steht" - nur dann dürfen Türen freigegeben werden. Das gibt Hoffnung!!!.


@Carsten und @alle Gurus
Hinsichtlich TCP/IP komme ich nicht so richtig weiter. Werde noch versuchen, mich an dem Client Prototyp aus der Doku forschend zu betätigen.

Ich seh da vor allem für Nicht-Programmierer wie mich 2 Probleme (falls ich es überhaupt nichtig wahrnehme) :
1. Man muss zunächst in die Lage kommen, neben dem Umgang mit dem Environment ein Winsock Interface so zu bedienen, dass es mit dem Server richtig interagiert ("Hello", Get Data,...) und - was noch schwieriger sein dürfte, wenn man die Anzahl Codezeilen anschaut - alle Ausnahmesituationen richtig zu behandeln.
-- Hier komm ich vielleicht irgendwann mit dem Doku-Client nach hunderten Stunden Brütens zurande....... :(
-- oder es findet sich eine gute Seele, die einen parametrierbaren Client schreibt (und jetzt werd ich unverschämt: vielleicht für Delphi und für VBA... ;D )
2. Nach meiner Erwartung fangen dann aber erst mit der Interpretation des Protokolls die Probleme an und ich muss das Zerlegen von Bytes etc. lernen, damit ich schlussendlich was vernünftiges sehe.
Letzteres halte ich mit Verlaub für etwas unnötig:
a) Rechnen wir tatsächlich mit solchen Bandbreitenengpässen, dass die Zusi-Zustände tatsächlich so kompaktiert an die Clients weitergegeben werden müssen? - in die Registry werden ja auch lesbare Werte geschrieben
und b) - wenn das schon so ist, das Zusi (auch Zusi3?) seine Zustände derartig gepackt ausgibt, könnte nicht der Zusi TCP-Server die von Zusi kommenden Ströme - vielleicht wahlweise - in lesbare informationen umwandeln und diese in geeigneter Weise (TCP/IP, Fenster, Webserver....) weiterschicken?
(Zum Beispiel wäre ja auch ein Server denkbar, bei dem man anklickt, welche Informationen des "aktiven Zuges" im Klartext weitergegeben werden (z.B. km/h).
In Zukunft wird es ja wohl auch notwendig sein, Informationen der ANDEREN Züge weiterzugeben (z.B. wo befindet sich der Kerl tatsächlich, damit ich mich auf die Begegnung vorbereiten kann...)

Vielleicht versteh ich ja was nicht, aber in den heute verwendeten LANs müsste eigentlich genug Bandbreite verfügbar sein, so dass es nicht notwendig sein müsste, mit übertragenen Bytes zu geizen und man könnte ohne Hilfsmittel mitlesen, was der Client eigentlich zugeschickt bekommt.......

Na ja, bin auf Reaktionen gespannt......
saluti Bono

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

Re: Interaktion mit Zusi

#9 Beitrag von F. Schn. »

Einen eigenen TCP-Client zu Programmieren ist tatsächlich nicht ganz Trivial.

Desshalb hatte Carsten ja auch Vorgeschlagen die DLL von Andreas Karg zu nutzen.
Dazu müsstest du aber halt in .Net zu Programmieren. Hat z.B. den Vorteil, dass du dich nicht um die Speicherverwaltung kümmern musst, und wenn du VBA.Net nutzt hast du zudem noch die selbe Syntax wie beim Programmieren in Excel.

Für dein Excel-Problem würde ich jetzt Kurzerhand ein Hilfsprogramm schrieben, dass die Werte von TCP in die Regestry schreibt... Keine Ideale Lösung, aber das Excel-VBA ist eben ein bisschen eingeschränkt.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Bernhard Raschke
Beiträge: 656
Registriert: 18.02.2003 18:32:49
Wohnort: 72655 Altdorf

Re: Interaktion mit Zusi

#10 Beitrag von Bernhard Raschke »

Hallo Bono,

darf ich Dich auf diesen Beitrag aufmerksam machen. Ich habe da das Beispielprogramm von Andreas Karg für meine Zwecke umgepfriemelt (umprogrammiert will ich nicht sagen, da ich auch erst anfange, mich in C# einzuarbeiten). Ich kann es zwar (noch) nicht genau erklären, wie die Verwendung der dll von Andreas angegangen werden muss, aber über die Modifikation des beigepackten Beispielprogrammes habe ich meine Balkenanzeige hin bekommen, die du in dem Beitrag sehen kannst. Und auch ich als Nicht- Informatiker habe zwar einige Stunden gebraucht, aber bestimmt keine hunderte. Hilfreich dazu dieses Buch. Mit den darin verwendeten Beispielen geht das.

Ich hoffe halt, mit Visual C# auch ein paar andere Sachen realisieren zu können bzw. falls nötig eher Hilfe im Forum zu bekommen als bei anderen Entwicklungsumgebungen.
Grüssle Bernhard

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#11 Beitrag von Bono »

Danke!
Zwischendurch wollte ich was bringen, um mich nützich zu machen:
Mit nachfolgendem VBACode (den ich in irgendeinem Forum gefunden hatte) kann ich ohne Probleme die Zusi Infos aus der Registry lesen.
Funktioniert bei Start eines Zuges mit dr Fahrplan-Anfangszeit und dann immer, wenn der Zug HÄNDISCH(!) in Bewegung ist, d.h. nicht steht.
Die Infos werden in die Zellen A1 und B10 bis B14 des Blattes "Tabelle1" geschrieben
---------------------------------------------------------------------
Sub Fensterzugriff_Click()
' RegistryLesen

Dim strRC As String

Dim objWSHShell As Object
' Dim objWSHShell As New IWshRuntimeLibrary.IWshShell_Class
On Error GoTo ErrHandler

Sheets("Tabelle1").Activate
Range("A1").Select





Anfang:

Set objWSHShell = CreateObject("WScript.Shell")
strRC = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Zusi\Zusi\SimZeit")
Range("A1").Value = strRC

strRC = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Zusi\Zusi\ZugSteht")
Range("B10").Value = strRC

strRC = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Zusi\Zusi\km")
Range("B11").Value = strRC

strRC = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\Zusi\Zusi\km/h")
Range("B12").Value = strRC
DoEvents ' damit auch andeene Programme arbeiten können
GoTo Anfang

ErrHandler:
RegRead = ""


End Sub

Für das Zeitfeld muss im Excel noch die Funktion
=Rest(A1;100000000)/100000000 angewendet werden - liefert 0,xxxxxx
und das betroffene Feld alxs Zeitfeld (hh:mm:ss) formatiert werden.

Vielleicht kann es irgendjemand brauchen.
saluti Bono

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

Re: Interaktion mit Zusi

#12 Beitrag von Carsten Hölscher »

Die Interaktion über solche Schnittstellen ist ja schon eine deutlich fortgeschrittene Anwendung. Da muss man am Ende auch etwas Kenntnis über die Programmierung erwarten können, sonst kommt man nicht zum Ziel bzw. das Ende der Fahnenstange kommt dann vielleicht ein paar cm später - aber es kommt bestimmt.
Für die Sockets gibt es zumindest bei Delphi fertige Komponenten, die die Umsetzung zumindest für einfache Anwendungen sehr einfach machen. Dazu gibt es auch zahlreiche Einstiegsbeispiele, die eine ganz einfache Server-Client-Verbindung zeigen. Auf der Basis sollte man das eigentlich hinbekommen. Bei Fragen helfen wir hier natürlich.

Carsten

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#13 Beitrag von Bono »

Hallo!
Dank der zahlreichen Hints kann ich über Erfolge berichten:
Der Zugriff auf die Registry klappt jetzt sowohl aus meinen Excel/VBA Programmen als auch aus Delphi Routinen.
Damit greife ich auf folgende Informationen des aktiven (gefahrenen) Zuges zu, die immer dann zur Verfügung stehen, wenn man aktiv fährt (nicht bei Autopilot!) und der Zug nicht steht:

- Zusizeit
- ZugSteht
- Position (Strecken-km)
- Geschwindigkeit

Ich nutze das für folgendes:

A) EXCEL: Streckenspiegel

Streckensiegel ist eine Excel/VBA Anwendung, in der das Streckennetz schematisch dargestellt wird und wo die Züge abhängig von der Uhrzeit am richtigen Ort dargestellt werden.
Basis ist ein in die Excel-Tabellen übertragener Fahrplan. (muss da noch eine Methode finden, wie ich Fahrpläne aus Zusi automatisch übertragen kann. ISt nicht weiter schwer aber eine Hundearbeit).

Bild

Man sieht die Bahnhofs- bzw. Betriebsstellennamen und rot die Züge wobei > und < anzeigen, in welche Richtung sie fahren.

Mit dem Registry Zugriff ist es jetzt möglich, diese Darstellung (es gibt noch eine weitere aus Tfz-Führer Sicht, die anzeigt, was dem eigenen Zug so entgegenkommt),
an die Zusizeit zu hängen.
Die Sache hat aber 2 Haken:
Erstens wird nur die Zeit von Zusi genommen. Ich werde das vielleicht noch erweitern, dass ich auch die Position des aktiven Zuges aus Zusi nehme.
Zweitens gibts ja derzeit (auch wenn ich in Zukunft TCP/IP verwende) keine Informationen über die anderen Züge, so dass man diesbezüglich nur mit den Fahrplaninfos fährt. Aber ich nehme an, das wird ja irgendwann in Zusi3 kommen, sonst kann man ja Stellwerkssimulationen vergessen.

B) Freelance Delphi Türsteuerungsprogramm à la Straßenbahn

Bild

Die Tuersteuerung war bis jetzt ein reiner "Kontrollampen-Simulator" mit angeschlossenm Ansagetool.
Es erlaubt Türen freigeben, Türen werden zufallsgesteuert von Fahrgästen geöffnet und schließen automatisch wieder. Daneben kann man auch Licht einschalten, auf- und abblenden (alles nur Leuchtmelder-Angelegenheit!).
Jetzt, mit den aus der Registry verfügbaren positions- und zustandabhängigen Infos gibts
1.) eine Art elektronisches Zugmeldesystem, dlh. man kann den Zug bis zueiner vorgegebenen Poistion (Strecken-km) freigeben, wenn diese erreicht wird, springt der Leuchtmelder auf rot.
2.) ganz trivial: Man kann die Türen nur freigeben, wenn der Zug steht.

Ich hoffe, ich hab mit diesen Informationen zu ein paar Ideen angeregt.
saluti Bono

Jan
Beiträge: 519
Registriert: 28.11.2007 19:13:51
Wohnort: Stutensee

Re: Interaktion mit Zusi

#14 Beitrag von Jan »

Interessant, lustigerweise hatte ich mir auch mal eine Nachbildung der Türsteuerung unserer Straßenbahnen programmiert. Da die praktischen Einsatzmöglichkeiten aber eher gering waren, und der Quelltext aus der Anfangszeit meiner Programmierei stammt, und damit in Teilen mal ziemlich aufgeräumt werden müsste, staubt das ganze auf der Festplatte vor sich hin:
Bild

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#15 Beitrag von Bono »

Hallo! Jetzt bin ich auf ein weiteres kleines Interaktionsproblem gestoßen:

Für mein (freelance) Zugmeldeverfahren lasse ich mir mit Zusi Befehl (= Ausgabe des entsprechenden .rtf Files) darstellen, bis zu welchem Streckenkilometer die Strecke freigegeben ist.
Um Vertippfehler zu vermeiden, wollte ich den km-Wert einfach durch Kopieren aus dem Textfile und Paste im Delphi-Programm in das entsprechende Eingabefeld stellen.
ABER: Leider wird der .rtf-File mit einer Routine von Zusi ausgegeben (d.h. mir im 3D-Fenster dargestellt), die kein kopieren erlaubt!!

Frage: Kann man das vielleicht irgendwie umgeben, denn es wäre eine sehr einfache und elegante Methode, den richtigen Strecken-km Wert ins Delphiprogramm reinzukriegen ????
saluti Bono

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

Re: Interaktion mit Zusi

#16 Beitrag von Carsten Hölscher »

Wie genau versuchst du denn den Wert zu kopieren?

Carsten

Benutzeravatar
Bono
Beiträge: 202
Registriert: 30.12.2002 07:38:24
Wohnort: Wien

Re: Interaktion mit Zusi

#17 Beitrag von Bono »

Hallo Carsten!

Wenn die Befehlsanzeige (= der .rtf - File) von Zusi in der Mitte meines 3d Fensters angezeigt wird,
gehe ict mit Maus drauf und klicke z.B. die dort stehenden 4 Zeichen km-Angabe an. (z.B: 37.4) Das funktioniert auch und ich sehe, dass eben diese Ziffern markiert sind.
Drücke ich dann Ctrl - um Ctrl-c zum Kopieren aufzurufen, dann verschwindet die Markierung aber sofort.
Wäre interessant, womit Du den File anzeigst - bzw. ob du dort stattdessen auch ein ganz normales Word verwenden könntest......

P.S. - Es wäre vielleicht überhaupt eine Überlegung wert, dass man mit Eintragungen des Befehls- .rtf "etwas anfangen kann", z.B. wenn dort auch ein formatierter Link stehen könnte, der dann aufgerufen wird, wenn man draufklickt. - Dar wäre eine weitere Möglichkeit, dass einem "Zusi etwas PC-verwertbar mitteilen kann". --Aber das ist eine andere Geschichte.
Für mich wäre schon super, wenn man aus dem angezeigten "Befehlsfenster" was kopieren könnte.

Herzlichen Dank im voraus
saluti Bono

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

Re: Interaktion mit Zusi

#18 Beitrag von Carsten Hölscher »

Das Liegt vermutlich daran, dass der Tastendruck von Zusi verarbeitet wird. Geht mit rechter Maustaste kein passendes Kontextmenü auf?

Carsten

Antworten