Het hoofdstuk "Gebeurtenissen toevoegen | Automatisceren van aflopen" in de handleiding van de CS3 is kort, slechts vier bladzijden. Doorlezen kost dan ook niet veel tijd. Ik had echter wel op meer uitleg gehoopt. Eigenlijk is de rode draad van de handleiding dat de diverse functies, scherm, knoppen enzovoorts wel beschreven worden, de meeste althans, maar ik mis het overzicht. Het doet me wel wat denken aan een handleiding meubelmaken die bestaat uit een beschrijving van gereedschap dat daarbij gebruikt kan worden. Allerlei details, maar hoe maak ik dan een tafel? Dat moet ik blijkbaar zelf maar uitzoeken.
Als ik een klein stukje heb gelezen, en me al af begin te vragen wat ik daar nou mee moet, kom ik bij een onderdeel getiteld "Lokomotieven invoegen". Ik lees nog maar even verder, maar ik denk dat dat niet is wat ik zoek. Wat ik wil is dat twee treinen achter elkaar aanrijden, maar een trein mag alleen doorrijden naar het volgende blok als dat vrij is. Om welke trein het precies gaat, doet er daarbij helemaal niet toe, in tegenstelling tot de uitleg bij dit onderdeel.
Ik lees desondanks verder. Pas bijna aan het eind kom ik bij twee onderdelen met de informatie die ik zocht: "Afloopsturing via terugmeldcontacten" en "Afloopsturing met voorwaardelijke uitvoering". Samen een halve pagina, maar voortbordurend op wat er eerder in het hoofdstuk stond. Dat wordt dus puzzelen.
Dan pak ik het maar wat anders aan. Ik besluit eerst maar eens op te schrijven wat voor automatisch bedrijf ik precies wil, los van de manier waarop ik dat in de CS3 moet vastleggen.
De driehoek heeft drie blokken. Elk daarvan heeft contactrails aan beide kanten, K1 t/m K6, en daartussen ligt in elk blok rails zonder terugmelding.
De treinen zullen nooit zo lang zijn dat ze beide contactrails van één blok bezetten; het zal echter wél voorkomen dat een trein op twee naast elkaar liggende contactrails van verschillende blokken staat.
Wat een trein moet doen (of juist niet), hangt af van waar hij zich zelf bevind én van waar de andere trein is. Kern is dat er nooit twee treinen in hetzelfde blok mogen zijn. Bij een driehoek zullen de treinen altijd dezelfde kant op moeten rijden, keren is niet aan de orde. Voor elke trein wil ik dat hij naar het volgende blok rijdt als dat vrij is. Zo niet, dan moet de trein stoppen en wachten totdat dat blok alsnog vrij is.
De baan is symmetrisch, dus hoef ik dit maar voor één blok in detail uit te werken, voor de twee andere geldt hetzelfde. Het eerste blok heeft contacten K1 en K2. Voor het gemak neem ik aan dat K1 de inrijmelder is.
Conditie: K1 is bezet.
Gewenste afloop:
- Als het volgende blok bezet is, wacht dan in dit blok. Zodra het volgende blok vrij komt, rij weer verder.
- Als het volgende blok vrij is, rij dan door.
Hoewel het er bij deze formulering niet toe doet welke trein het betreft, zie ik in de handleiding geen mogelijkheid om dat zo te laten. Zou ik bij iedere afloop expliciet moeten opgeven om welke trein het gaat? Dat zal toch niet? Voor twee treinen is dat nog wel te doen, maar naarmate de baan groter wordt en het aantal treinen toeneemt, zal dat steeds onhandiger worden.
Ik echter een nog groter probleem, verborgen in de formulering "als het volgende blok bezet is". Ik heb geen volledige massadetectie, en dat zou ook niet nodig moeten zijn. Maar hoe kan ik dan bij een afloop met voorwaardelijke uitvoering testen of er een trein in het volgende blok staat? Als hij tussen de twee contactrails staat, geven beide melders immers aan dat ze onbezet zijn. In een computerprogramma zou je gewoon per trein kunnen bijhouden waar hij is, maar hoe moet dat hier?
Ik denk dat dat niet gaat, dus dan maar iets anders proberen.
Conditie: K1 is bezet.
Gewenste afloop:
- Als het volgende blok bezet is, rij dan langzaam door tot op de uitrijmelder.
- Als het vorige blok bezet is, rij dan zonder af te remmen door naar het volgende blok.
Conditie: K2 is bezet.
Gewenste afloop:
- Als het volgende blok bezet is, wacht totdat het vrij komt. Dat is het geval wanneer het vorige blok bezet is.
- Als het vorige blok bezet is, rij door.
Zo zou het moeten werken, denk ik.
Maar wacht even, ineens begrijp ik de opmerking van Leen, dat ik (virtuele) seinen nodig heb! Met de stand van zo'n sein kan ik immers precies bijhouden of een blok bezet is of niet!
Conditie: K1 is bezet.
Gewenste afloop:
- Zet het sein voor blok 1 op rood om aan te geven dat het bezet is.
- Als het volgende blok bezet is (ofwel als het sein van het volgende blok rood is), rem dan af en rij met heel lage snelheid verder.
- Als het volgende blok vrij is (ofwel als het sein van het volgende blok groen is), rij dan zonder af te remmen door.
Conditie: K2 is bezet.
Gewenste afloop:
- Als het volgende blok bezet is, stop zo snel mogelijk (rijregelaar in één keer naar 0 - bij lage snelheid normaal, bij hoge snelheid een noodstop en dat is helemaal realistisch).
- Als het volgende blok vrij is, rij (op normale snelheid) naar het volgende blok.
Conditie: K2 wordt vrijgegeven door een uitrijdende trein.
Gewenste afloop:
- Zet het sein voor blok 1 op groen om aan te geven dat het vrij is.
De eerste twee condities zijn statische toestanden, maar die laatste niet. Dat is een toestandsovergang van K2, van "bezet" naar "vrij". Dat moet ik vast en zeker anders inrichten, dat wordt puzzelen.
Dit geheel geldt ook voor de andere blokken. En alles moet zelfs dubbel als ik het expliciet voor elke trein moet opgeven. Dit werkt dan ook nog maar voor één richting. Ik begin te vermoeden dat het invoeren voor grote banen een enorme klus is, en nog foutgevoelig ook. Dat zou wel eens een goede reden kunnen zijn om over te stappen op een computerprogramma, zelfs als de CS3 de automatische besturing in principe nog aankan.
Het lezen en vooral het nadenken heeft aardig wat tijd gekost, maar dat geeft niet, ik vermaak me er wel mee. Maar ik moet nog steeds beginnen met invoeren in de CS3.