Pagina 1 van 1

Java Central Station

Geplaatst: 07 sep 2023, 20:17
door fransja
Java Central Station of JCS is het (hobby) project waar ik nu al een paar jaar (met tussen pozen) aan werk.
Als eerst toont dit de breedte van de modelspoor hobby, je kan je zelf "uitleven" in tal van richtingen, zowel Creatief als "nerd" technisch :) .

Helaas zijn er niet zoveel "nerds" zoals ik, in de tijd dat ik nu bezig ben heb ik met 2 Amerikanen gecorrespondeerd (kijk dat is ook leuk) over dit onderwerp en recentelijk ben ik in contact gekomen met @reinder van Traintastic. Vandaar dan nu deze bijdrage op dit forum in de hoop anderen te kunnen inspireren (en mogelijk t.z.t. testers te vinden ;) )

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

Waarom dan toch zelf maken?
  • Omdat het leuk is!
  • Omdat het heel boeiend op precies te begrijpen hoe je een aantal treinen op een baan 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) werk 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-ra ... ter#readme
Wat is tot nu toe gemaakt?
  • Communicatie met een controller, in mijn geval ondersteun ik de CS 2 en 3 van Marklin simpelweg om dat ik die heb.
  • De Locomotieven en de accessoires kunnen worden uitgelezen en min of meer met de hand kunnen de Locomotieven, functies en de wissels en seinen worden aangestuurd.
  • De terugmeldingen 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 worden nu automatisch uitgerekend.

Wat nog te doen
  • Tonen van functie plaatjes bij functie buttons
  • Het automatisch rijden (is sneller gezegd en geschreven dan gedaan)
  • ....
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-ra ... UILDING.md.

Als er interesse is zal ik proberen zo nu en dan een update te geven en wat dieper in te gaan in en sommige onderliggende principes te beschrijven, m.a.w. hoe werkt het nou (echt), waarom is het soms zol moeilijk etc.
En hoop ook nog wat te leren van eventuele reacties :idea: .

Screen shot:
Afbeelding

Groeten,

Frans

Re: Java Central Station

Geplaatst: 07 sep 2023, 20:44
door AlbertG
Hoi Frans,
Als Rocrail gebruiker vind ik dit wel interessant om te volgen. Ik ben geen programmeur maar heb wel wat ervaring met software ontwikkeling maar dan meer als gebruiker in het specificeren van de eisen en het testen van het resultaat.
Je baanplan ziet er al goed uit. Ik zie (denk ik) wel een typisch Rocrail verschijnsel, namelijk de + en - zijde van het bloksymbool. Klopt dat?

Misschien vind je het interessant om bij een ander project aan te sluiten: https://dcc-ex.com/index.html.

Ik blijf je volgen.

Re: Java Central Station

Geplaatst: 07 sep 2023, 23:09
door reinder
Hi Frans,

Mooi overzicht van je software zo! Vind het ook erg leuk dat we samen kunnen puzzelen om de wat minder goed gedocumenteerde zaken van de CS2/3 en de Marklin CAN te ontrafelen.

DCC-ex is ook een mooi project idd, communicatie protocol is goed en helder gedocumenteerd. Redelijk eenvoudig toe te voegen vond ik :) (Marklin CAN is meer werk :P)

Reinder

Re: Java Central Station

Geplaatst: 09 sep 2023, 10:48
door DTS
Heel leuk, ik moedig dit soort initiatieven alleen maar aan!

Re: Java Central Station

Geplaatst: 16 sep 2023, 14:55
door fransja
Hallo,

Dank voor de reacties.
AlbertG schreef: 07 sep 2023, 20:44 Misschien vind je het interessant om bij een ander project aan te sluiten: https://dcc-ex.com/index.html.
@AlbertG en @reinder, DCC-EX is zeker een optie. Ik heb het op de wensen lijst gezet: Add support for DCC-EX
Als er iemand een tip heeft waar alle componenten in NL te koop zijn zou dat fijn zijn.

JCS
Afgelopen dagen verder kunnen werken aan het verbeteren en toevoegen van nieuwe functionaliteit.
Een van de dingen waar ik ooit JCS voor ben begonnen was het kleine scherm van de CS groter te kunnen weergegeven (toen had ik nog een CS 2, met de CS 3 is dat inmiddels verbeterd door de web interface).
Een van de dingen die ik bv mis in Rocrail is dat als je in de CS iets wijzigt je dit niet terug ziet in Rocrail (behalve de power).
Een van de "features" in JCS is nu juist dat als je een verandering "ergens" maakt (in JCS of op de CS of op een aangesloten mobile station) je dit overal ziet.

Het protocol dat Marklin voor de CS gebruikt ondersteund de feature. Zie cs2CAN-Protokoll-2_0.pdf
Bijna elke setting of verandering wordt als een soort van event bericht op de CAN bus gezet en daar kan je dan naar "luisteren".

In JCS wordt dit principe dus veelvuldig toegepast. Zodra er een bericht komt dat er een setting is veranderd wordt dit door JCS herkend en naar het juiste object door gezet.

Hoe is dit dan gemaakt? Een kijkje in de keuken
Het CAN over UDP of TCP protocol zoals hier beschreven beschrijft redelijk alle mogelijkheden, echter het is al weer 11 jaar oud en Marklin heeft niet stil gezeten. Door de beschrijving te volgen en met reverse engineering ben ik er achter gekomen dat naast UDP nu ook TCP wordt ondersteund, dat dat er berichten mogelijk zijn die niet beschreven staan.

PacketSender
Door gebruik te maken van het programma Packetsender is het mogelijk om alle commando's een voor een uit tevoeren en de response op die commando's te zien.
Voorbeeld is een commando om de power status te bevragen (niet gedocumenteerd). Is de spanning op de rails AAN of UIT?. Dat is voor Modelspoor software erg handig te weten (in het laatste geval heeft enig stuur commando namelijk geen enkele zin).
screenshot_147.png
screenshot_147.png (71.18 KiB) 1712 keer bekeken
Het onderste commando zijn de 13 bytes die ik stuur naar de CS. De CS antwoord (2e van onderen) met 2 bytes een is een Broadcast 2e is van de CS zelf (zie de groene markering is de CS UID)
De rode markering is data byte 4, het stop/go commando waarde in dit geval dus 0 ofwel uit.
De 3e van onderen is het zelfde verzoek, maar nu staat de spanning aan (eerste response regel van boven).

Op deze manier ben ik bijna alle mogelijke commando's af gegaan en samen met de documentatie om te begrijpen hoe dit dan werkt. Vervolgens heb ik dat in JCS geprogrammeerd.
JCS "luistert nu naar de response berichten van de CS, zoals in het voorbeeld, maar als je de spanning op de CS aan of uit zet wordt het response bericht dus ook gestuurd (zonder dat je er om vraagt).
Door nu dit bericht te "vangen" weet je dus of de spanning aan of uit staat. Dat wordt in JCS weergegeven in de Power button en met de "Leds" in de snelheid meter van de "Driver Cab"
screenshot_148.png
screenshot_148.png (73.14 KiB) 1712 keer bekeken
Met het "Driver Cab" scherm kun je een locomotief kiezen en besturen, ook worden alle functie iconen weergegeven zoals op de CS (ze worden uit de CS gedownload).
Als je op de CS de zelfde locomotief selecteert en bv de snelheid veranderd wordt dit ook direct in JCS weergegeven.

Tot zover de vorderingen.

Groet,

Frans

Re: Java Central Station

Geplaatst: 16 sep 2023, 21:16
door Momfer
Hallo Frans,

Geen aandelen, maar hier een klein lijstje met NL leveranciers. Kan uiteraard ook bij anderen, zoals Conrad AZ-delivery, etc.

Arduino Mega (Genuine, preferred):

- Amazon nl
- Kiwi Electronics
- Open Circuit

Arduino Mega (ELEGOO, preferred)
- Amazon nl

Arduino Mega kloon
- Open Circuit

Arduino L298 motor shield (Genuine , preferred):
- KIWI Electronics
- Open Circuit

Deek Robot L298 motor shield (kloon, preferred)
- Amazon nl

Re: Java Central Station

Geplaatst: 25 sep 2023, 20:21
door fransja
Dank je wel @Momfer , ik ga me oriënteren op de beste prijs :)

Inmiddels weer een stukje je verder gewerkt aan JCS. Ik heb een z.g. "Driver Cab" scherm gemaakt, waarmee je een locomotief kan 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 is het idee de zelfde iconen te gebruiken al op de CS worden getoond.

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 CS 2 als 3 en wordt bv door een Mobile Station gebruikt om de lijst op te vragen. Enfin na wat heen en weer proberen en mailen met @reinder is dit gelukt en krijg ik keurig de file (btw je kunt de 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=RRF 272 001-9" het locomotief plaatje, 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>
Functies
In de "lokomotive.cs2" staan ook de functies van iedere locomotief gespecificeerd als:
.funktionen
..nr=0
..typ=1
..wert=1
.funktionen
..nr=1
..typ=4
..wert=0
.......
In bovenstaande 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
FktIcon_a_ge_01.png (421 Bytes) 1686 keer bekeken
en
FktIcon_i_we_01.png
FktIcon_i_we_01.png (294 Bytes) 1686 keer bekeken
Dit werkt op zowel de CS2 als CS3 voor de meeste "oudere" locomotieven.

Moment functies
Functie 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
function_panel.png (10.22 KiB) 1686 keer bekeken
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.
Natuurlijk gelijk aan gemeld op de CS 3. De locomotive file opnieuw in JCS ingelezen.
rff1102.jpeg
rff1102.jpeg (469.89 KiB) 1686 keer bekeken
Het locomotief plaatje kwam mee, maar de functies was een desillusie. wat blijkt:
.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(!) Maar op de CS3 worden gewoon de plaatjes getoond...
Enfin verder gezocht en wat blijkt de CS3 gebruik intern een JSON file voor de locomotieven en plaatjes. zie http://<cs3 ip adres>/app/api/loks/
Daar staat (ongedocumenteerd) :
{
"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). Dank je 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 functie als SVG zijn opgeslagen (http://<cs3 ip adres>/images/svgSprites/fcticons.json) Uiteindelijk dit nu ook toegevoegd in JCS en afhankelijk of er een CS 2 of 3 wordt herkend gebuikt JCS de ene of de ander methodiek.

Eind resultaat
JCS-driver-cab.png
JCS-driver-cab.png (61.65 KiB) 1686 keer bekeken
Groeten
Frans

Re: Java Central Station

Geplaatst: 07 okt 2023, 14:06
door fransja
Tegeltjes wijsheid of...

Het spoorplan de, schematische, weergave van de layout. Dan is bij software voor modelspoor automatiseren ook een van de belangrijkste functionaliteiten. Er zijn meerdere mogenlijkheden 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.
Vervolgens heb ik de volgende soort tegels gedefinieerd:
Straight of te wel rechte rails
Curved, gebogen rails in de tekening eigenlijk diagonaal
Sensor, melder
End, "stop blok"
Signal, sein
Switch, wissel
Cross, kruiswissel
Block, blok

Er zijn natuurlijk meer mogelijke symbolen, maar dat is meer voor de toekomst. Met bovenstaande symbolen kan ik mijn huidige baan schematisch weergeven.

Maar goed, wat dat ik kan nu symbolen op een zg canvas plaatsen en dan gaat het op een plattegrond van de baan lijken. Wat nu?
Een recht rails kan op 2 manier worden geplaatst, Horizontaal en Verticaal, een "Ronde" rails kan op 4 manier worden geplaatst.
ronde_rails.png
ronde_rails.png (2.73 KiB) 1654 keer bekeken
Kortom ik heb iedere tegel een Oriëntatie gegeven, Noord Oost, West en Zuid. de default is Oost.

Vervolgen het tekenen van een Tegel, Om toch enige datails te kunnen laten zien wordt iedere tegel 10 zo groot getekend nl 400x400 pixels
Voorbeeld een uitrij sein:
uitrijsein_400.png
uitrijsein_400.png (6.85 KiB) 1654 keer bekeken
Uiteindelijk komt het dan zo in de plattegrond:
alle_seinen.png
alle_seinen.png (12.22 KiB) 1654 keer bekeken
Als alle plaatjes die op een plattegrond staan stuk voor stuk getekend en verkleind moeten worden zou dit (te) veel computer power vragen, dus ieder tegel type wordt wordt maar 1 keer getekend eb vervolgens wordt van de tekening een image gemaakt die een cache 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
simple_baan.png (14.49 KiB) 1654 keer bekeken
Een blok is een een speciaal geval. Het is de plaats, waar in een toekomstig stadium, een trein in kan staan. Een blok heeft daarom een richtingsindicatie nodig. @AlbertG had dit in mijn eerste post al goed gezien. Het lijkt inderdaad een beetje op Rocrail. Ik heb voorlopig maar een "+" en een "-" aangehouden on de richting te kunnen aanduiden. 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 @Momfer er wordt aan gewerkt.

Groeten,

Frans

Re: Java Central Station

Geplaatst: 07 okt 2023, 14:16
door Momfer
Weer een mooie gedetailleerde uitleg zo. Leuk om de vorderingen zo te kunnen volgen.

Ik ben benieuwd naar de volgende stappen. Veel plezier en succes met de ontwikkelingen :)

Re: Java Central Station

Geplaatst: 08 okt 2023, 12:40
door Marcel
Is een pijl als richting aanduiding in een blok niet makkelijker?

Re: Java Central Station

Geplaatst: 08 okt 2023, 20:04
door reinder
Mooie progressie @fransja!

Mooie verzameling seinen ook al!, stuur je die ook al aan qua seinbeeld op basis van wat achter het sein ligt?
Dat is met sommige seinen best een uitdaging, in elk land werkt het weer net een beetje anders.

Leuk om te zien dat je een andere teken strategie gebruikt, In Traintastic teken ik juist elke keer opnieuw. (Niet het hele bord overigens, alleen het deel dat invalid is. Moet nodig eens testen hoe goed dat performt op een RPi 4.

Heb je ook een "dubbele" bocht tegel? Bij dubbel spoor bocht kan dat handig zijn, anders liggen de sporen zo ver uit elkaar.

Zijn de blokken altijd 3 tegels lang, of kun je ze ook groter maken?

Of het een beter idee is weet ik niet, in Traintastic gebruik ik A en B, waarbij A = West for horizontal blocks, South for vertical blocks en B = East for horizontal blocks, North for vertical blocks..

Leuk dat je ook DCC-EX gaat ondersteunen, ben benieuwd naar je vorderingen.

Reinder

Re: Java Central Station

Geplaatst: 04 nov 2023, 23:00
door fransja
Hallo,
Het is alweer enige tijd geleden dat ik iets heb geplaatst op het forum, bij deze een update van JCS.

Afgelopen weken veel tijd besteed aan de ondersteuning van DCC-EX. Als eerste natuurlijk het Dcc-Ex command station (centrale) gemaakt, en dit aan een proef spoortje aangesloten. Vervolgens een beetje gespeeld met wat op de markt zijnde Throttles op de telefoon om via het netwerk en seriële poort de centrale te bedienen en zo te leren hoe het e.e.a. werkt.

De verschillen in het protocol met wat ik tot nu toe gemaakt heb, (Marklin CAN protocol) zijn enorm, kortom ik moest het een en ander refactoren (herorganiseren).
Als eerste een scherm gemaakt zodat je verschillende centrales kan kiezen.
commandStationScreen.png
commandStationScreen.png (70.37 KiB) 1120 keer bekeken

Vervolgens ben ik begonnen met de netwerk implementatie van het DCC-EX protocol.
Het DCC protocol werkt volledig asynchroon. Dit betekend dat als je een bericht (command) stuurt naar de centrale dit "fire en forget" is.
Dit in tegenstelling met het Marklin CAN protocol die op elk commando direct response terug geeft.

DCC-EX geeft uiteindelijk wel een response maar de volgorde waarin en wanneer zijn volgens de maker niet gegarandeerd.
DCC-EX protocol geeft altijd een "echo" van ieder commando als response, dus ook als er via een andere Throttle (client) iets wordt gestuurd, wordt dit naar iedere aangesloten client gestuurd.
Dit is een handige eigenschap. Dit doet bv de Marklin CS 2/3 ook en alle schermen in JCS reageren daar dan dus op.

Enfin vanavond had ik dus het eerste moment dat ik via JCS een locomotief kon laten rijden via de DCC-EX centrale :)
connectToDccEx.png
connectToDccEx.png (179.31 KiB) 1120 keer bekeken
JCS kan verbinden met de DCC-EX centrale en kan nu commando's sturen om een loc te bedienen, maar JCS zie ook als er via een andere Throttle een locomotief wordt bediend. Zowel de snelheid, de richting als de functies.

Kortom het eerste begin is er pfff.

Natuurlijk is er nog genoeg te doen:
  • Bedienen via seriële poort
  • Melders
  • Wissels / seinen
  • Metingen
  • Invoeren van Locomotieven en plaatjes
  • Invoeren van Wissels en seinen
  • ...
kortom ik ben nog wel even bezig ;)

Groeten,
Frans

Re: Java Central Station

Geplaatst: 08 nov 2023, 19:38
door fransja
Marklin Bug...

Hallo allemaal,


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 op halen van de functie bij de CS 2 en 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
IMG_5406.jpeg (1015.56 KiB) 1099 keer bekeken
Functies 0-7 in de MS WLAN. Alleen dus F7
IMG_5404.jpeg
IMG_5404.jpeg (168.38 KiB) 1099 keer bekeken
Functies 8-15 in de MS WLAN. Alleen F10, F13 en F14
IMG_5405.jpeg
IMG_5405.jpeg (171.25 KiB) 1099 keer bekeken
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

Geplaatst: 28 nov 2023, 17:38
door fransja
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
commandStationScreen.png (58.5 KiB) 1076 keer bekeken
Enfin dus een stapje terug om het uiteindelijk beter te krijgen.

Groet,

Frans

Re: Java Central Station

Geplaatst: 02 dec 2023, 16:59
door reinder
Hi @fransja ,

Ja, zn HAL is wel must zodra je meerdere centrales gaat ondersteunen. Ik heb het in Traintastic opgelost door elk protocol/systeem een aantal controllers te geven.

Een Interface (=brug tussen hardware en traintastic) ondersteund een of meerdere Controllers:
- DecoderController - Aansturen van locomotieven
- InputController - Uitlezen van melders
- OutputController - Aansturen van uitgangen/accessory decoders
- IdentificationController - Uitlezen van identificatie sensoren, b.v. RailCOM of LISSY IR.

Die identificatie mist denk ik nog in je lijstje, ik weet niet of Marklin daar een systeem voor heeft, DCC-EX niet iig. LocoNet en ECoS iig wel :)

In mijne mist een generieke manier om lok info op te halen, de ECoS en Marklin CS kunnen dat, dat is nu in Traintastic nog niet echt generiek. Dat zou eigenlijk wel moeten #goedidee

Elke Interface heeft ook een of meerdere IOHandlers, een IOHandler regelt de Seriele of Netwerk communicatie, zodat de rest van de software niet meer hoeft te weten of het nu serieel of netwerk is :)

Dit is overigens versie 2 van Traintastic's HAL, met de eerste versie liep ik vast op wat beperkingen. Zodra je meer hardware gaat ondersteunen kom je er al snel achter dat er toch wel wat verschillen zitten tussen de systemen. Traintastic ondersteund nu 9 soorten: DCC-EX, HSI-88, LocoNet, XpressNet, ECoS, Marklin CS 2/3, Z21, Traintastic DIY en ben bezig met Selectrix.

Reinder

Re: Java Central Station

Geplaatst: 17 jan 2024, 20:09
door fransja
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:
  • [li]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.[/li]
    [li]Accessoire controller; kan accessoires schakelen, denk hierbij aan wissels, seinen, verlichting, etc. Er kunnen er meer dan 1 zijn.[/li]
    [li]Feedback controller; "luistert" naar terugmeldingen, er kunnen er meer dan 1 van zijn.[/li]
@reinder de Identificatie controller heb ik nog even op de "back burner" staan daar ik geen Esos of loco net apparatuur heb om het überhaupt te kunnen testen, maar is wel een zeer valide optie.

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
CommandStationDialog.png (81.52 KiB) 1003 keer bekeken
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
LocomotivePrefsMarklin.png (83.86 KiB) 1003 keer bekeken
Dit ook gemaakt voor de accessoires.
AccessoryPrefs.png
AccessoryPrefs.png (67.24 KiB) 1003 keer bekeken
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
AccessoryKeyboard.png (38.8 KiB) 1003 keer bekeken
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

Geplaatst: 15 feb 2024, 15:56
door fransja
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
testbaan.png (26.55 KiB) 931 keer bekeken
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
hsi-s88.png (695.23 KiB) 931 keer bekeken
DCC-EX
dcc-ex.png
dcc-ex.png (464.07 KiB) 931 keer bekeken
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
testbaanproto_l.png (765.36 KiB) 931 keer bekeken
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 :)

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

Groet,

Frans

Re: Java Central Station

Geplaatst: 15 feb 2024, 20:00
door Momfer
Mooie stappen! Ik blijf het volgen :)

Re: Java Central Station

Geplaatst: 15 feb 2024, 22:41
door Marcel
Van mij krijg je een 👍 vind het geweldig dat je dit kan.

Re: Java Central Station

Geplaatst: 10 mar 2024, 15:48
door fransja
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 hierin 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
view-sensor-and-turnout-status.png (76.98 KiB) 869 keer bekeken
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

Geplaatst: 07 apr 2024, 21:05
door fransja
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
nodes_edges.png (12.93 KiB) 694 keer bekeken
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
rij_tegels.png (3.39 KiB) 694 keer bekeken
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
tegels_met_wissel_en_richting.png (8.95 KiB) 694 keer bekeken
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
testbaan_met_routes.png (23.59 KiB) 694 keer bekeken
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

Geplaatst: 12 mei 2024, 21:46
door fransja
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::
  • [li]Idle. Initiële status, als de locomotief in een blok staat kan naar de volgende status worden overgegaan.[/li]
    [li]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[/li]
    [li]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.[/li]
    [li]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%).[/li]
    [li]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.[/li]
    [li]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.[/li]
    [li]Wait. Wacht een vooraf ingestelde tijd, als de automode is uitgeschakeld spring naar einde, anders naar SearchRoute.[/li]
statemachine.png
statemachine.png (225.08 KiB) 644 keer bekeken
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
start_idle_mode.png (11.63 KiB) 644 keer bekeken
Bv bij de reserveer stap wordt de route in een bepaalde kleur getekend, die per stap kan verschillen.
lock_route2_state.png
lock_route2_state.png (14.4 KiB) 644 keer bekeken
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
arrival_route2_state.png (14.33 KiB) 644 keer bekeken
Aangekomen in bestemmings-blok (in)
arrived_route2_state.png
arrived_route2_state.png (11.67 KiB) 644 keer bekeken

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
statemachine_stepper.png (39.21 KiB) 644 keer bekeken
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

Geplaatst: 13 mei 2024, 10:15
door Momfer
Hoi Frans,

Wat een werk!

En knap ook hoe je het zo begrijpelijk opschrijft. Dan kan ik er nog steeds niet veel mee, maar ik vind het volgen van het proces wel interessant.

Re: Java Central Station

Geplaatst: 22 mei 2024, 22:26
door fransja
Hallo,

Een heugelijk moment voor mijzelf: de eerste keer dat JCS een locomotief automatisch laat pendelen op de test baan.
https://www.youtube.com/watch?v=CyLmGk6gfHA

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

:)

Re: Java Central Station

Geplaatst: 23 mei 2024, 09:52
door Momfer
Mooie sprong vooruit, Frans!