Uitwerkingen Practicum: Spoorwegovergang

[Overgang]

PDF versie uitwerkingen

Opgave 1

De trace die Uppaal genereert laat zien dat de trein al bij de overgang kan zijn terwijl die nog niet dicht is. Het probleem is dat de trein in 12 sec bij de overgang kan zijn na de transitie komt!. Maar na de bijbehorende transitie komt? kan de besturing er 1 sec over doen om een signaal omlaag! naar de overgang te sturen, en de overgang kan er vervolgens (in het ergste geval) 15 sec over doen om te sluiten. Aangezien 12 < 15 + 1 gaan het mis. Om het probleem op te lossen kun je
  • de rekentijd R die de besturing nodig heeft verkleinen (maar dat helpt natuurlijk onvoldoende),
  • de minimale sluitingstijd S van de overgang verkleinen,
  • de minimale nadertijd N van de trein vergroten (door de trein langzamer te laten rijden of door de sensor die de komst van de trein detecteert verder weg te zetten).
Om correctheid te garanderen moet gelden dat R+S < N. In het aangepaste model heb ik in de Declarations sectie expliciet constanten R, S, N ingevoerd, waardoor het eenvoudiger wordt om instanties van het model te testen.

Opgave 2

Ja, er is een probleem. De trein kan direct na een gaat! signaal weer een komt! signaal genereren (bijvoorbeeld wanneer de trein in een rondje rijdt en de sensor die detecteert dat de trein komt vrijwel op dezelfde plek staat als de sensor die detecteert dat de trein gaat). Wanneer echter bij de besturing een signaal binnenkomt dan kan in ons model 1 sec lang geen nieuw signaal worden geaccepteerd. Dit is niet realistisch: in werkelijkheid kan een computer geen signalen "tegenhouden". Ons model is dus niet goed.

We kunnen het probleem oplossen door een extra aanname te maken dat er een minimale tijd D >= 2 verstrijkt tussen het gaan en komen van een trein. Het is dan niet meer mogelijk dat er binnen 1 seconde 2 signalen binnenkomen bij de besturing. Dit kun je eenvoudig bewijzen met Uppaal door een nieuwe toestand Fout toe te voegen waar de besturing naar toe springt wanneer er een signaal binnenkomt als hij aan het rekenen is. Uppaal kan dan bewijzen dat de toestand Fout niet bereikbaar is voor waardes van D groter dan 1. Wanneer D gelijk is aan 0 of 1 dan is Fout wel bereikbaar.

Nog een Probleem

Ook al hebben we het probleem van opgave 2 nu opgelost, toch is het model nog steeds niet goed! Stel dat de trein eerst een gaat! doet en 2 sec later weer een komt!. Weer 1 sec later wil de besturing dan de spoorboom sluiten met een omlaag! opdracht. Maar de overgang zit op dat moment nog steeds in toestand Gaat_open en in die toestand is er geen omlaag? transitie mogelijk! Omdat in Uppaal een omlaag! transitie van een automaat alleen kan plaatsvinden tegelijk/samen met een omlaag? transitie van een andere automaat levert dit een zogenaamde deadlock op, een toestand waarin geen enkele transitie meer mogelijk is. Je kunt deze deadlock ook vinden met behulp van de Uppaal query E<> deadlock. We moeten daarom het model van de overgang uitbreiden en voor iedere toestand aangeven wat er gebeurt wanneer er een omlaag of omhoog instructie binnenkomt. Wanneer we dit doen (op de voor de hand liggende manier waarbij de overgang de ontvangen instructies ook daadwerkelijk uitvoert) dan kan Uppaal bewijzen dat er geen deadlocks meer zijn. De oplossing is uitgewerkt in:

Wanneer je er goed over nadenkt, dan blijkt de extra aanname dat er minimaal 2 sec zit tussen het gaan en komen van een trein helemaal niet nodig te zijn. We kunnen namelijk ook de besturing aanpassen: wanneer de besturing aan het rekenen is en er komt een nieuw signaal binnen dan wordt uitgegaan van dat nieuwe signaal en het eerdere signaal wordt vergeten. Dus wanneer er bijvoorbeeld eerst een signaal komt dat de trein gaat en direct daarna een signaal dat de trein komt dan zal de besturing opdracht geven om de overgang te sluiten. Deze oplossing is uitgewerkt in:

Wat deze casus laat zien is dat je nooit blind moet varen op de resultaten van een model checker. Wanneer Uppaal zegt dat een model correct is dan betekent dit nog niet dat het systeem dat je aan het ontwerpen bent ook correct is. Dat is namelijk alleen zo wanneer het model het systeem op een goede manier beschrijft.