Nieuws:

Heb je ook al de Stichting 3rail Jaarkalender 2024 besteld? Doe dit dan snel in onze Stichting 3rail Webshop

Java Central Station

Gestart door fransja vrijdag 29 september 2023, 20:18:30

0 leden en 1 gast bekijken dit board.
Java Central Station
Lid sinds: 2019

offline
Java Central Station
Java Central Station

Middels deze wil ik iets delen over een niche in de modelspoor hobby, nl het maken van je eigen automatiserings-software. Het Java Central Station of JCS is het (hobby) project waar ik nu al een paar jaar (met tussen pozen) aan werk. Het project is ooit begonnen om op een groot scherm de informatie van de CS-2 weer te geven maar, zoals vaak in het maken van software gebeurt, heeft ook dit project "last" van "scope creep" ;).

Helaas zijn er niet zoveel "nerds" zoals ik. In de tijd dat ik nu bezig ben heb ik met een aantal Amerikanen gecorrespondeerd (dat is ook leuk) en recentelijk ook met de maker van van Traintastic. Door deze bijdrage op het forum hoop ik anderen te kunnen inspireren, andere "nerds" te vinden, ideeën op te doen en t.z.t. testers te vinden  ;) .

Ieder geval denk ik dat is dit project ook een demonstratie van de breedte van de modelspoor hobby is. Je kan je zelf "uitleven" in tal van richtingen, zowel Creatief als "nerd" en technisch :).

Waarom dan dit project?
Er is namelijk zeer competente treinbesturings software op de markt, sterker nog, mijn baan wordt dm Rocrail bestuurd.

Waarom dan toch zelf iets maken?
  • Omdat het leuk is!
  • Omdat (ik) het heel boeiend vind op precies te begrijpen hoe je een aantal treinen op een baan automatisch kunt besturen.
  • Omdat ik ruim 15 jaar geleden er ook aan was begonnen maar door omstandigheden heb moeten stoppen.
  • Omdat als er weer een stuk(je) werkt en er daadwerkelijk iets gaat rijden dat wel een soort van kik geeft.

Open Source
Ik ben een voorstander van Open source Software, dus heb ik JCS voor iedereen open op Github gezet zie https://github.com/fransjacobs/model-railway/blob/master/README.md

Wat heb is tot nu toe gemaakt?
  • Communicatie met een controller, in mijn geval ondersteun ik de CS2 en 3 van Marklin, simpelweg omdat ik die heb.
  • De Locomotieven en de accessoires kunnen worden uitgelezen en met de hand kunnen Locomotieven, functies en de wissels en seinen worden aangestuurd.
  • De tergmeldingen komen binnen en kunnen worden getoond
  • De schematische plattegrond van het baanplan kan worden getekend.
  • De symbolen (wissels, seinen en melder) kunnen worden gekoppeld met de fysieke wissel, sein en melder, en je kan deze dan bedienen of monitoren (als je op de CS een wissel omzet zie je dat op het scherm en vice versa).
  • De routes van blok naar blok kunnen automatisch worden bepaald.

Wat nog te doen (en er is nog heel veel te doen)
  • Maken van een releases, zodat je zonder development omgeving de software kan laten werken
  • Automatisch rijden (is sneller gezegd en geschreven dan gedaan)
  • Ondersteuning van andere controllers (zodra ik daar de beschikking over kan krijgen).
  • ....

Kortom nog genoeg te doen.

Is deze software al te gebruiken op mijn baan?
Nee, tenzij je ontwikkelaar bent, dan kun je zelf de software bouwen en testen zie https://github.com/fransjacobs/model-railway/blob/master/BUILDING.md

Ik ben voornemens zo nu en dan een update te geven over de vorderingen van dit project, in de hoop wat inspiratie op te doen van eventuele reacties.

Screen shot:
JCS-driver-cab.png

Groeten,

Frans
Verschillen tussen de CS 2 en 3?
Verschillen tussen de CS 2 en 3?

Inmiddels weer een stukje je verder gewerkt aan JCS. Ik heb een z.g. "Driver Cab" scherm gemaakt, waarmee je een locomotief kunt besturen. JCS haalt automatisch de locomotieven op uit het Central Station, en download ook automatisch de bijbehorende plaatjes. Een tekortkoming van de meeste besturings-software is dat de functie koppen meestal de aanduiding F0 tm Fx hebben en dat je zelf deze van "iconen" kan en mag voorzien. In JCS heb ik het idee om de zelfde iconen te gebruiken als op de CS worden getoond te gebruiken.

Hoe werkt dat dan?
Als eerste de locomotieven. In het CS-2 protocol staat beschreven dat je met het commando "Anfordern Config Data" met als variabele het woord "loks" via CAN de "lokomotive.cs2" file in gezipte vorm terug krijgt. Dit werkt op zowel de CS2 als 3 en wordt bv door een Mobile Station gebruikt om de lijst op te vragen. Enfin na wat heen en weer proberen is dit gelukt en krijg ik keurig de file (btw je kunt deze file ook via http opvragen op http://<cs ip adres>/config/lokomotive.cs2).

Het formaat van deze file is wat curieus, maar staat redelijk omschreven in de documentatie, enfin lang verhaal kort ik heb nu een lijst van de locomotieven.

In deze file staat in het veld ".icon" (bv:".icon=RRF 272 001-9") de locomotief afbeelding, die kun je vervolgens downloaden via:
    CS2:  http://<cs2 ip adres>/icons/<icon naam.png>
    CS 3: http://<cs3 ip adres>/app/assets/lok/<icon naam.png>

Zie hier de eerste (kleine) verschillen.

Functies
In de "lokomotive.cs2" staan de functies van iedere locomotief gespecificeerd als:
Citeer.funktionen
 ..nr=0
 ..typ=1
 ..wert=1
 .funktionen
 ..nr=1
 ..typ=4
 ..wert=0
.......

In bovenstaand voorbeeld zijn dat de functies F0 en F1. Het plaatje of icoon van de functie staat verborgen in de velden "typ" en "wert".
"typ" is de aanduiding van het plaatje en "wert" of de functie aan of uit staat.
Als je dit als volgt "vertaald" dan krijg je de URL van het functie icoon op de CS: "FktIcon_<a/i>_<ge/we>_01.png 
a en kleur "ge" als wert is 1 (aktief), i en kleur "we" als wert=0 (inactief) en 01: typ met 1 voorloop 0 plus ".png".
De URL wordt dan http://<cs ip adres>/fcticons/FktIcon_a_ge_01.png.
FktIcon_a_ge_01.png
en
FktIcon_i_we_01.png 

Dit werkt op zowel de CS2 als CS3 voor de meeste "oudere" locomotieven.

Moment functies
Functies die als een moment zijn geconfigureerd kun je herkennen door dat de waarde in veld "typ" groter is dan 128 en kleiner dan 150. Het juiste plaatje vindt je door er 128 eerst vanaf te trekken (...)
function_panel.png


Maar toen
Zo dacht ik, het werkt en voor de meeste van mijn locomotieven klopte het, maar toen kreeg ik eindelijk, na 18 maanden op mijn bestelling te hebben gewacht, de 37298, 1102 RRF G2000 binnen, zie https://forum.3rail.nl/index.php?msg=1517564.

Natuurlijk gelijk aan gemeld op de CS3. De locomotive file opnieuw in JCS ingelezen.
Het locomotief plaatje kwam mee, maar de functies waren een desillusie. Van de 16 waren er maar 4 willekeurig over(...) wat blijkt:
Citeer.funktionen
 ..nr=0
 ..wert=1
 .funktionen
 ..nr=1
 ..wert=0
 .funktionen
 ..nr=2
 ..wert=0
 .funktionen
 ..nr=3
 ..wert=0
Er is geen "typ" veld(!) meer. Maar op de CS3 worden gewoon de plaatjes getoond...

Enfin verder gezocht en wat blijkt, de CS3 gebruikt intern een JSON file voor de locomotieven en plaatjes. zie http://<cs3 ip adres>/app/api/loks/
Daar staat (ongedocumenteerd) :
Citeer{
    "name": "1102 RRF G2000",
    "internname": "1102#20RRF#20G2000",
    "uid": "0x4017",
    "tachomax": 140,
    "symbol": 1,
    "dectyp": "mfx+",
    "icon": "/usr/local/cs3/lokicons/RRF 272 001-9",
    "dir": 0,
    "speed": 0,
    "recent": 179,
    "funktionen": [
      {
        "nr": 0,
        "typ": 0,
        "fs": 0,
        "typ2": 1,
        "dauer": 0,
        "state": 1,
        "isMoment": false,
        "icon": "fkticon_a_001"
      },
      {
        "nr": 1,
        "typ": 0,
        "fs": 0,
        "typ2": 48,
        "dauer": 0,
        "state": 0,
        "isMoment": false,
        "icon": "fkticon_i_048"
      },.....

Kennelijk zijn er dus velden bij gekomen (type2, dauer, state en isMoment). Dankje wel Marklin.

Uiteindelijk is dit veel beter, daar er nu duidelijk is of het een momentele functie betreft of niet. Het functie icoon verwijst naar een ander JSON bestand op de CS3, waar alle functies als SVG zijn opgeslagen (http://<cs3 ip adres>/images/svgSprites/fcticons.json).

Uiteindelijk dit nu ook toegevoegd in JCS en afhankelijk of er een CS2 of 3 wordt herkend gebruikt JCS de ene of de andere methodiek.

Oproep
Nu ben ik erg benieuwd wat er precies gebeurt als je de lok op een CS2 aanmeld. Mijn eigen CS2 is de H brug kapot, dus kan geen Locomotieven meer inlezen. Als iemand op dit forum beschikt over een werkende CS2 en toevallig ook de 37298, 1102 RRF G2000, heeft ben ik zeer geïnteresseerd in hoe de lok file er uitziet, met name de functies.

Eind resultaat
Is te zien in mijn vorige post
Inmiddels nu ook spulletjes voor het fabriceren van een DCC-EX binnen gekregen, zodat ik support hiervoor kan toevoegen.

Groeten,
Frans
Tegeltjes wijsheid of...
Lid sinds: 2019

offline
Tegeltjes wijsheid of...
Tegeltjes wijsheid of...

Het spoorplan de, schematische, weergave van de layout, is bij software voor modelspoor automatisering een van de belangrijkste functionaliteiten. Er zijn meerdere mogelijkheden dit te doen maar in JCS heb ik er voor gekozen dit te implementeren met tegels (tiles).

Als eerste heb ik een raster gedefinieerd van vierkantjes van 40 x 40 pixels. Een stukje rails, wissel etc, moet dus hier binnen passen. Er zijn op dit moment 2 uitzonderingen op deze regel nl een blok en een kruiswissel. Tot op heden is dit mijn tegel verzameling ;):
  • Straight, of tewel rechte rails
  • Curved, gebogen rails in de tekening eigenlijk diagonaal
  • Sensor, melder
  • End, "stop blok"
  • Signal, sein
  • Switch, wissel
  • Cross, kruiswissel
  • Block, blok
  • Crossing, ongelijkvloerse kruising
Er zijn natuurlijk meer mogelijke symbolen te bedenken, maar dat is meer voor de toekomst. Met bovenstaande symbolen kan ik mijn huidige baan schematisch weergeven.

Maar goed, na een poosje werken en proberen is JCS nu instaat symbolen op een zg canvas plaatsen, deze te verschuiven, draaien, verplaatsen, enz.
Nu gaat het echt op een (schematische) plattegrond van de baan lijken. Volgende stap is dat de plattegrond automatische getraceerd (or gerouteerd) kan worden, maar voor dat dat kan
is het nodig om "tegels" een richting mee tegeven, overigens is dat ook nodig om de plattegrond te kunne opslaan.

Een rechte rails kan op 2 manieren worden geplaatst, horizontaal en verticaal, een "Ronde" rails kan op 4 manieren worden geplaatst.

ronde_rails.png

Kortom ik heb iedere tegel een Oriëntatie gegeven, Noord, Oost, West en Zuid. De default is Oost.

Vervolgens het tekenen van een Tegel, Om toch enige details te kunnen laten zien wordt iedere tegel 10 zo groot getekend nl 400x400 pixels.
Als voorbeeld een uitrij sein:

uitrijsein_400.png

Uiteindelijk komt het dan zo in de plattegrond:

alle_seinen.png

Als alle plaatjes die op een plattegrond staan stuk voor stuk getekend en verkleind moeten worden zou dit mogelijk (te) veel computer power vragen, dus iedere tegel type wordt maar 1 keer getekend en vervolgens wordt van de tekening een image gemaakt die een cache (geheugen) wordt geplaatst voor hergebruik, zodat de GUI responsief blijft werken en er niet te veel computer power wordt gevraagd (JCS werkt zelfs op een Raspberry Pi 4).
In teken mode ziet het er uiteindelijk dan zo uit.

simple_baan.png

Een blok is een een speciaal geval. Het is de plaats, waar een trein in kan staan. Een blok heeft daarom een richtingsindicatie nodig. Hiervoor heb ik een beetje gekeken naar Rocrail waar dit met een Plus en Min wordt aangegeven. Als er een lezer is met een beter idee hou ik mij aanbevolen ;)

Tot zover deze bijdrage, heb zojuist de spulletjes binnen gekregen om een DCC-EX Command Station te kunnen maken. Dus in de nabije toekomst kan JCS die ondersteunen, naast dat het gewoon leuk is om een met een andere (zeer betaalbare) "centrale" te spelen :).

Groeten,

Frans
DCC-EX support
Lid sinds: 2019

offline
DCC-EX support
Hallo,

In eerste instantie is de JCS software gemaakt met als enige hardware onder steuning the Marklin Cs 2 en 3, omdat ik die zelf heb. Recentelijk alle onderdelen aangeschaft om een DCC-EX command station/ centrale te bouwen, voornamelijk om te zien wat dit nu kan (en omdat het leuk is).
JCS moest dit dus (van mij) ook kunnen ondersteunen en dit bleek gelijk een goede les (zeker als ik nog meer hardware ondersteuning in wil bouwen).
Ik moet dus het e.e.a refactoren (her-organizeeren) om überhaupt een ander centrale te kunnen ondersteunen.
Een van de belangrijkste dingen bij het ondersteunen van meerder centrales is het definiëren van een universele centrale (interface). Die heb ik nu min of meer gemaakt, zodat ik beide kan ondersteunen (is een eerste versie zal vast nog wel veranderen). 

Het protocol van de DCC-EX centrale is redelijk simpel, zeker in vergelijking met de Marklin CAN bus. DCC-EX kan zowel over het netwerk (omdat ik een netwerk shield erbij heb gekocht) als via de seriële poort communiceren (nieuw voor JCS) .
dcc-ex.jpeg

Het DCC-EX protocol werkt volledig asynchroon, in tegenstelling tot bv het Marklin CAN protocol dat op ieder bericht een response geeft. Dus ik moest in de afhandeling van commando's het e.e.a veranderen, zodat beide kunnen werken.
DCC-EX geeft net als bij Maklin CAN een "broadcast" (echo) van ieder commando dat op de centrale wordt ontvangen, zodat je met meerdere clients aan een DCC-EX centrale verbonden kan zijn (ieder geval via het netwerk ;))
JCS reageert hier dus op, als je bv via een andere Throttle applicatie de locomotief aanstuurd zal je op JCS ook zien dat die locomotief wordt aangestuurd.

Als eerste ben ik begonnen met een nieuw configuratie scherm zodat je een ander centrale kan selecteren
commandStationSelection.png

Het zelf bouwen van dingen gaat natuurlijk altijd met up's en down's en na ongeveer 3 a 4 weken puzzelen had ik mijn "eureka moment"! (vandaar nu deze post ;))
Ik kon voor het eerst een Locomotief via JCS en DCC-EX laten rijden :)

driverCabPlusCurrent.png

Ook het meten van de rail stroom heb ik geïmplementeerd, daar ik dit ook al voor de Marklin CS 2/3 heb gedaan.

De implementatie van de DCC-EX centrale vordert gestaag, maar moet nog een hoop doen voor dat die net zover is als de Marklin implementatie ;) zoals:
  • Toevoegen van accesoires (wissels/seinen)
  • Toevoegen melders
  • Het kunnen instellen van Locomotieven
  • Via de Serieele poort
  • ...

Enfin tot zover de vorderingen.

Groet,

Frans





 
Re: Java Central Station
Lid sinds: 2009

offline
Re: Java Central Station
Hallo,

Allereerst bedankt dat je de moeite neemt ons mee te nemen in het ontwikkeltraject. Het ziet er in ieder geval super uit! Lijkt me erg leuk om de applicatie eens te bouwen op mijn Mac.

CiteerOproep
Nu ben ik erg benieuwd wat er precies gebeurt als je de lok op een CS2 aanmeld. Mijn eigen CS2 is de H brug kapot, dus kan geen Locomotieven meer inlezen. Als iemand op dit forum beschikt over een werkende CS2 en toevallig ook de 37298, 1102 RRF G2000, heeft ben ik zeer geïnteresseerd in hoe de lok file er uitziet, met name de functies.

Vanmiddag bij een ander lid ("Piet") op bezoek geweest om dit eens uit te proberen. Helaas bleek hij wel over uiterlijk dezelfde loc te beschikken maar i.p.v. 1102 het nummer 1101 aan de zijkant te hebben staan. Het betreft artikelcode 37202 (RRF 1101 G2000) maar wel vergelijkbare specificatie's. Zijn CS2 is een 60215 met software versie 4.3.0 (11). Bij het opvragen van "lokomotive.cs2" worden de F0-F15 functie's (i.p.v. de 19) getoond, inclusief "typ" en "wert" waarden.

Citeer.funktionen
 ..nr=0
 ..typ=1
 ..wert=1
 .funktionen
 ..nr=1
 ..typ=48
 .funktionen
 ..nr=2
 ..typ=23
 .funktionen
 ..nr=3
 ..typ=10
 .funktionen
 ..nr=4
 ..typ=48
 .funktionen
 ..nr=5
 ..typ=20
 .funktionen
 ..nr=6
 ..typ=41
 .funktionen
 ..nr=7
 ..typ=10
 .funktionen
 ..nr=8
 ..typ=42
 .funktionen
 ..nr=9
 ..typ=18
 .funktionen
 ..nr=10
 ..typ=236
 .funktionen
 ..nr=11
 ..typ=43
 .funktionen
 ..nr=12
 ..typ=19
 .funktionen
 ..nr=13
 ..typ=220
 .funktionen
 ..nr=14
 ..typ=172
 .funktionen
 ..nr=15
 ..typ=112

Hopelijk heb je hier iets aan.

Groet,

Peter

Marklin Bug of...
Lid sinds: 2019

offline
Marklin Bug of...
Hallo allemaal,

Als eerste dank voor de reacties, @Boldor dank voor de lokomotive.cs file.
Helaas is het probleem dus niet bij deze locomotief te zien, gezien het feit dat velden "typ" en "nr" er zijn.

Recentelijk heb ik mijn Mobile station WLAN mogen ontvangen en deze geconfigureerd en aangesloten op mijn CS 3.
Nadat de locomotieven zijn geladen kun je deze nu draadloos besturen.
Wat ik zelf een enorm handig ding vindt is de "paddestoel" (geen idee hoe dat heet) achterop, zodat je hem in 1 hand kan houden en besturen.

Een paar weken geleden schreef ik over het ophalen van de functies van een locomotief via de CS 2/3 en de verschillen.
En wat scherts mijn verbazing bij het selecteren van de 37298, 1102 RRF G2000 in de MS WLAN geen functies! (of althans maar 4 van de 20).
 
De 1102 RRF G2000 functies in de CS 3
IMG_5406.jpeg

Functies 0-7 in de MS WLAN. Alleen dus F7
IMG_5404.jpeg

Functies 8-15 in de MS WLAN. Alleen F10, F13 en F14
IMG_5405.jpeg
 
Kortom de MS WLAN gebruikt kennelijk op de achtergrond ook de "lokomotives.cs2" file en heeft dus "last" van deze bug.
Geen idee waar je dit bij Marklin kan melden, maar het is ieder geval curieus....


Groeten,

Frans
Re: Java Central Station
Lid sinds: 2007

Windhoven

offline
Re: Java Central Station
Bij mij op een MS2 met 3.1xx versie heeft deze loc wel gewoon alle functies.
Re: Java Central Station
Lid sinds: 2023

offline
Re: Java Central Station
Wat een leuk project. Ik programmeer zelf voornamelijk in Python, maar ook niet helemaal onbekend met Java. Uiteraard ben ik groot voorstander van open software.
Terug naar de teken tafel
Lid sinds: 2019

offline
Terug naar de teken tafel
Hallo,

Alweer enkele weken geleden dat ik iets het gepost, soms gaat de tijd vreselijk snel (...).
Alle lezers/volges ieder geval dank voor de reacties die ik zo af en toe krijg  :)

Ik had het DCC-EX stuk voor het "Command en Control" stuk min of meer ingebouwd, maar bleef ik het idee houden dat het niet helemaal goed zat.
Natuurlijk, de individuele commando's werkten, maar de hele integratie voelde toch niet goed.
Kortom ik loop met het idee in het achterhoofd dat ik in JCS misschien ook andere centrales wil kunnen ondersteunen (al moet ik daar dan wel de beschikking over hebben).

Ik het het tot nu toe alles gebouwd gebaseerd op een Marklin CS-3 dat een redelijk uitgebreide functie set heeft. Bij de implementatie DCC-EX kwam ik er achter dat die welles waar de hoofd zaken kan, maar bv specifieke dingen als het kunnen downloaden van een lok plaatje oid vanuit de centrale niet ondersteund.

Ik ben een rond gaan kijken om het ontwerp te voorzien van een "centrale HAL" (Hardware Abstraction Layer) m.a.w. een laag die op functioneel iedere centrale zou kunnen zijn.
Ik kom tot nu toe op de volgende functionaliteiten (na enig rond kijken):

  • Verbinding met de centrale, serieel, via netwerk etc
  • Command en Control, aansturen van locomotieven en accessoires (met verschillende protocollen denk aan MM,DCC,MFX, SX etc).
  • Feedback, het kunnen uitlezen van sensoren (melders) via een of andere bus (S88, loconet etc.).
  • Opvragen van de in de centrale bekende locomotieven (roster?)
  • Opvragen van de in de centrale bekende accessoires (Wissels, seinen)
  • Opvragen van de locomotief afbeeldingen
  • Opvragen van de locomotief functies en afbeeldingen
  • Manueel kunnen opvoeren van locomotieven met evt plaatje
  • Manueel kunnen opvoeren van locomotief functies met evt plaatje
  • Manueel kunnen opvoeren van accessoires (wissels en seinen)
  • Manueel kunnen opvoeren van melders

Zie ik nog iets over het hoofd?

Ik ben ieder geval met een prototype begonnen van een Centrale keuze scherm die toont welke functionaliteiten een centrale heeft zodat de software weet of iets kan of niet kan.

commandStationScreen.png

Enfin dus een stapje terug om het uiteindelijk beter te krijgen.

Groet,

Frans