zondag 21 januari 2024

deKoder, even een zijsprong..

Het programma  WMapp is nu zo ver dat alles wat ik tot nu toe op mijn baan heb gemaakt kan worden aangestuurd. Nog lang niet af natuurlijk, dat duurt nog wel even. Even wat anders doen, een stukje scenery. Ik heb bedacht een segment draaischijf, 2 standen. Geplaatst in een locloods met twee deuren. Loc gaat de ene deur in en komt de andere deur weer uit. Rest van het verhaal achter dit stukje scenery zal ik de lezer besparen. Het model voor de segment draaischijf getekend in onshape en in het verre China laten 3D printen. De schijf wordt aangedreven door een 28byj-48 stappenmotor. De deurtjes straks door twee servo's en dan zijn er vast ook nog wel knipperlichten en seinen te vinden in het project. Nodig zijn dan een stepperdriver, servo drivers en andere logische schakelingen. Ik kwam daardoor op het idee van een arduino-project welke een stepperdriver en servodrivers heeft, en outputs voor leds. En logica om alles met elkaar te laten samen werken. Maar zo een 'module' zou geschikt zijn voor nog veel meer andere zelfbouw modelspoor projecten, denk dan aan een spoorwegovergang, spoor draai- of hefbruggen, kranen en nog veel meer. En besloten om er een arduino project van te maken. Ik hoop komende Houten beurs ze bij me te hebben. Met zo een project ben ik meestal een 3 maanden bezig dus dat verklaart waarom er weinig posts de laatste tijd op dit blog kwamen. Blog daarom maar opgewaardeerd en zal ik ook  zijsprongen als deze beschrijven. In het blog kan ik veel meer uitweiden over de grote lijnen en het hoe en waarom, de handleiding, die voor dit project echt 'huge' wordt, volgt later. 

Project deKoder. 

Bestaat uit een standaard arduino uno met daarop gestoken een speciale deKoder shield die ik heb ontworpen  en ook weer bij mijn chineze vrienden heb laten maken.

Aansluitingen zijn er voor een DCC signaal, voeding, een 28byj-48 stappenmotor, 2 servo's, 2 sensoren, 4 drukknoppen en 6 aan/uit outputs.

Op de shield 4 drukknoppen en een reset toets. Een 4-digit 7segment display. Dit samen is dit de ui. (User interface)

In de sketch, het programma in de arduino, is opgenomen de aansturing van de stappenmotor en servo's. Deze hebben minimaal 2 en maximaal 8 instelbare standen. Ook in het project 8 timers. Iedere timer heeft een 'aan'tijd en een 'uit'tijd, deze worden afwisselend afgeteld. Na aflopen van een timertijd kunnen tot max. 6 verschillende of dezelfde  acties worden ingesteld. Deze worden na elkaar uitgevoerd. Wanneer de aantijd begint wordt de actie aangezet, na afloop van de aantijd wordt de actie uitgezet. Na afloop van de uittijd en weer het begin van de aantijd wordt de volgende actie aangezet en zo door totdat alle acties zijn gedaan. Dat is dan het einde van 1 cyclus. Het aantal cycli kan worden ingesteld of continue zodat dit gewoon door blijft gaan. 

Die acties kan zijn het omzetten van stappenmotor of servo, aanzetten van outputs. Maar het meest bijzondere is dat de timers kunnen worden genest, je kan met een timer een timer starten, die op zijn beurt weer een andere timer start die dan iets doet. Hiermee kunnen hele sequenties van gebeurtenissen worden gestart. 

Als voorbeeld mijn segmentdraaischijf. Over de DCC een commando sturen om de schijf naar stand 2 te zetten. De segment schijf is nu bezet. Daar is in voorzien met een functie die een instelbare actie aanzet. Output'bezet' is daar bv.voor te gebruiken. Deze 'bezet' output is dan optioneel weer te gebruiken voor een bezetmelding. De stappenmotor en de servo's  hebben een mogelijkheid om een timer te starten na het ontvangen van een draaicommando. De motor wacht met draaien totdat deze timer is afgelopen. Deze timer zet de beide servo's om, zodat de deuren opengaan. Ook start deze timer een andere timer welke is ingesteld op een wisselend knipperlicht op de outputs 1 en 2. Na aflopen van deze timer doet de stappenmotor de beweging. Daarna wordt de bezetmelding weer vrijgegeven en een timer gestart die de deuren weer sluit en de knipperlichten uitzet.

Wordt vervolgt...



zaterdag 18 november 2023

Automatische rijden, het algoritme

Het algoritme beschrijft hoe het automatische rijden in elkaar steekt. De versie V.20 die nu te downloaden is maakt onder veel meer het automatisch rijden mogelijk. Met deze versie kan ik nu weer verder met de baan en het baanontwerp. Vooral de juiste plaatsing van melders, waar ze komen, is erg bepalend voor het automatische rijden. Laat ik dit van af nu autorijden noemen. Wissels moeten op tijd worden omgelegd en locs moeten op tijd stoppen. Ik gebruik hier een loc die goed is afgesteld, gezien snelheden, optrek en afrem tijden en een loc die dramatisch slecht is afgesteld, rijd veel te langzaam en optrekken en vooral vertragen duurt veel te lang. Perfect dus om mee te testen of autorijden met alle typen locs is te doen. 

Onderstaand verhaal is heel erg globaal en ook voor mezelf bedoeld zodat ik later kan nalezen hoe het ook al weer ongeveer in elkaar steekt.

Het algoritme.
Iedere loc heeft een eigen rijvenster. Een knop wisselt tussen handmatig of autorijden. In autorijden mode is er een doorlopend continue proces. Een knop wisselt tussen rijden en wachten. 
In mode-rijden wordt een flag 'autostart' gezet. Een wacht-lus wordt gebruikt om op gewenste plaatsen pauzes in het proces te maken. In mode-wachten wordt deze wacht-lus oneindig gemaakt zodat het autorijden proces voor deze loc uiteindelijk niet verder gaat. Resultaat is een loc die nadat het op wachten is gezet doorrijdt naar het laatste station wat door deze loc is bezet en daar dan stopt en blijft staan omdat er door het stopzetten van het routezoeken proces geen routes meer zijn. 
Zet je de loc weer naar handmatig rijden, met de knop stop/auto. Dan wordt alles wat deze loc aan bezetmeldingen, routes gewist. 
De flag autostart is een onderbreking in het doorgaande proces van autorijden, wordt autostart 'waar' gezet met de knop 'rijden' dan wordt de onderbreking weggehaald, start het proces of het proces wordt hervat.

Auto is een rondgaand proces, het ' begin' is nu enkel voor het verhaal. 
In het loc-venster wordt een 'auto-clock' gestart. Om de 20ms worden achtereenvolgens twee processen aangeroepen. AutoDrive en AutoRoute. 
AutoDrive aangeroepen door de clock >
Getest wordt of de doelmelder in het huidige route bezet is. >
Als bezet, is doelstation bereikt. Loc gaat vertragen naar stop, wissels en melders worden weer vrijgegeven, route wordt uit de lijst met routes voor deze loc gehaald.
De volgende route in deze lijst wordt ingesteld als nieuwe route. Loc gaat versnellen. Nieuw doelstation.
Als doelmelder niet bezet, loc gaat versnellen, als er geen vervolgroute is, zoeken naar een vervolgroute.   

Als er geen vervolgroute is gevonden kan dit komen doordat alle routes bezet zijn, dan wordt wacht-lus  gestart, na aflopen van de wachttijd wordt opnieuw gezocht naar vrije route. Of er zijn geen routes meer in deze rijrichting dan wordt de rijrichting gekeerd een wacht-lus wordt gestart. Na aflopen wordt opnieuw gezocht naar routes nu in de omgekeerde richting. 

Rijd de loc niet een route maar zijn er wel routes voor deze loc bepaald, dan wordt de eerste route in de lijst ingesteld. 

Zijn er geen nieuwe routes gaat de loc door met vertragen tot stop.

AutoRoute periodiek aangeroepen door auto. Autoroute werkt met een routefase, bij iedere doorloop wordt een fase doorlopen. Autoroute bepaald de routes die een loc gaat rijden, daarbij worden de bepaalde routes bezet gesteld. Als er geen routes hoeven te worden gezocht dan staat de route fase op een idle fase. Helaas daar weet ik geen nl woord voor, een fase die gewoon niks doet. Vanuit andere delen van het programma kan een 'start-zoeken-route-fase' worden ingesteld. Bekend moet zijn de rijrichting, vooruit  of achteruit rijdend, de stand, neus naar links  of neus  naar rechts en de melder van waaruit een vrije route moet worden gezocht. 

Er wordt een lijst gemaakt met alle mogelijke routes. Routes in de verkeerde rijrichting worden eruit gefilterd. 

Een route bestaat uit een onbeperkt aantal raildelen, rechte of gebogen rails, wissels kruisingen. Ieder railstuk heeft een oriëntatie van links naar rechts. En 1 of meerdere aansluitingen. Als voorbeeld een recht stuk heeft 2 aansluitingen, waar de trein het railstuk opkomt en waar het de rail verlaat. Van en naar heb ik dat in het programma genoemd. Een wissel heeft er drie en een kruising 4. Een draaischijf, nu nog niet in WMapp geïmplementeerd, dat volgt nog, heeft misschien wel 30 aansluitingen.

Railstukken kunnen in stappen 45graden worden gedraaid, zodat er per single railstuk 8 verschillende mogelijke aansluitingen zijn. Bij een rechte rail ligt de naar aansluiting in het verlengde van de van aansluiting dus is de van aansluiting bv.1 dan is de naar aansluiting 5. De van aansluiting is altijd 1,2,3 of 4 en de naar aansluiting is altijd 5,6,7 of 8. Om nu niet alle lezers te laten  afhaken zal ik de andere railstukken niet behandelen.

Een loc staat met zijn neus naar rechts en rijd de railstukken van de van aansluiting naar de naar aansluiting. Nu zit er in de route een 180 graden bocht. Aan het einde van de bocht staat de loc met zijn neus naar links. Dit wordt opgemerkt tijdens het bepalen van de route. Deze route met die bocht heeft een van aansluiting van 5 en een naar aansluiting van 5 dus is gekeerd. Dit wordt als een flag in de route meegeven. Is de loc klaar met het rijden van deze route dan wordt de oriëntatie, de stand van de loc omgezet. Ook te zien aan het plaatje in het rijvenster.  Een loc met zijn neus naar links rijdt de railstukken van de naar aansluiting naar de van aansluiting. Vanzelfsprekend bij vooruit rijden, bij achteruit rijden andersom. 

Zijn er geen routes meer  in de lijst na het filteren op rijrichting, dan stopt het zoeken, met terugmelding dat er geen routes in deze richting zijn. Rijrichting wordt gekeerd, een wachtfase gestart en na aflopen van die wachtfase worden opnieuw alle mogelijke routes bepaald en op rijrichting gefilterd. Haast onmogelijk is het dat er dan opnieuw geen routes worden gevonden, immers die loc is toch ook op deze plek gekomen, maar is dat toch zo dan wordt het autorijden voor deze loc afgesloten. 

Staat er na het filteren op rijrichting nog 1 route in de lijst. Dan hebben we te maken  met een routeblok. Een stuk rails met twee of meer melders zonder wissels of andere aftakkingen. Voor iedere route, dus van melder naar melder, in dit routeblok wordt nu een route aangemaakt in de lijst routes voor deze loc. Melders worden bezet gezet. Op het baanplan is te zien hoe 1 voor 1 de melders de kleur van de loc krijgen. Deze routes, de delen van een routeblok, kunnen niet bezet zijn. Voordat een route voor een loc kan worden ingesteld naar een routeblok wordt gekeken of alle melders in dat routeblok vrij zijn. Is dat niet zo, dan kan deze route niet worden ingesteld.

Staan er na het filteren op de rijrichting meerdere routes nog in de lijst, dan gaan we de bezette routes eruit filteren. Dit gaat in meerdere stappen.

Is het doelstation, melder van de geteste route vrij. Zijn alle wissels opgenomen in deze route vrij. (zijn alle andere blokkades, als een gelijkvloerse kruising vrij. In v2.2 nog niet geïmplementeerd) en (last but not least, and by far the most complex one) zijn alle melders van een railblok opgenomen in de geteste route vrij.

Alle bezette routes zijn dus uitgefilterd.

Zitten er nu geen routes meer in de lijst, dan zijn alle mogelijke routes dus bezet. Het zoeken stopt nu en aan het zoekproces wordt gemeld dat alle routes bezet zijn. Een wachtfase wordt weer ingesteld en na een tijdje gaan we weer opnieuw zoeken. 

Is er nog 1 route mogelijk na het filteren op bezet, dan wordt deze aan de lijst routes van de loc  toegevoegd. Melders, wissels en blokkades worden apart bezet gezet.

Zijn er meerdere routes overgebleven, dan wordt daaruit een willekeurig keuze gemaakt en deze wordt aan de lijst te rijden routes van de loc toegevoegd.

En dit werkt dus nu ....wordt vervolgd.

dinsdag 7 november 2023

Update v2.02

 Vandaag een update op de website gepubliceerd. 

Wat kan er nu met WMapp?

  • 3 arduino projecten van Wisselmotor.nl kunnen worden aangesloten met een USB kabel. PenDelDCC, MelDers en DCCmonitor. Door DCCmonitor aan te sluiten zijn de verschillende DCC commando beter te zien en te filteren. MelDers is als terug melders monitor te gebruiken op een standaard S88 systeem. Ook geeft MelDers meldingen zonder dat het aangesloten is op een S88 systeem. Te gebruiken als systeem voor bezetmeldingen of andere gebruikers input naar WMapp. PendelDCC kan met WMapp volledig worden ingesteld en bedient wat het programmeren van routes en alle andere zaken in PenDelDCC veel eenvoudiger maakt. In combinatie met WMapp is PenDelDCC ook een volledige DCCcentrale. Via de USB aansluiting stuurt WMapp commando's die door PenDelDCC als DCC commands op de rails worden gezet.
  • Baanplan. Na het installeren van WMapp opent het programma, het vraagt direct om een bestand 'actievelocs' op een door jouw te kiezen locatie  op te slaan. Een systeembestand wat noodzakelijk is. In het grote, nu nog lege witte middenvenster kun je een baanplan tekenen. Klik daarvoor op de knop baanplan wat een nieuw venster opent. Het tekengebied is aan te passen met de plus en min knopjes op de randen. Met een knop links boven in de hoek kun je een raster laten verschijnen wat het tekenen makkelijker maakt.  Klik op een vakje in het raster opent een venster waarmee je baanstukken, rails en andere zaken in het vakje kunt zetten. Rechte en kromme rails, kruising, wissels enzo. Eigenschappen van bv.een wissel als dccadres kunnen hier worden ingevuld. Op railstukken kunnen melders met hun instellingen en eigenschappen worden geplaatst. Baanplannen kunnen met opslaan en laden worden opgeslagen en terugeladen. Het laatst bewerkte baanplan wordt automatisch na het starten van WMapp geladen.
  • In locomotieven kun je locs aanmaken en opslaan. Ook kun je ze toewijzen als actieve loc. De loc komt dan in een klein venster links. Een klik daarop opent het rijvenster van de loc. Er is een keuze tussen handmatig rijden of automatisch. In automatisch moet je de oriëntatie van de loc opgeven, hoe staat de neus en gaat het vooruit of achteruit. Verder de plek waar de loc op de baan staat. Actieve melders zijn rood, daar kun je uit kiezen. Druk op rijden en de loc gaat volledig automatisch rijden.
  • In baanontwerp kun je al melderacties aan maken. Melders worden natuurlijk gebruikt voor bezet of terugmelding, maar je kan ook een melder gebruiken voor een actie zoals bv. het omleggen van een wissel, met een fysieke schakelaar aangesloten op de melder. 
Best al veel, ik maak dit programma gelijk op met het maken van een nieuwe modelbaan, en de treinen rijden hier al vrolijk in het rond, totdat ze elkaar weer in een deadlock rijden, maar dat is voor een andere keer. 

Wordt vervolgt.....

donderdag 2 november 2023

Automatisch rijden(7), snelheden en afstanden

 Locs rijden nu met de laatste versie van WMapp automatisch routes. Nog heel veel fouten onderweg, verkeerde afslagen en deadlocks bij meerdere locs, maar voor een eenvoudig baanontwerp werkt het. 

Natuurlijk moeten de locs langzaam beginnen met rijden en op tijd afremmen om langzaam aan te komen in het volgende station. Zeker niet abrupt starten en stoppen. Al snel ga je dan denken aan snelheid en afstanden op een of andere manier meten. En een heel circus optuigen om deze waardes te gebruiken om versnellingen en afremmen te berekenen en deze waardes opslaan voor vervolgsessies. Veel treinenprogrammaas gebruiken dit principe. 

De snelheid per snelheidstap nauwkeurig bepalen met bv. mijn SpeedMeter arduino project of met een ander een hulpprogramma of een functie in het treinenprogramma. Deze gevonden waardes daarna in het programma ingeven. De afstanden tussen de meldpunten kunnen dan door het programma worden berekend. 

Maar goed bekeken, de lengtes van de trajecten zijn natuurlijk ook niet 'op schaal'.  Een wisselstraat in het echt bij grootspoor met een overall lengte van een kilometer is op H0 altijd nog een metertje of 9, en zoveel ruimte hebben we meestal niet op zolder. Dus snelheden op schaal resulteerd in treinen die veel te snel rijden. De snelheden instellen op dat het er gewoon zo realistisch als mogelijk uitziet is de praktijk.

Zeker hebben programma's als koploper en Itrain bewezen dat het op deze manier wel perfect kan werken. Maar kan het niet simpeler?

De hele reden waarom ik WMapp aan het maken ben is, afgezien van het feit dat het gewoon hartstikke leuk is om te doen en dat je apetrots bent op jezelf als het überhaupt lukt, dat het eenvoudig moet worden, en dat meten van snelheden en afstanden is zo een gedoe.  Ik wil gewoon een baan plan tekenen, loc op de rails en op start drukken en de rest moet vanzelf gaan. 

Dus wat heb ik bedacht. WMapp werkt met PenDelDCC als centrale. (Of met een door jezelf te maken USB>DCC interface). Geen multiprotocol centrale, alleen DCC en alleen 28 snelheidsstappen. Zeker kun je met CV instellingen curves maken in de relaties tussen deze 28 stappen. Maar, we houden het eenvoudig, in WMapp nemen we de verschillende snelheidsstappen alsof ze volledig lineair oplopen. 

In WMapp kun je voor een loc in het locvenster een max, med en min snelheidsstap instellen. Max de maximale snelheidsstap waarin de loc mag rijden, komt voor als een loc een route, traject rijdt en het opvolgende traject, route is al bepaald en gereserveerd. De loc gaat dan niet vertragen  en stoppen  maar rijd op volle snelheid het volgende traject in. Min is de minimale snelheidsstap die de loc kan rijden, dit wordt dus eigenlijk de eerste snelheidsstap. Gebruikt vooral in het laatste stukje van een traject wachtend tot de melder actief wordt en de loc stopt. Med, medium of gemiddeld. Is de lengte van een route, traject bepaald, waarover later meer, dan rijdt de loc in snelheidsstap med +2 extra stappen tot het punt waar het afremmen moet beginnen. Is de lengte van het traject nog niet bepaald dan rijdt de loc in de snelheidsstap med -2 stappen totdat de melder van het station waar de loc naar  op weg is actief wordt en stopt de loc. 

Het automatische rijden wordt aangestuurd door een klok. 2x Per seconde wordt gekeken of er iets aan het auto-rijden van een loc moet veranderen.  Als voorbeeld stoppen als de loc het doel heeft bereikt, of sneller of langzamer gaan rijden als dat mag of moet. Bij begin van een traject wordt een variabele die de lengte van het te rijden traject voorsteld op nul gezet. Zolang de loc rijdt, en dus nog niet het eindstation van dit traject heeft bereikt, wordt deze waarde op iedere klik van de klok, 2x per seconde dus, verhoogd met de snelheidsstap waar de loc dan in rijdt. Bij het bereiken van het eindstation wordt deze waarde als de lengte/snelheid van het zojuist gereden traject opgeslagen. De rijrichting wordt hierin meegenomen, een traject heeft voor iedere loc twee waardes vooruit en achteruit rijdend. Wordt  hetzelfde traject later weer een keer gereden dan wordt de nieuwe waarde met de eerder gemeten waarde gemiddeld en dit wordt dan als de nieuwe lengte/snelheid waarde voor deze loc in deze richting rijdend onthouden.

Lengte/snelheid. Stel een gemeten waarde is 112. In snelheidsstap 28 rijdend is de loc dan 4 seconde onderweg op dit traject. Rijdend in snelheidsstap 1 duurt deze rit dan 112 seconden. In snelheidstap 8 112/8=14 seconden. De snelheid van de loc wisseld voortdurend en het gereden deel van het traject wordt in mindering gebracht op de totale afstand/snelheid. Op ieder moment is dus bekend hoever er nog moet worden gereden op dit traject. Van de huidige snelheid kan worden berekend hoeveel van deze afstand/snelheid nodig is om de loc met de minimale snelheid op het station te laten aankomen, dus wanneer het afremmen moet beginnen. 

En dit werkt dus. Al geïmplementeerd in WMapp. Versnellen, vertragen en stoppen wordt volledig automatisch bepaald. Wat je als gebruiker nog wel moet doen is de snelheden max, med en min instellen zodanig dat het er allemaal gewoon goed en realistisch uitziet.

Deze versie heb ik gepubliceerd en kun je downloaden van de website. Zoals vermeld zit nog vol met fouten, bugmeldingen naar mij hebben nu nog geen nut, er wordt aan gewerkt. Wel ben ik geïnteresseerd in hoe het installatie proces is verlopen of het überhaupt is gelukt, een mailtje hierover wordt op prijs gesteld.

Ik ga nu beginnen aan een 'afstand' bediening op de baan, om accessoires te kunnen schakelen zonder dat ik achter ' de computer' hoef te zitten. Ja ik weet er zijn prachtige digitale oplossingen voor als loconet of allerlei WiFi gedoe met apps, maar ook hier geldt ik wil iets eenvoudigs..

Wordt vervolgt....






dinsdag 24 oktober 2023

Automatisch rijden(6), Richting

De richting waarin een loc, trein gaat rijden. Lijkt eenvoudig, vooruit of achteruit. Maar een loc kan met zijn neus naar rechts staan of met zijn neus naar links. Met een baanplan in essentie een heen-en-weer nog steeds geen probleem, voor de start geef je de rijrichting en de stand van de loc op de rails aan.

Maar een baanplan met ovaal, rondgang of keerlus dan is een links/rechts aanduiding onvoldoende. Voor een rondgang kan dit nogwel, als we de richting niet links/rechts maar vanuit het midden bezien van het ovaal en dan denken als 'neus met de klok mee' of 'neus tegen de klok in'. Dit is zoals het in PenDelDCC is gedaan. 

Maar een keerlus dat gaat niet. Heeft de loc de keerlus gereden dan staat het op dezelfde rails in de zelfde rijrichting maar gekeerd op de rails en worden vervolg trajecten in de verkeerde richting gezocht.

De oplossing is gevonden in het bepalen van de trajecten, of routes. Een traject brengt de trein, loc van een beginmelder of station naar een doelmelder. Traject bestaat uit een rits railstukken aan elkaar, ieder railstuk in het traject heeft twee aansluitingen. Afhankelijk van de richting waarin dit traject wordt gereden, heeft een railstuk een aansluiting waar de trein erop komt en een aansluiting waar de trein het railstuk weer verlaat. Bepaald wordt de beginaansluiting van het hele traject en de eindeaansluiting. 

Van beide aansluitingen wordt bepaald of ze rechts of links ten opzichte van het centrum van het baanplan zitten. Zit een van de aansluitingen aan de ene kant en de andere aan de andere kant, dan wordt de stand van de loc door het rijden van dit traject niet gekeerd, zitten beide aansluitingen aan  dezelfde kant dan zal de loc na het rijden van dit traject gekeerd zijn.

Door dit mee te nemen in het bepalen van het volgende te rijden traject worden de juiste vervolgtraject gevonden in de goede rijrichting.

Mee eens, een ingewikkeld verhaal, inmiddels geïmplementeerd in WMapp en werkt perfect.

Een ander issue is het bepalen wanneer een trein het eindstation of doelmelder hoeft  bereikt.  Arduino project MelDers stuurt het bezet worden of weer vrij komen van een melder over de USB aan WMapp.

Periodiek testen we tijdens het rijden van het traject of de doel melder bezet is en is de loc op einde traject aangekomen. Maar...dat werkte niet goed, als de trein snel rijdt is de periode dat de melder actief is om meerdere redenen te kort. 

Oplossing is een lijst met melders. Als een route aan een loc wordt toegewezen dan wordt de doelmelder in deze lijst opgenomen. Wordt een melder actief, dan wordt gekeken of deze melder in de lijst voorkomt en als dat zo is dan wordt aangegeven dat deze bezet, actief is. Deze lijst wordt nu periodiek bekeken door het proces van het rijden van een loc op dit traject. ziet deze dat de melder bezet is, dus einde traject, onder nog veel meer wordt dan deze melder gewist uit deze lijst. Op deze manier onderbreekt het actief worden van de doelmelder het proces van rijden van een traject in plaats van dat af en toe wordt gekeken of de loc al in het doelstation is aangekomen. En dit werkt zonder fouten bij alle snelheden.

Wordt vervolgd....



donderdag 19 oktober 2023

Automatisch rijden(5), De eerste rit

 In deel 4 is bewezen dat het mogelijk is om met alleen het tekenen van een baanplan trajecten en routes te bepalen die een trein, locomotief kan rijden. Maar het is niet nodig alle mogelijke trajecten te bepalen voor het rijden. In het rijvenster van een loc kiezen we het station waar de loc staat. Een klik op het tekstvak 'station' toont een lijst met alle bezette melders die niet door een andere loc zijn bezet. Een klik in de lijst kiest het station waar de loc is. Ook kan de oriëntatie van de loc met een paar klikken worden ingesteld. Er zijn dan 4 mogelijkheden. Neus naar links of rechts en natuurlijk vooruit of achteruit rijdend. Deze instellingen zijn voorlopig even te bereiken met een knop die wisselt tussen 'auto' en 'stop'. Als auto dan kan de loc handmatig worden gereden, knop zet dan de loc naar automatisch  rijden. Dan toont de knop stop en werkt de knop als noodstop die het automatisch rijden en de loc direct stopt.  

Verder zie je in auto mode een knop die wisselt tussen rijden en wachten. Bij rijden start het de loc, bij wachten rijdt de loc door tot zijn doelstation en gaat dan niet meer verder. 

Dit zal er in latere versies heel anders uit gaan zien maar is nu nodig om de vele 'onder de motorkap functies' te kunnen programmeren. 

Dus huidige positie en richting waarin de loc gaat rijden gekozen en een druk op rijden en het automatische proces wordt gestart. 

In gewone mensentaal neergeschreven gaat dan het volgende gebeuren.

  • Alle mogelijke trajecten naar een ander station (melder)  worden bepaald in deze richting waarin de loc gaat bewegen. Deze worden in een lijst gezet met een volledige beschrijving van dit traject. Wissels en de stand van de wissel alsmede eventuele blokkades, denk dan aan een vaste gelijkvloerse kruising,  worden in deze beschrijving vermeld. Deze beschrijving heeft een opmaak die later weer door het programma kan worden gelezen. Het aantal gevonden trajecten is onbeperkt. Als voorbeeld een schaduwstation met 10 sporen. Vanuit de baan naar het schaduwstation zijn er dan minstens  10 verschillende trajecten mogelijk naar de 10 verschillende opstelsporen.
  • De lijst met mogelijke trajecten wordt nu doorzocht of er trajecten zijn waarin elementen zitten die bezet zijn door een andere loc. Wissels, blokkades of de stations. Deze 'bezette' trajecten worden uit de lijst verwijderd.
  • Uit de resterende trajecten wordt nu willekeurig eentje uitgezocht en daarvan wordt weer een traject gemaakt in een andere lijst met trajecten die deze specifieke loc achter elkaar gaat rijden.
  • Maar soms zijn er geen trajecten te vinden in deze richting. Denk daarbij aan een opstelspoor  of kopstation. Dan wordt de rijrichting omgezet. Daarna begint het proces opnieuw nu in de tegengestelde richting. Worden ook in deze richting geen trajecten gevonden, wat eigenlijk niet kan want hoe is die trein daar dan gekomen, dan wordt het automatisch rijden gestopt.
  • Er is dus een traject bepaald, trajectbeschrijving wordt uitgelezen, het doelstation waar de loc naar toe gaat. De wissels worden 1 voor 1 met tussenpozen ingesteld. Verder worden de opgenomen wissels, blokkades en het doelstation opgenomen in lijsten van respectievelijk bezette wissels bezette melders, en bezette blokkades. Het beginstation was al bezet gezet bij het kiezen waar de loc staat.
  • Nu wordt de snelheid van de loc ingesteld en gaat de loc rijden. Vertragen  en versnellen en afstands en snelheidsmetingen daar doen we nu nog niet aan dat is voor later.
  • De loc rijdt. Gekeken wordt naar mogelijke vrije trajecten bezien vanuit het doelstation en natuurlijk de huidige richting. Hetzelfde proces als hierboven al beschreven. Is er succesvol een 'vervolgtraject' bepaald dan wordt deze in de lijst van te rijden trajecten door deze loc gezet. We kunnen zo meerdere vervolg routes of trajecten  vastleggen maar voorlopig houden we het even bij 2. Het traject wat wordt gereden en het traject wat daaropvolgend wordt gereden. 
  • Loc bereikt het doelstation. Het gereden traject gaat uit de lijst, het vervolg traject is nu het huidige traject, doelstation wordt ingesteld, loc rijdt gewoon door. Een heel circus van bezet stellen en vrijgeven van melders, blokkades en wissels volgt waar ik nu even niet op inga. Is er geen vervolg traject gevonden, zoals bij alles bezet of een kopstation, opstelspoor dan stopt de loc. 
  • Loc rijdt dus altijd door van een opstelspoor naar een ander opstel spoor. Daar wordt gekeerd en loc rijdt de andere richting op.
Dat werkt dus nu. Het te downloaden versie heeft dit nog niet. Er zijn nog veel te veel andere issues die nog moeten worden toegevoegd voordat het automatisch rijden in de praktijk kan worden gebruikt.

Wordt vervolgd.....

zaterdag 30 september 2023

Automatisch rijden(4), richting

 In deel 3 ging het over het analyseren van de baan. Dat kan dus. Automatisch vanuit een melder kan worden bepaald hoe de verbindingen zijn naar andere melders. In het baanontwerp is dat een vast gegeven, een railstuk heeft dan altijd een aansluiting waar de trein het railstuk binnenkomt en een aansluiting, of meerdere aansluitingen bij wissels ofzo, waar de trein het railstuk weer verlaat. Dat is in een links en rechts oriëntatie vast te leggen, of zoals werkelijk bij het baanplan van WMapp in een aansluitnummer van 1 totenmet 8. Waarbij het lagere nummer altijd het ingaande en het hogere nummer het uitgaande aansluitpunt is. Ja, beste lezer, nu wordt het ingewikkeld.

Maar wel vast dus. Maar nu die trein, die is gezien de richting niet vast, hij kan vooruit of achteruit rijden en hij kan met zijn neus naar links of naar rechts staan. Verschillende rijrichting dus afhankelijk van deze twee parameters. Ach bij een heen- en weer baanplan redelijk constant, trein staat altijd met zijn neus dezelfde kant op, maar is er een ovaal of rondje of keerlus? Of draaischijf? Dan wisselt deze stand. 

Stand en richting kunnen bij start van het automatisch rijden worden ingegeven in WMapp maar zijn daarna dynamisch en worden in het automatisch rijden proces aanpast. Trein kan keren in een opstelspoor, of wanneer de treinen elkaar hebben vastgezet, deadlock is daar een goed veel gebruikt Nederlands woord voor. 

Bij draaischijven en keerlussen kan de stand van de loc veranderen. 

Daar ben ik dus nu best wel even een paar dagen mee aan het stoeien geweest en denk daar de oplossing voor gevonden te hebben. 

Wordt vervolgt....

RoBoot (2)

  Afbeelding toont de huidige fase van Project RoBoot, rare naam, vreemd project, maar af en toe moet je de lat voor je zelf wat hoger of mi...