Nieuws:

Heb je vragen over de werking van het Stichting 3rail Forum? Krijg deze beantwoord in de Forumtips.

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

     
Java Central Station de HAL
Lid sinds: 2019

offline
Java Central Station de HAL
Het is alweer enkele weken geleden dat ik melde dat ik terug naar de tekentafel moest met het ontwerp van JCS.
Het bleek dat ik de programmatuur teveel op de CSen van Marklin had gebaseerd en dat het toevoegen van de, relatief eenvoudige, DCC-EX centrale toch lastiger was dan gedacht.

Dus heb ik de stoute schoenen aangetrokken on het ontwerp zodanig te wijzigen dat het mogelijk is om in de toekomst andere hardware toe te voegen (zou zelf graag een naar de ESU ECOS kijken, maar die heb ik helaas niet, maar als ik er een kan lenen voor een tijdje hou ik me aanbevolen :) ).

Daarvoor heb ik nu een zogenaamde Hardware Abstraction Layer gemaakt in JCS.
Ik heb een "hardware centrale" in de volgende (min of meer) losse delen (functionaliteiten) opgeknipt:

  • Decoder controller; de hardware die het digitale signaal op de rails zet. hier zitten bv de de functies om de locomotieven te besturen. Hier kan er maar 1 van zijn.
  • Accessoire controller; kan accessoires schakelen, denk hierbij aan wissels, seinen, verlichting, etc. Er kunnen er meer dan 1 zijn.
  • Feedback controller; "luistert" naar terugmeldingen, er kunnen er meer dan 1 van zijn.

Het kan natuurlijk zo zijn dat de aangesloten centrale al deze 3 controllers functioneel implementeert, maar dat hoeft dus niet.

Een centrale kan worden aangesloten via een seriale (USB) of een netwerk verbinding.
Dan kan een controller nog speciale "capaciteiten" ondersteunen, denk hierbij aan bv het downloaden van locomotief afbeeldingen synchroniseren van accessoires, stroom metingen van de rails, etc.
 
Kortom dit alles kan worden ingesteld op een configuratie scherm van de ondersteunde centrales (nu Marklin CS en DCC-EX).
CommandStationDialog.png

 
Omdat er nu ook centrales kunnen worden gebruikt waar uit je niet de locomotieven en accessoires uit kan importeren moest ik daar dus nieuwe invoer schermen voor maken zodat je dus locomotieven kan importeren uit de centrale of manueel kan invoeren.
LocomotivePrefsMarklin.png

Dit ook gemaakt voor de accessoires.
AccessoryPrefs.png

 
Ik had al een zg driver cab of throttle scherm gemaakt (zie vorige post) hier is nu ook een accessoire keyboard aan toegevoegd.
AccessoryKeyboard.png 

Kortom gestage vorderingen, ben nu bezig met het terug meld gedeelte.
Voor de DCC-EX centrale moet ik nog uitzoeken hoe ik dit precies hardware-matig ga aanpakken met bv een S88 ingang.
Voor de CS-2 werkt het al min of meer, voor de CS3 moet ik sinds de update naar software versie 2.5.1 het e.e.a. uitzoeken (lees reverse engineeren) daar die niet meer werkt zoals in de documentatie staat.

Groet,
Frans

 
 

Re: Java Central Station
Lid sinds: 2009

offline
Re: Java Central Station
Ik heb de huidige github versie al een tijd op mijn Macje staan (volgens je installatie beschrijving). En gekeken of ik iets i.c.m. met mijn ESU ECOS kon doen. Het begint b.v. al met het automatisch zoeken naar de Centrale die natuurlijk de ECOS niet vindt (er is wel trouwens een andere manier). Ik ben Java niet machtig maar begrijp je code wel en het is leuk om te lezen. Na het lezen van je verhaal hier, denk ik dat je aanpak de juiste is en ben benieuwd of je die ook op GitHub zet. Overigens ziet het er erg verzorgt en overzichtelijk uit.
(Op GitHub is trouwens Christian Benjamin Ries "RailEssentials" bezig met software voor de ECOS)

Succes met het project!

Groet,

Peter
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hi Peter,

Leuk om te horen dat je probeert eea te testen. Dank voor de complimenten.

Natuurlijk staat al deze nieuwe code op github, het staat in een aparte branch daar het DCC-EX stuk nog niet af is.

Je kun het hier vinden: https://github.com/fransjacobs/model-railway/tree/35-add-support-for-dcc-ex

Ik heb het boek van Christian Benjamin Ries besteld en inderdaad naar zijn project gekeken, of ik daar e.e.a. van kan leren.

Groet,

Frans
Java Central Station maken test baan
Hallo,

Afgelopen weken verder gewerkt aan mijn software project, of toch niet. Ik kom nu in een stadium dat ik "echt" locomotieven kan laten rijden van uit de software. Echter het is nog niet zover dat ik dat op m'n baan kan doen, vandaar dat ik ben begonnen met de constructie van een test baantje. Hiervoor diep in de berging gedoken om eea aan oude M rails op te halen.
testbaan.png

Voor de besturing wordt de DCC-EX gebruikt, maar omdat ik ook terugmelders nodig heb en dat, in eerste instantie, het lieft op S88 basis wilde doen, die ik nog had liggen ;).
Heb ik, geïnspireerd door het filmpje van @AlbertG, een HSI-S88 gemaakt.

hsi-s88.png

DCC-EX

dcc-ex.png

Komende tijd het HSI 88 protocol toevoegen aan JCS, dat nu "soepeler" moet gaan daar er een HAL is, dus gelijk een goede test ;).

Testbaantje opgebouwd, en opgepoetst(!) zie hier de test opstelling.
testbaanproto_l.png

Het moet nog op een plank worden geschroefd en de bedrading natuurlijk een beetje netter, maar het eea werkt nu.
Ik kan met 2 kleine locomotieven heen en weer rijden :)

testbaanproto_r.png

De (code) vorderingen zijn te volgen op github, maar kan niet beloven dat het altijd werkt ;)

Groet,

Frans

 
Re: Java Central Station
Hoi Frans,
Leuk te lezen dat ik je heb kunnen inspireren tot het bouwen van een HSI88 interface.
Ik zou je software wel een keer willen testen op mijn DCC-EX testbaan maar ik begrijp uit je verhaal dat ik dan zelf een werkende versie moet creëren uit jouw broncode. Klopt dat?
Re: Java Central Station
Ziet er goed uit :thumbup:
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hoi @AlbertG,

Dat klopt, ik ben nog niet zover dat ik deze software als kant en klare "app" klaar heb om te kunnen downloaden.
Dit is wel de bedoeling in de (nabije) toekomst.

Mijn planning is om een eerste versie klaar te maken, zodra het hele stuk met de DCC-EX en HSI S88 goed werkt.

In de tussentijd staat het natuurlijk iedereen vrij het zelf te compileren zie https://github.com/fransjacobs/model-railway/blob/15-automatic-control/BUILDING.md hoe dit te doen.

Groet,

Frans

Testers gezocht!
Lid sinds: 2019

offline
Testers gezocht!
Testers gezocht!
Met gepaste trots ben ik eindelijk zover gekomen dat ik denk dat het project min of meer bruikbaar is.
Zeker als een Throttle voor DCC-EX.

Wat kan er nu mee:
  • Throttle voor DCC-EX, via de schermen kun je (DCC) locomotieven besturen.
  • Bedienen Wissels en Seinen.
  • Tekenen en tonen Spoorplan.
  • Tonen van Sensor status en bedienen van Wissels via Spoorplan.

Voor terug meldingen heb je een losse HSI-S88 nodig. JCS ondersteund nog niet de Feedback van DCC-EX centrale zelf.

Ik heb een geprobeerd JCS vanaf de download te configureren op een "schone" windows PC.
Daar kwamen nog wel de nodige foutje mee aan het licht, dus dat was een hele goede test ;)

Uiteindelijk heb ik mijn test baan hier in geconfigureerd.
Ik kan in met 2 locomotieven rijden, de 2 wissels bedienen en 8 sensors zien.

De DCC-EX en de HSI-S88 zijn via de seriele poort verbonden met de computer.

view-sensor-and-turnout-status.png 

Ik denk niet dat alle issues er al uit zijn vandaar dat dit dan ook versie 0.0.1 is.
Jullie hulp met testen en of suggesties worden op prijs gesteld!

De files zijn te hier te downloaden
Er is een zip file voor Windows, Max en Linux.
De source code staat hier.

Ik ben ook begonnen met het maken van documentatie. Dat is een hele klus!
Een begin is hier te vinden.
Let op: Niet alles is al beschreven (...).

Om de software te kunnen draaien is een JDK of JRE versie 21 benodigd, hier is uitgelegd dit gaat.

De eerste stappen met JCS staan hier beschreven.

:important: Letop dit is Werk in Uitvoering dus voortschrijdend inzicht kan van toepassing zijn :)

Voor mensen met een Github account [kun je me gelijk een Star geven ;)] kan je hier issues maken

Voor degenen die willen testen alvast bedankt!

Groet,

Frans
Re: Java Central Station
Hoi Frans,
Super dat je zo ver gekomen bent.
Die HSI88 komt me bekend voor ;)
Ik ga een kleine demobaan bouwen met 1 recht wissel en een engels wissel. Er moeten 2 analoge locomotieven kunnen rijden. De centrale wordt DCC-EX natuurlijk.
Ik ga je software proberen maar ik ben van plan de bezetmelding met Hall sensoren te doen. Dat zit er bij jou dus nog niet in, maar rijden en wissels bedienen vind ik ook al heel mooi.
Kan even duren voor ik zover ben. Ik houd je op de hoogte.
JCS de Tom Tom functie om rijwegen te maken
Hallo allemaal,

Als eerste dank voor de reacties op de eerst release. Aan een 2 update wordt gewerkt.
Het is erg leuk om te zien dat dit opensource project dat op github staat wereldwijd door mensen mensen als inspiratie en als throttle voor DCC-EX wordt getest/gebruikt (en als je een github account hebt geef een ster ;) ).

Een aantal maanden geleden had ik al iets verteld hoe de layout in JCS wordt getekend, nl met "tegeltjes".
Een "tegeltje" representeert een stuk rails. Dit kan een gewone rechte rails zijn, een bocht, een wissel, een kruising, een blok, etc.

Om automatisch te kunnen rijden moet een trein dus "weten" hoe die van A naar B komt, m.a.w de route. Kortom er moet een soort van "Tom Tom" functionaliteit zijn die de plattegrond kan "lezen".
Ik heb hier voor een Router gemaakt. Deze router vertaald als eerste de plattegrond in een zg grafisch object model.
Vervolgens wordt er een route algoritme op "los gelaten" die de verbindingen maakt (soms wordt het zelfs AI genoemd, maar zo ver wil ik niet gaan daar de methodiek reeds vele tientallen jaren bestaat).

Ik mijn onderzoek naar deze functionaliteit kom je gek genoeg enorm veel voorbeeld programma's en blog post's tegen over het laatste stukje van de routing puzzel, het algoritme.
De 3 meeste gebruikte hiervan zijn:

Maar bij al deze blog post's en voorbeelden was de grafische data structuur er al bij gezet.
Het maken de grafische structuur is nu juist het meest lastige stuk, hoe vertaal je een plattegrond in zo'n grafische structuur?

Hoe heb ik dat in JCS opgelost:

Een graph structuur bestaat in essentie uit nodes en edges. Een node kan gezien worden als een fysieke locatie. De edge is de verbinding tussen 2 nodes.

nodes_edges.png


Een Edge, (wordt ook wel vector genoemd) heeft een richting, dus van er is een Edge van A naar B en een van B naar A.
Een Edge heeft ook een lengte, Deze lengte wordt later gebruikt om de optimale route te vinden.


In de Graph structuur wordt in JCS iedere tegel een node. De Edges zijn de verbindings punten van de rails die op de tegel wordt afgebeeld. (de "paarse" cirkels in de tekening).
rij_tegels.png

De Node kan dus van A naar B en van B naar A (in de tekening met 3 tegels dus van A naar B en B naar A en van B naar C en C naar B).

Een Wissel is een "specialtje", daar kan je 3 kanten op. Een wissel heeft 6 edges. Echter een wissel heeft een beperking.
Ja kan nl van A naar B, van A naar C, van B naar A en van C naar A maar niet van C naar B. Deze beperking wordt actief tijdens het routeer proces.
tegels_met_wissel_en_richting.png 

Bij het maken van de grafische structuur zullen in eerste instantie alle Edges, ook die van B naar C en C naar B gemaakt worden.

A * (ster) algoritme

Zodra de grafische structuur is gemaakt wordt er getraceerd.
In een blok gestuurde omgeving zoals bij de meeste trein besturing programma's kan een trein van blok naar blok rijden. De route tussen 2 blokken wordt ook wel de rijweg genoemd.
In JCS wordt er een lijst gemaakt van alle blokken en vervolgens wordt er getest of er een route bestaat van een blok naar een ander blok.

Voor mijn test baan bijvoorbeeld zijn er 8 routes of rijwegen mogelijk. In het route paneel kun je ze selecteren en dan wordt de rijweg getoond.
testbaan_met_routes.png

Tot zover de vorderingen van JCS, naast het verhelpen van foutjes in de eerste release ben ik nu bezig met het opzetten van automatisch rijden. Dit is de volgende grote puzzel.  :)

Groeten,

Frans
Re: Java Central Station
Lid sinds: 2021

offline
Re: Java Central Station
Hoi Frans, knappe ontwikkeling, ga het draadje graag volgen.
Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Heel mooi gemaakt! Petje af!

Dit is een hele mooie hobby, binnen de hobby.

Meine
Java Central Station de volgende Stap
Hallo allemaal,

Als eerste dank voor de reacties :)

Afgelopen weken heb ik weer wat vorderingen gemaakt met JCS.
Ik ben begonnen met het van automatisch rijden. Dit is een hele kluif! (maar wel zeer leerzaam ;) )

Als eerste een z.g. State machine gemaakt.
Het functioneel op een rijtje krijgen wat je precies allemaal moet doen heb ik zo getracht te modelleren.
Het volgen van dit state-machine pattern helpt mij om functioneel te beschrijven wat je moet doen en dit dan om te zetten in code.

Iedere locomotief die automatisch gaat rijden wordt gezien als een apart (sub) proces, een Thread.
De status kan pas verder springen als en aan bepaalde voorwaarde(s) is voldaan.

Voordat de auto mode wordt gestart wordt er "geabonneerd" op alle melders.
Zodra een melder afgaat die niet is verwacht wordt dit als "Spook" gezien en wordt de spanning van de centrale uitgeschakeld.

Ik heb de volgende functionele stappen gedefinieerd::
  • Idle. Initiële status, als de locomotief in een blok staat kan naar de volgende status worden overgegaan.
  • SearchRoute. Zoek een route naar een volgend blok. Als er geen route is check of de locomotief van richting kan veranderen (een pendeltrein) zo ja probeer het met omgekeerde richting. Door als route is gevonden
  • LockRoute. Reserveer de route, zet de blokken in de juiste status, zet de wissels om. Een gereserveerde route of routedelen kunnen niet door een andere route worden gebruikt. Door als dit gelukt is.
  • Start Loco. Zet de melders in het vertrek blok tijdelijk uit, abonneer op de aankomstmelder in het bestemmings-blok. Start de locomotief op kruissnelheid (75%).
  • EnterDestination. Wacht op de aankomstmelder in het bestemmings-blok. Zodra deze afgaat (de trein rijdt dan het blok binnen) verlaag dan de snelheid van de locomotief tot 10%. Zet de status van het bestemmings-blok op "Binnenrijden", zet de melders in het vertrek blok weer aan. Abonneer op de bezet melder van het bestemmingsblok.
  • DestinationReached. Wacht op de bezetmelder van het bestemmings-blok. Zodra deze is afgegaan stop de locomotief (de bestemming is bereikt). Zet de status van het vertrek blok op "Vrij" Zet de status van het bestemmings-blok op "Bezet". Geef de route weer vrij, schakel alle melders vrij. Spring naar de wacht status.
  • Wait. Wacht een vooraf ingestelde tijd, als de automode is uitgeschakeld spring naar einde, anders naar SearchRoute.

statemachine.png

Als ik dit zo opschrijf lijkt allemaal simpel, maar is het viel soms behoorlijk tegen voordat ik het goed functioneel had beschreven, laat staan geprogrammeerd.
Ik kwam allerlei deelproblemen tegen. Met name aan de GUI kant. Om namelijk het proces te begrijpen is een goede grafische terugkoppeling naar de gebruiker essentieel.
Idle, locomotief in Blok 1 geplaatst.
start_idle_mode.png
Bv bij de reserveer stap wordt de route in een bepaalde kleur getekend, die per stap kan verschillen.
lock_route2_state.png
Hiervoor moest ik nogal wat rededesign doen, omdat ik iedere tegel waaruit de layout tekening is opgebouwd moet kunnen adresseren vanuit de "Auto Pilot" om feedback over het proces te geven. Ook de tekening van de blokken heb ik aangepast om meer ruimte te krijgen. De + en - zijn vervangen door een dikke streep aan de + kant. Deze ruimte was nodig om de locomotief naam en afbeelding en de richting van de route te kunnen tonen.
Aankomst in bestemmings-blok (enter).
arrival_route2_state.png
Aangekomen in bestemmings-blok (in)
arrived_route2_state.png   
Ik heb een "Statemachine stepper" gemaakt en een virtuele centrale om e.e.a te kunnen debuggen. Dit proces is nog in volle gang.
statemachine_stepper.png 

Komende tijd nog veel debuggen nodig, maar hoop binnen niet al te lange tijd het fysiek op mijn te kunnen gaan testen  B) .

Groeten,

Frans
Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Citaat van: fransja op zondag 12 mei 2024, 21:40:19Zodra een melder afgaat die niet is verwacht wordt dit als "Spook" gezien en wordt de spanning van de centrale uitgeschakeld.

Frans,

Opbouwende kritiek: Dit houdt dan ook in dat je nooit een lok op je baan kan zetten tijdens het rijden. Vanuit de draaischijf haal ik loks op, die mee kunnen in automatisch bedrijf. Die komen dan "plotseling" in een bezetmelder. Terwijl dit gewoon de bedoeling is. Ter overdenking.

Meine
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
@Meine
Citaat van: Meine op maandag 13 mei 2024, 19:56:50Ter overdenking.
Dat is een goeie! Heb ik nog niet bedacht. Momenteel ga ik er vanuit dat alle loc's op de baan staan als de automode wordt gestart.

Hoe zou je dit (functioneel) beschrijven?
Want als de automode loopt wil je wel reageren op het moment dat er een onverwachte melder ergens komt ter voorkoming van ongelukken  ;) .

Hoe gaat deze situatie dus in z'n werk? Heeft de draaischijf blokken of gaat het manueel?
Als je dan een loc klaar zet terwijl automode loopt, is dat dan in een bepaald blok?
Dan je zou dit blok kunnen markeren als "negeer spook meldingen".

Dit zit nog niet in JCS maar klinkt wel als valide feature.

Groet,
Frans
Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Het rangeergebied(je) heeft geen terugmelding. Dat is bewust. De aansluiting naar het "normale" spoor heeft wel een terugmelder. Hier zet ik bijvoorbeeld een werkterrein klaar om mee te gaan naar een kopspoor in het station. Ik sleep deze naar het spoor en de trein gaat er automatisch naar toe.
Ik ben vermoedelijk geen standaard gebruiker omdat ik veelal alleen mijn pendels automatisch laat rijden en de rest van station naar station sleep. Af en toe rijden een aantal wel automatisch (iTrain)

Je zou de spookdetectie ook als volgt kunnen maken: trein rijdt van A naar B maar kan ook van A naar C. Dit is afhankelijk van wissel 1. Als wissel 1 niet goed staat. Komt de trein in blok C ipv in A.

Meine