Frage zum Plugin-Wiki und Grundsätzliches

Für Fragen zu Plugins und zur Plugin-Entwicklung.

Moderatoren: Stellwerk-Admin, Moderatoren

Antworten
Kohletender
Beiträge: 261
Registriert: Do Sep 08, 2016 11:31 am
StiTz: 733413

Frage zum Plugin-Wiki und Grundsätzliches

Beitrag von Kohletender »

Servus zusammen. Wäre es möglich das Wiki bezüglich der Pluginsprogrammierung wirklich "anfängergerecht" zu formulieren? Ehrlich gesagt sehe ich da nicht wirklich durch, wie ich jetzt was nutzen muss um das umzusetzen was ich speziell will. Es ist zwar in den FAQs "wand" usw. aufgeführt, aber warum, weshabl der code genutzt wird, wird leider nicht erläutert, ebenso nicht, ob der "wand-code" grundsätzlich genutzt werden muss, damit man ein Plugin mit GUI schreiben kann. Ich vermisse eine Erläuterung, welche Klassen und Parameter grundsätzlich zur Verfügung stehen und welche man individuell selbst erstellen kann und wie genau man die Rückgabewerte dann in einer Variablen mit welcher Syntax genutzt werden können. Nicht jeder ist IT-ler und ausgebildeter Java-Programmierer und offenbar wird bezüglich des Wikis schon von vorne herein ein gewisses Level für Java-Programmierung vorausgesetzt, was ich persönlich schade finde.

Ich nutze z.B. gerne das Analyse-Plugin doch leider ist der Urheber offenbar nicht mehr aktiv und das Plugin weist ein paar Schwächen auf, nach meinem Geschmack, dies würde ich gerne verbessern:

z.B. dass Verspätungen in Abhängigkeit ob ein Nachbarstellwerk besetzt ist oder nicht erfasst und gesondert gehandelt werden, ebenso was Lokwechsel, Kuppeln / Flügeln usw. anbelangt, wenn z.b. ein Zugteil auf das Kuppeln warten muss, aber der Zug vom System her Verspätung hat, dies eben nicht als "eigene" Verspätung gerechnet wird, auch nicht bei der Übergabe zu einem Nachbarstellwerk sondern wirklich nur die echten Verspätungen, die man selbst verursacht. Also erst z.B. wenn man den Zug noch 30 minuten stehen lässt, nachdem er mit schon + 100 gekuppelt hat wobei die 100 systembedingt waren. Dann sollte es so sein, dass die 100 minuten als Systembedingt gelten und nur die 30 Minuten als "eigene Verspätung" aufgeführt werden.

Dann noch eine Frage zum "sender"-Tag bezüglich der an die Schnittstelle zu übergebenden Zeit? Wie bekommt man den entsprechenden Wert? Gibt man da irgendwas ein? Das geht leider im Wiki auch nicht hervor.
Interpret
Beiträge: 128
Registriert: Mo Jul 07, 2008 3:31 pm
StiTz: 707602

Re: Frage zum Plugin-Wiki und Grundsätzliches

Beitrag von Interpret »

Hallo kohletender,

diejenigen, die das Handbuch schreiben, müssen irgendwo eine Grenze ziehen. Ein Programmierkurs würde, verständlicherweise den Rahmen sprengen.

Alles was folgt, steht quasi im Handbuch, aber verleicht wird es mit einer anderen Darstellung verständlicher.
  • Plugins kannst du in jeder Programmiersprache erstellen
  • Damit eine Kommunikation zwischen Plugin und StS stattfindet, muss sich das Plugin per TCP-Verbindung auf Port 3691 verbinden.
  • Auf dem Port läuft solange die Pluginschnittstelle aktiv ist, die Kommunikation ausschließlich per XML ab
  • Diese Kommunikation ist für Java-Programmierer bereits vorgefertigt in der stspluginslib.jar. Für alle anderen Programmiersprachen musst du diese XML Kommunikation selber programmieren. Theoretisch könntest du ein Plugin auch mit Skriptsprachen erstellen.
  • Die Spezifikation der stspluginslib.jar Bibliothek ist im Handbuch https://doku.stellwerksim.de/lib/exe/fe ... insdoc.zip zu finden, die Bibltiothek selber https://doku.stellwerksim.de/lib/exe/fe ... ib.jar.zip
Falls du die Bibltiothek verwendest gilt
Handbuch hat geschrieben: Für den Plugin-Entwickler ist das primär die Klasse js.java.stspluginlib.PluginClient. Von dieser muss er sein Plugin ableiten und die nötigen Methoden implementieren.

Diese Methoden entsprechen den XML-Antworten, jedoch fertig aufbereitet. Es existieren bereits fertige Methoden, um die entsprechenden XML-Anfragen an den Sim zu schicken. Nutzt man diese Klasse, kommt man mit XML und der Netzwerkverbindung so gut wie gar nicht in Kontakt.
Ein paar deiner Fragen sollten damit beantwortet sein.
Ehrlich gesagt sehe ich da nicht wirklich durch, wie ich jetzt was nutzen muss um das umzusetzen was ich speziell will. Es ist zwar in den FAQs "wand" usw. aufgeführt, aber warum, weshabl der code genutzt wird, wird leider nicht erläutert, ebenso nicht, ob der "wand-code" grundsätzlich genutzt werden muss, damit man ein Plugin mit GUI schreiben kann.
Du musst nichts benutzen, aber ggf. dann Arbeit erledigen, die bereits jemand vor dir erledigt hat.
Ich vermisse eine Erläuterung, welche Klassen und Parameter grundsätzlich zur Verfügung stehen und welche man individuell selbst erstellen kann und wie genau man die Rückgabewerte dann in einer Variablen mit welcher Syntax genutzt werden können.
Siehe oben, ohne der java-Bibliothek ausschließlich XML, Spezifikation des XML https://doku.stellwerksim.de/doku.php?i ... zifikation
Dann noch eine Frage zum "sender"-Tag bezüglich der an die Schnittstelle zu übergebenden Zeit? Wie bekommt man den entsprechenden Wert? Gibt man da irgendwas ein? Das geht leider im Wiki auch nicht hervor.
Zwischen Abschicken deiner Anfrage "Wie spät ist es?" und der Antwort vergeht ein bisschen Zeit.

Code: Alles auswählen

Zeit läuft im Diagramm von oben nach unten

PLUGIN                         STS

"Wie spät?" --
                      ----
                           ---- "Jetzt ist es xx:xx Uhr"         ---
                      ----                                      yy Sekunden
"Vor yy Sekunden war es "xx:xx Uhr"                              ---
Damit du die yy Sekunden bestimmen kannst, schaust du wenn du die Frage stellst auf die Uhr - Uhrzeit sender. Wenn die Antwort kommt was du aus

Code: Alles auswählen

(jetzt - sender) / 2 = xx:xx Uhr
den halbwegs exakten Zeitpunkt zudem es xx:xx Uhr war berechnen. Je nach Programmiersprache ist der Zugriff auf die aktuelle Zeit unterschiedlich - daher ist im Handbuch nicht beschrieben, wie das geht. Für java wird dazu in der Regel

Code: Alles auswählen

System.currentTimeMillis()
verwendet. Damit bekommst die Millsekunden seit 1. Januar 1970 00:00:00 UTC. Dieses Datum sollte eigentlich egal sein, da du meistens eh nur an den Differenzen zwischen 2 Zeitpunkten interessiert bist.
Wenn dir die Genauigkeit egal ist (idR. wenn beides auf den selber Rechner läuft, dann hast du - hoffentlich - Verzögerungen im Millsekunden Bereich), kannst irgendwas als Wert nehmen, dieser Wert dient nur als "Merkhilfe", um den Zeitpunkt des Absendens deiner Frage "Wie spät ist es" zu wissen. In der Netzwerktechnik könnte man die Differenz aus jetzt und sender auch als RTT bezeichnen, umgangsprachlich auch Ping genannt.

Ich hoffe, dass wenigstens ein paar deiner Fragen beantwortet sind. Wenn du noch weitere Fragen hast, wäre es hilfreich wenn du uns sagen kannst, wie dein Wissenstand ist. Kannst du mit den Begriffen der OOP - Objekt Orientierte Programmierung (v.a. Vererbung, Sichtbarkeit / Kapselung, abstrakte Klassen) was anfangen?
Kohletender
Beiträge: 261
Registriert: Do Sep 08, 2016 11:31 am
StiTz: 733413

Re: Frage zum Plugin-Wiki und Grundsätzliches

Beitrag von Kohletender »

Servus Interpret.

Erstmal danke für Deine Ausführliche Antwort. In Java bzw. XML hab ich bisher noch nichts gemacht. Es geht erstmal um den Grundgedanken und wie der sich am besten umsetzen lässt.
Evtl. hab ich wegen der FAQs einen gedanklichen Fehler gehabt, denn ich hatte angenommen, dass die in den FAQs aufgeführten Konstrukte wie "wand" (für eine GUI) etc. generell als Basis für andere Plugins dienen und man den entsprechenden Code dann um das ergänzt, was man selber erstellen möchte. Sorry, falls ich mich da ein wenig umständlich ausgedrückt haben sollte.
manuel3108
Beiträge: 130
Registriert: Mi Jul 16, 2014 10:46 am
StiTz: 726235

Re: Frage zum Plugin-Wiki und Grundsätzliches

Beitrag von manuel3108 »

Hi Kohletender,

ich sehe das ganze zwar erst relativ spät, dennoch wollte ich mich einmal dazu äußern. Ich sehe das änlich wie Interpret, dass eine zu ausführlich Version der Dok erfahrenen Entwicklern auch keinen Spaß bereiten würde.

Ich persönlich hatte auch ein Problem mit der stspluginslib.jar. Zusätzlich fand ich den Code der "Wand" sehr unübersichtlich und hatte mich dazu entschieden, die XML-Kommunikation selbst in die Hand zu nehmen. Dabei hat mir in einer späteren Version @Interpret auch ein bisschen Code zur Verfügung gestellt.

Worauf ich hinaus will: Schaue dir mal meinen Code an, vielleicht hilft er dir und vielleicht kannst du dir aus beiden herangehensweisen deine eigene finden. Den Code zu meinem Plugin findest du hier: https://github.com/manuel3108/Gleisbelegung bzw. den Code zur Plugin-Schnittstelle und alle dazugehörigen Daten-Klassen findest du hier https://github.com/manuel3108/Gleisbele ... legung/lib

Falls du noch irgendwie Hilfe brauchst oder Fragen hast, sage auf jeden Fall Bescheid, ich werde versuchen dir zu helfen.

Manuel
Autor des Plugins Gleisbelegung
Forenbeitrag: Forum
Plugin-Webseite: Webseite
Kohletender
Beiträge: 261
Registriert: Do Sep 08, 2016 11:31 am
StiTz: 733413

Re: Frage zum Plugin-Wiki und Grundsätzliches

Beitrag von Kohletender »

Hallo Manuel,

Danke für die Links. Werd sie mir bei Gelegenheit zu Gemüte führen.
Antworten