Nieuws:

Wilt je Stichting 3rail steunen? Dit kan eenvoudig via onze Stichting 3rail Webshop :thumbup:

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
Re: Java Central Station
Lid sinds: 2018

offline
Re: Java Central Station
Hi Frans, mooi project! Over je autopilot state: ik denk dat het belangrijk is dat je vanuit elke state terug moet kunnen naar 'stop auto modus'.
Op een echte treinbaan gaat heel wat mis, zeker in het begin. Je wil niet softlocken op het moment dat er iets mis gaat (denk aan de 'reset auto modus' knop in Rocrail).
Een soort cleanup() method bij elke state, die zorgt dat alles terug wordt gezet in de oorspronkelijke staat lijkt me een goede toevoeging.

Verder mis ik nog veel unit tests (van de Autopilot). Ik denk dat specifiek bij het bouwen van de autopilot, test driven development je heel erg kan helpen.
Hier defineer je eerst je tests (een trein moet automatisch van A naar B, met allerlei vreemde edgecases), vervolgens bouw je de code die dit moet gaan doen, tot je testcases niet meer falen.
Dit zorgt ervoor dat je veel minder handmatig moet testen!
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hi Tom,

Dank voor de reactie.
De reset staat inderdaad nog niet heel goed beschreven. Die moet er zeker in.

Ben nog heel erg bezig met het goed functioneel "in beeld" krijgen van het Auto mode proces. Ik heb nog niet alle "ins en outs" helder. In de basig begint het nu te werken met 1 locomotief, maar moet natuurlijk ook voor meerdere locomotieven tegelijkertijd werken.
 
Door het maken van verschillende proto-type's probeer ik alle requirements helder te krijgen.
Dit is nog een hele, maar wel leuke klus.
Afgelopen week heb ik bv 2 states samengevoegd (SearchRoute en LockRoute naar de ReserveRouteState) tot 1 en een semafoor gemaakt voor deze reservering.

Momenteel ben ik bezig met het maken van een UI op het hoofdscherm, zodat de locomotieven en statussen te zien zijn, dit gaat nu nog via een tijdelijke test dialog.

Het klopt dat er nog niet zoveel tests zijn, maar het is wel de bedoeling. Ik onderschrijf TDD!
Voor de router heb ik dat ook zo gedaan.
 
Kortom komt goed ;), maar heeft wel ff de tijd nodig.

groet,

Frans

 
Re: Java Central Station
Lid sinds: 2021

offline
Re: Java Central Station
 :thumbup:
Ben best onder de indruk Frans!
Re: Java Central Station
Lid sinds: 2008

Gepensioneerd NS'er

offline
Re: Java Central Station
Ik vind het allemaal reuze knap maar snap er geen jota van.😀
Maar je zit zo diep in de besturings software te kijken dat ik me afvraag of er iets te vinden is zodat Koploper met een cs3 kan communiceren? Of is dat van een heel andere orde?
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Beste Maarten,

In theorie is het mogelijk een API (programma) te maken waar aan de ene kant Koploper zit en aan de ander kant de CS-3.
Maar dat is inderdaad van een hele andere orde.
Zou daar veel interesse voor zijn (geen idee of dit als eens is geprobeerd)?


Ik probeer een besturings programma te ontwikkelen ( voor de fun :) ), in opensource (want daar zijn er niet zoveel van...).
Voor mezelf om hier van te leren maar ook om deze kennis te verspreiden, vandaar deze "blog" ;).

Besturing programma's zijn over het algemeen een "blackbox".

 
Groet,
Frans

   
Re: Java Central Station
@Maarten. Er zijn wel wat personen mee bezig (geweest) met zo iets, maar het komt nooit echt van de grond.
Re: Java Central Station
Lid sinds: 2008

Gepensioneerd NS'er

offline
Re: Java Central Station
Ik zou het toejuichen als het zou lukken. Er zijn heel veel Koploper gebruikers.
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hallo,

Een heugelijk moment voor mijzelf: de eerste keer dat JCS een locomotief automatisch laat pendelen op de test baan.

Er moet nog veel gebeuren maar ik ben blij met dit resultaat.
Centrale is DCC-E Melders via HSI-S88

:)



Re: Java Central Station
Lid sinds: 2018

offline
Re: Java Central Station
Heel mooi Frans!
Re: Java Central Station
Speciale Gast
Lid sinds: 2009

offline
Re: Java Central Station
Erg leuk om te zien dat je de combi hebt gemaakt van M-rail met de techniek van nu. B)
En dat op een lekkere rommelige werktafel, en dat bedoel ik positief. :)
Zo is de treinenhobby hier op het forum toch echt wel veelzijdig te noemen.
Het is niet mijn ding maar veel suc6 en plezier met het verder te perfectioneren.

Java Central Station verder bouwen
Hallo,

Als eerst dank voor alle reacties!
Het is alweer enkele weken geleden dat ik meldde dat ik automatisch kon pendelen met 1 locomotief.
Inmiddels kan dat met 2 of meer. Dit vergde toch wel weer wat refactoring.
Met meerdere locomotieven moet je er namelijk zeker van zijn dat de rijweg maar door 1 locomotief bereden kan worden. Ook moeten wissels die door meerdere rijwegen gedeeld worden een locked status hebben, zodat ze niet ineens worden omgezet.
Hiervoor waar dan ook de nodige wijzigingen in mijn programma noodzakelijk.

Ook het resetten van rijwegen zoals door @~TomM werd benoemd bleek zeer wel noodzakelijk en ben ik nu aan het implementeren.
De State machine zoals ik die die in een eerdere post beschreef is dan ook behoorlijk veranderd.

Heel belangrijk bij software ontwikkeling in het algemeen is testen.
Behalve de testen  om m'n buro in een "nerd" setting, ben ik nu begonnen met het toevoegen van automatische testen.
Daar leer ik ook veel van, omdat je ieder stapje van de state machine moet zien na te bootsten in een multi-threaded omgeving.

De eerste testen zijn nu gemaakt. Als voorbeeld:
  • Zet locomotief in een blok.
  • Zet de blok status van een van de 2 mogelijke bestemmingen op buitengebruik, zodat je zeker weet dat er maar 1 route gekozen kan worden.
  • Start de automaat voor deze locomotief.
  • Check of de verwachte route gevonden wordt naar de verwachte bestemming.
  • Start de locomotief (virtueel).
  • Check of de kruissnelheid is ingesteld en de vertrek blok sensors zijn uitgeschakeld.
  • Meld de bestemmings blok inrij sensor (enter)..
  • Controleer of de status van de State machine van StartState naar EnterState verspringt.
  • Controleer of de locomotief een lagere snelheid heeft gekregen.
  • Laat de 2e melder van het bestemmingblok melden (in).
  • Controleer of de locomotief stopt.
  • Controleer of de state machine de InState verspringt.
  • wacht heel even (100ms)
  • Controleer of de state machine de WaitIState verspringt.
  • enz..

Er moeten er nog een heel aantal gemaakt worden...

Een ander belangrijk aspect is de bediening.
Ik heb ook veel tijd gestoken aan het verbeteren van de UI.
Ik kwam er pas achter bij het testen van de Autopilot dat je allerlei menu's of menu items nodig hebt (daar sta je pas bij stil als je zo iets probeer zelf te maken) om bv een locomotief in een blok te zetten, te starten, stoppen, resetten etc.
newmenuitems.png
Ook het in een blok plaatsten van een locomotief. Visueel heb ik dit opgelost door het locomotief icon te tonen in het blok.
richtingwest.png
De rijrichting van de locomotief t.o.v. het blok moet je kunnen instellen.
richtingoost.png

Ook het op de UI laten zien van wat er aan het gebeuren is is zeer belangrijk om een gebruikers vriendelijk programma te krijgen waar de gebruiker ook kan begrijpen wat er precies gebeurt is soms een hele uitdaging.

Enfin, ben nu naar de 2 release aan het toewerken, maar eerst vakantie ;)

Iedereen een fijne vakantie toe gewenst.

Frans

Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hallo,

Hier een korte update van JCS. Door de vakantie een paar weken even niet aan mijn modelspoor automatiserings project (JCS) gewerkt.
Dat heeft goed gewerkt. Na mij vakantie was het op sommige punten even nadenken wat ik ook alweer aan het doen was ;)
Dus er even uit help ieder geval tegen tunnel visie.

Vlak voor mijn vakantie had ik al gemeld dat ik met meerdere locomotieven kon rijden maar die ging niet helemaal foutloos.
Na mijn vakantie heb ik mijn gestort in het schijven van test cases, zodat ik de State Machine stap voor stap kan door testen.
Hier kwam veel uit. (Grappig hoe je altijd weer wordt afgestraft als je ergens een short-cut maakt om iets voor elkaar te krijgen).

Enfin na de nodige issues met Threads (~tegelijkertijd tijd lopende "processen") heb ik nu een versie die heel netjes meerdere locomotieven kan besturen.
Om verde testen te vereenvoudigen heb in een Virtuele Centrale in JCS toegevoegd (naast de bestaande fysieke centrales Markin CS 2/3 en DCC-EX plus HSI-S88). Deze Virtuele Centrale triggert automatisch de eerst volgende sensor die een locomotief nadert als die rijdt.

Ik heb in middel een nieuwe virtuele test baan gemaakt. Waar in dit voorbeeld 2 locomotieven rijden, ik heb er een
YouTube filmpje van gemaakt.


Nu moet ik nog een hoop scherm wijzigingen maken, bv om de wachttijd per blok te kunnen instellen.
En natuurlijk test cases.
Werk nu toe naar de 2e release.


Inmiddels ben ik ook op zoek naar iemand die mij een ESU Ecos voor enige tijd kan lenen, zodat ik deze hardware ook kan ondersteunen.

Zoals altijd staan de laatste wijzigingen op Github (actieve branch op dit moment is 15-automatic-control)

Frans


Java Central Station Nieuwe release V0.0.2 Nu met Automatisch rijden
Hallo,

Afgelopen weken heb ik verder gewerkt aan mijn besturings- software project JCS.
In de vorige bijdrage had ik al vermeld dat ik bezig was met het maken van testcases, zgn Unit tests. Deze Unit tests testen "los" een functie in de software.
Ik heb hard gewerkt om de module die het automatische rijden "regelt", grondig door te testen.
Hier kwamen de nodige issues naar voren. Het is een redelijk complex stuk, daar het in meerdere threads (processen) asynchroon draait. Er gebeuren er allerlei dingen tegelijkertijd.
Het heeft me enkele brein krakers en tijd gekost om het goed door te testen.

Ik denk dat ik nu op een punt gekomen ben gekomen waar het er nu echt op lijkt dat de software stabiel en goed werkt, althans bij mij dan ;)

Vervolgens ben ik aan de gang gegaan met het maken van documentatie. Dit werkte voor mij verhelderend om eens alle stappen op te schrijven die je moet nemen voordat je überhaupt automatisch kan rijden. Ik heb dit aan de hand van mijn testbaan met de DCC-EX gedaan.
Dit bleek okk een hele goede test. Ik heb me verbaast over het aantal stappen dat je moet nemen.
Als je bezig ben met de software zelf te maken sta je er niet zo bij stil, daar je bezig bent met een klein stapje te bouwen, maar nu ik naar het geheel kijk was dat toch heel verhelderend.
Nooit echt bij stil gestaan hoeveel stappen moet nemen voordat je automatisch kan rijden.

TestLayoutSideBySide.png

Inmiddels ook documentatie gemaakt in het Nederlands, Setup Guide voor JCS en Rijden met JCS

Als klap op de vuurpijl, met toch wel een beetje gepaste trots, heb ik m'n eigen baan (zolderhoek) in JCS getekend en kan nu met 4 treinen automatisch rijden.

zolderhoek_layout.png

Terwijl dit rijdt heb ik alweer nieuwe ideeën om het programma te verbeteren :)

Ook is er een nieuwe release, versie 0.0.2 gepubliceerd.
Ik nodig iedereen, uit te testen, daar kan ik nog wel hulp gebruiken ;) hoe meer hoe beter.

Inmiddels ben ik in het bezit gekomen van een ESU Ecos 50000. Volgende stap is het toevoegen van deze centrale.

Groet,
Frans 



Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Frans,

Ziet er netjes uit!  :thumbup: 

Waar wil je bevindingen hebben?
Hier lijkt mij voor de toekomst niet handig.
 
Bij mij komt er geen programma naar voren. (Windows 10, java: OpenJDK BellSoft 17.0.6.0)
Het beeld knippert 1x en dan niks. Ook niet bij de taakbeheer zichtbaar.

Meine
Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Frans,

Ook in MacOS lukt het niet.
JCS foutmelding MacOs.png

Meine
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hoi Meine,

Fijn dat je JCS wil gaan testen. :favorite:

Citaat van: Meine op zaterdag 28 september 2024, 22:29:40Bij mij komt er geen programma naar voren. (Windows 10, java: OpenJDK BellSoft 17.0.6.0)
Dit komt omdat er minimaal een JDK 21 nodig is. Ik zal dit expliciet in de readme zetten en zal kijken of ik er een melding van kan laten "op poppen".

Citaat van: Meine op zaterdag 28 september 2024, 22:29:40Waar wil je bevindingen hebben?
Als je een GitHub account hebt kun je ze hier:https://github.com/fransjacobs/model-railway/issues melden.

Citaat van: Meine op zaterdag 28 september 2024, 22:43:33Ook in MacOS lukt het niet.

Bij Mac OS heb je ook een JDK 21 nodig en bij de privacy setting moet je apps van store en developers toestaan. Vervolgens zal Mac OS "klagen" dat die niet kan verifiëren, dan dit negeren en openen. Soms moet dit 2 keer achter elkaar.

Hoop dat het dan lukt🤞

Dit is nu precies waarom ik testers nodig heb, fijn!

Frans
Re: Java Central Station
Lid sinds: 2007

Meine (Landkreis Gifhorn)

offline
Re: Java Central Station
Citaat van: fransja op vrijdag 27 september 2024, 21:39:50Inmiddels ben ik in het bezit gekomen van een ESU Ecos 50000. Volgende stap is het toevoegen van deze centrale.

Ik zal moeten wachten tot je deze erin hebt zitten. Java 21 geïnstalleerd. Het werkt nu.

Meine
Re: Java Central Station
Citaat van: fransja op zondag 29 september 2024, 08:35:59Dit komt omdat er minimaal een JDK 21 nodig is. Ik zal dit expliciet in de readme zetten en zal kijken of ik er een melding van kan laten "op poppen".
Is het mogelijk om deze standaard mee te leveren c.q. te laten downloaden als deze versie niet op het systeem staat?
Re: Java Central Station
Lid sinds: 2019

offline
Re: Java Central Station
Hi Bas,

Citaat van: basjuh1981 op zondag 29 september 2024, 14:28:48Is het mogelijk om deze standaard mee te leveren c.q. te laten downloaden als deze versie niet op het systeem staat?
Ja dat is mogelijk moet alleen even goed kijken naar de licentie voorwaarden. Dat is de reden dat ik het tot nu toe niet heb gedaan.
Je mag onder bepaalde voorwaarden her-distribueren. Ben alleen juridisch niet zo goed onderlegt, dus moet even op die licenties studeren.

Mvg,
Frans
Re: Java Central Station
Ik wist niet dat dat aan een licentie verbonden was. Succes met uitzoeken :)