Software

Inleiding

De software voor de treinbesturing is geschreven in QBasic. De programmatuur is speciaal geschreven voor mijn treinbaan zodat ik “intelligentie” kon inbouwen. Het programma toont alleen de mogelijke acties (menukeuzes) die op dat moment uitvoerbaar zijn op de treinbaan. Acties die niet mogelijk zijn of kunnen leiden tot botsingen zijn niet beschikbaar voor de gebruiker. Door deze ingebouwde intelligentie kan de software de treinbaan volledig “at random” besturen zonder dat er ongelukken gebeuren. Tenminste… in theorie. In de praktijk kunnen wagons ontsporen en dit kan de software niet zien! Het blijft dus een spannende vertoning zo’n automatisch gestuurde treinbaan.

 

Codering

De baanvakken, seinen, wissels en contactrails zijn genummerd en corresponderen met de te bedienen of uit te lezen relais. Dit vergemakkelijkt het programmeerwerk aanzienlijk.  Klik hier voor de codering.

 

Kunstmatige intelligentie

 

Programma

Programma

Welke acties mogelijk zijn op de spoorbaan wordt bepaald door slechts enkele variabelen. De loop van de treinen wordt bepaald door de baanvakken en seinvakken die vrij zijn op dat moment en door de rijrichting.

De variabelen Sein (S) en Baanvak (B) kennen de volgende waarden:

  •  0 = Baanvak of seinspoor is vrij
  •  1 = Baanvak of seinspoor is bezet, trein      rijdt met de klok mee
  • -1 = Baanvak of seinspoor is bezet, trein rijdt      tegen de klok in

Bij sein 1 staat bijvoorbeeld een trein in de richting met de klok mee: S1=1. Als baanvak 1 vrij is B1=0 mag het sein op groen en kan de trein gaan rijden. De variabelen veranderen dan van waarde: B1=1 en S1=0. Baanvak 1 is nu bezet en het seinspoor is vrij. Een sein gaat pas weer op rood als er ook daadwerkelijk een trein moet stoppen. Verder bepaalt de rijrichting of het mogelijk is om een bepaalde wissel te gebruiken.

De waarden van de variabelen (de voorwaarden) bepalen welke acties mogelijk zijn:

 

Actie

B1 

B2 

B3 

S1 

S2 

S3

Vertrek van spoor 1

0

<>0

Vertrek van spoor 2

 0

<>0

Vertrek van spoor 3

 0

<>0

Aankomst op spoor 1

 <>0

 0

Aankomst op spoor 2

 <>0

 0

Aankomst op spoor 3

 <>0

 0

Van spoor 1 naar 2

 1

 0

Van spoor 2 naar 1

 0

 1

Van spoor 2 naar 3

 -1

 0

Van spoor 3 naar 2

 0

 <>0

Van spoor 1 naar 3

 <>0

 0

 0

 0

Van spoor 3 naar 1

 0

 0

 <>0

 0

Parade zijspoor 2

 <>0

Parade spoor 1 vanaf spoor 2

 0

 1

Parade spoor 1 vanaf spoor 3

 0

 0

 1

Parade spoor 3 vanaf spoor 2

 -1

 0

Parade spoor 3 vanaf spoor 1

 1

 0

 0

Parade spoor 3, rijrichting veranderen

 -1

Wisselen spoor 1 en 2 op spoor 2

 1

 0

 1

Wisselen spoor 1 en 2 op spoor 1

0

1

 1

Wisselen spoor 2 en 3 op spoor 3

 -1

 1

 1

Wisselen spoor 1 en 3 op spoor 1

 0

 0

 1

 1

Wisselen spoor 1 en 3 op spoor 2

 1

 0

 0

 1

Hierbij gelden de volgende regels:

  • Een sein gaat alleen op rood als er ook een trein      moet stoppen. Bij een rood sein staat altijd een trein.
  • Als sein 2 op rood staat worden de wissels 2      omgezet zodat een volgende trein altijd over het zijspoor gaat.
  • Bij de acties waarbij een wissel wordt omgezet      wordt de wissel ook altijd weer terug gezet.
  • Bij sommige acties wordt eerst de rijrichting op      spoor 3 veranderd zodat de trein wissel 4 kan gebruiken om naar spoor 2 te      gaan.

Er zijn natuurlijk nog veel meer acties of combinaties van acties te verzinnen maar dit zijn steeds de basishandelingen.

Programma

Het besturingsprogramma is geschreven in Qbasic. Door het programma in kleine onderdelen op te splitsen blijft het een overzichtelijk en begrijpelijk geheel.  Het programma bestaat uit de volgende onderdelen:

Besturing
Toont het scherm met de mogelijke acties op dat moment (menukeuzes). De gebruiker bepaalt welke actie moet worden uitgevoerd. De computer kan zelf ook een keuze maken. Na het uitvoeren van de actie komt het programma weer terug bij de besturing.

Modules
Elke module (gekozen actie) bestaat in feite uit een rijtje uit te voeren taken. In een bepaalde volgorde en op het juiste moment bedienen van seinen en wissels. Dit gebeurt op basis van de terugmeldingen van de railcontacten.
– SeinRood(x): Zet sein x op rood en zet trein op seinvak x stil. (actie 2, 4, 6)
– SeinGroen(x): Zet sein x op groen en laat trein op baanvak x vertrekken. (actie 1, 3, 5)
– NaarSpoor(x): Wisselt treinen van baanvak (actie 7 t/m 12). De baanspanning wordt iets lager gezet zodat de trein langzamer over een wissel rijdt.
– Parade(x): Treinen op gekozen baanvak laten rijden (actie 13 t/m 18)
– Wisselen(x): Treinen van baanvak laten wisselen (actie 19 t/m 23). De baanspanning wordt iets lager gezet zodat de trein langzamer over een wissel rijdt.

Taken
Elke taak bestaat in feite uit het in de juiste volgorde uitvoeren van subroutines met de juiste parameters.
– Wissel(x): Zet wissel x om. De default 0 is rechtdoor op hetzelfde baanvak.
– Sein(x): Zet sein x om. De default 0 is groen.
– Contact(x): Wacht op railcontact x. Default is 0, contact=1.
– Wachttijd(x): Wacht x seconden
– Kalibreren: Instellen van de klok voor de dimmer.
– SpanningNul: De spanning van de dimmer op 0 Volt zetten. (Meten dat de stuurspanning ook daadwerlijk 0 Volt is.)
– SpanningDefault: De spanning van de dimmer op 11 Volt zetten. (Lagere snelheid om over wissels te rijden.)

Subroutines
Programmacode die regelmatig wordt gebruikt en in feite functioneert als een “driver” om de printerpoort aan te sturen of het scherm aan te sturen.
– Puls(x): Het aansturen van de printerpoort waarmee de relais x wordt bedient.
– Lees(x): Het uitlezen van de printerpoort om een railcontact x te meten.
– Scherm: Toont het scherm met de standen van wissels en seinen
– Opties: Bepaalt en toont de beschikbare modules op dat moment. Hier worden de randvoorwaarden getoetst of een actie uitvoerbaar is.

Je kunt het programma downloaden maar het is speciaal geschreven voor mijn treinbaan en het is nog in ontwikkeling. Je zult het dus zelf moeten aanpassen voor je eigen baanontwerp.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *