Java Central Station

fransja
Berichten: 15
Lid geworden op: 03 sep 2023, 11:27
Locatie: Alblasserdam

Java Central Station

Bericht 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
Bouwer van JCS

AlbertG
Berichten: 65
Lid geworden op: 03 mar 2023, 11:20

Bericht 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.
Vriendelijke groeten,
Albert.

Mijn video's: https://www.youtube.com/@Albert-DenAkker

Gebruikersavatar
reinder
Berichten: 26
Lid geworden op: 02 jan 2023, 23:24
Locatie: Leeuwarden
Contacteer:

Bericht 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

Gebruikersavatar
DTS
Site Admin
Berichten: 1136
Lid geworden op: 25 jul 2021, 13:57
Locatie: Ermelo
Contacteer:

Bericht door DTS »

Heel leuk, ik moedig dit soort initiatieven alleen maar aan!
Wie bang is om fouten te maken, zal nooit beter worden in wat die doet ;)

Domburg Train Support | DTS Modelspoor | Digitale Infodagen 2024

fransja
Berichten: 15
Lid geworden op: 03 sep 2023, 11:27
Locatie: Alblasserdam

Bericht 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) 933 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) 933 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
Bouwer van JCS

Momfer
Berichten: 106
Lid geworden op: 10 sep 2021, 21:36
Locatie: Zwolle

Bericht 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
Groet,
Rico (momfer)

Centrale: DCC-Ex
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan

fransja
Berichten: 15
Lid geworden op: 03 sep 2023, 11:27
Locatie: Alblasserdam

Bericht 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) 907 keer bekeken
en
FktIcon_i_we_01.png
FktIcon_i_we_01.png (294 Bytes) 907 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) 907 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) 907 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) 907 keer bekeken
Groeten
Frans
Bouwer van JCS

fransja
Berichten: 15
Lid geworden op: 03 sep 2023, 11:27
Locatie: Alblasserdam

Bericht 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) 875 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) 875 keer bekeken
Uiteindelijk komt het dan zo in de plattegrond:
alle_seinen.png
alle_seinen.png (12.22 KiB) 875 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) 875 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
Laatst gewijzigd door fransja op 07 okt 2023, 16:58, 1 keer totaal gewijzigd.
Bouwer van JCS

Momfer
Berichten: 106
Lid geworden op: 10 sep 2021, 21:36
Locatie: Zwolle

Bericht 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 :)
Groet,
Rico (momfer)

Centrale: DCC-Ex
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan

Marcel
Berichten: 56
Lid geworden op: 03 aug 2021, 19:48

Bericht door Marcel »

Is een pijl als richting aanduiding in een blok niet makkelijker?
Groeten Marcel V

Plaats reactie

Terug naar “Zelfbouw software”