Logische en speciale acties nu beschikbaar via RailScript in railkernel
Een belangrijk onderdeel voor de verdere integratie van Koploper in RailKernel is inmiddels gerealiseerd: de logische en speciale acties.
RailKernel doet dit niet door de Koploper-implementatie letterlijk na te bouwen, maar via een eigen ingebouwde automatiseringstaal: RailScript. Daarmee kunnen gebruikers zelf voorwaarden, gebeurtenissen en acties combineren.
RailScript kan onder andere:
- de toestand van terugmelders, blokken, wissels, seinen, locomotieven, treinen, routes en centrales uitlezen;
- reageren zodra een toestand verandert of aan een voorwaarde wordt voldaan;
- accessoires en seinen schakelen;
- de snelheid van locomotieven aanpassen;
- routes starten of in de wachtrij plaatsen;
- andere scripts starten;
- werken met IF/THEN/ELSE, WHEN/UNTIL, WHILE, WAIT, timers en tellers;
- eigen projectvariabelen gebruiken;
- berichten naar een aparte scriptlogging schrijven.
Een eenvoudig voorbeeld:
WHEN feedback["K31"].occupied
DO
LOG "Trein is aangekomen op K31"
SET accessory["A.1"].position = STRAIGHT
END
Scripts kunnen handmatig worden gestart, door een ander script worden aangeroepen of automatisch bij het openen van een project starten. Met de RailScript Monitor zijn actieve, wachtende, voltooide en mislukte scripts te volgen en te beheren.
De beschikbare objecten vormen samen een runtime-namespace. Daardoor kan een script bijvoorbeeld niet alleen vragen of een blok bezet is, maar ook welke trein het heeft gereserveerd, welke terugmelders erin liggen, waar rem- en stopposities liggen en wat de actuele toestand van de betrokken objecten is.
RailScript is beschikbaar in het Engels, Nederlands en Duits. De editor bevat contextgevoelige aanvulling: met Tab of Ctrl+Spatie verschijnen passende keywords, objectnamen en attributen.
De volledige uitleg en syntax staan hier:
https://railkernel.nl/nl/help-railscript.phpEen overzicht van alle beschikbare objecten en attributen staat hier:
https://railkernel.nl/nl/help-railscript-reference.phpDeze functionaliteit zit in de huidige RailKernel 12.01-build. Het betreft nadrukkelijk een eerste testversie: ik ben RailScript en de koppelingen met routing, locomotieven, accessoires en terugmelders nog volop aan het testen.
Opmerkingen, praktijkvoorbeelden en ideeën voor ontbrekende logische of speciale acties zijn daarom bijzonder welkom.
Een wat groter voorbeeld, dit staat ook in de Help :
-- Vertrek uit het station met een conducteursfluit
WANNEER train["Intercity 1200"].currentBlock = "Perron 1"
EN train["Intercity 1200"].placed
DOE
LOG "Intercity 1200 is aangekomen op perron 1"
ZET locomotive["NS 1200"].speed = 0
ZET timer["stationsstop"].durationMillis = 30000
ZET timer["stationsstop"].running = WAAR
WANNEER timer["stationsstop"].expired
DOE
-- Functie 3 bevat in dit voorbeeld de conducteursfluit.
ZET locomotive["NS 1200"].function[3].active = WAAR
ZET timer["fluit"].durationMillis = 1500
ZET timer["fluit"].running = WAAR
WANNEER timer["fluit"].expired
DOE
ZET locomotive["NS 1200"].function[3].active = ONWAAR
LOG "Vertreksein gegeven"
RIJD "Intercity 1200" VIA "Vertrek perron 1"
EINDE
EINDE
EINDE