SE1BAC Project 2012 - European Train Control System ETCS

Prototype van ETCS-systeem

Documentsoort: Behoeftespecificatie
Versie: 1.0
Datum: 01 maart 2012
Auteurs: Jan Vlegels & Joris Van Geet & Filip Van Rysselberghe
Status: Opgeleverd

Samenvatting

Dit document bevat de specificaties voor een informaticasysteem dat als prototype dienst doet van het Europese trein controle systeem. Het is geschreven in het kader van het vak "Inleiding software Engineering" (1ste bachelor informatica - Universiteit Antwerpen). De opgave is een licht herwerkte versie van de projectopgave 2006-2007

Context

Zoals voor alle andere types van transport is het efficiënt beheren van het treinverkeer van groot belang om een klantvriendelijk en kost-efficiënt treinverkeer te kunnen aanbieden. Om hoofd te kunnen bieden aan de lage kosten vliegtuigmaatschappijen is het bovendien van belang dat het internationale treinverkeer gestroomlijnder kan verlopen. Omdat de treinnetten tot nu toe voornamelijk nationaal geregeld werden, moeten internationale treinen zoals o.a. de Thalys, vaak minutenlang stilstaan aan de grensovergangen. Om dit soort van synchronisatie problemen op te lossen hebben de Europese treinmaatschappijen samen ETCS (European Train Control System) uitgetekend. Dit systeem heeft als bijkomend doel het aantal treinbotsingen te verminderen.

De Universiteit Antwerpen is gevraagd om een prototype ter evaluatie van ETCS te ontwikkelen. In de eerste bachelor informatica zal onder de vakken "computer graphics" en "inleiding software engineering" gewerkt worden aan dit project. Tijdens de practica Computer Graphics zal de visualisatie van het prototype ontwikkeld worden, tijdens de practica Inleiding Software Engineering zal gewerkt worden aan de applicatie zelf.

Legende

De behoeftespecificatie is opgesteld aan de hand van zogenaamde use-cases. Elke use-case beschrijft een klein gedeelte van de gewenste functionaliteit, en het is de bedoeling dat tijdens elke fase van het project verschillende van die use cases geïmplementeerd worden.

Een typische use-case bevat de volgende onderdelen.

Refertenummer & titel:
Wordt gebruikt om naar een bepaalde use-case te verwijzen.
Prioriteit:
De specificatie van een systeem vraagt meer dan wat binnen de voorziene tijd op te leveren is. Vandaar dat we per use-case aangeven in hoeverre die functionaliteit belangrijk is. In volgorde van belangrijkheid kan hier staan: VERPLICHT (deze use-case moet opgeleverd worden), BELANGRIJK (niet essentieel maar bij voorkeur toch opleveren), NUTTIG (interessant maar kan weggelaten worden).
Doel:
Summiere beschrijving van het waarom van de use-case, t.t.z. wat de use-case bijdraagt tot de gehele functionaliteit.
Preconditie:
Summiere beschrijving van de uitgangspunten bij aanvang van de use-case.
Succesvol einde:
Summiere beschrijving van wat opgeleverd zal worden als er niks fout is gegaan.
Stappen:
Een sequentiële beschrijving van hoe de use-case precies zal verlopen als alles goed gaat (het zogenaamde "happy day scenario"). De stappen zijn genummerd en kunnen controle instructies (WHILE, IF, ...) bevatten.
Uitzonderingen:
Een lijst van mogelijke probleemgevallen en hoe die behandeld zullen worden. Een probleem geval (a) verwijst naar het nummer van de stap waar het probleem kan optreden, (b) bevat een conditie die aangeeft wanneer het probleemgeval optreedt, (c) omschrijft heel kort (een lijn) hoe het probleem behandeld zal worden.
Voorbeeld:
Een voorbeeld van wat in- of uitgevoerd kan worden.

Overzicht

Hieronder volgt een opsomming van alle use-cases inclusief hun prioriteit.

Use-case Prioriteit
1. Invoer
1.1. Treinnet inlezen VERPLICHT
1.2. Trein-informatie inlezen VERPLICHT
2. Uitvoer
2.1. Treinnet uitschrijven VERPLICHT
2.2. Trein-informatie uitschrijven VERPLICHT
3. Simulatie
3.1. Rijden van trein VERPLICHT
3.2. Reageren op signalisatie VERPLICHT
3.3. Traject afleggen VERPLICHT

Behoeftes

1. Invoer

1.1. Treinnet inlezen

Prioriteit:
VERPLICHT
Doel:
Doel van deze use-case is het inlezen van de benodigde XML-bestanden voor het creëren van een fysisch correcte spoorlijn.
Preconditie:
Een XML-bestand met de beschrijving van de spoorlijn
Een XML-bestand met de beschrijving van de signalisatie op de spoorlijn
(Zie Appendix 1 voor meer informatie over het XML formaat)
Succesvol einde:
Het systeem bevat een correcte spoorlijn waarover een trein kan rijden.
Stappen:
1. Open bestand met de beschrijving van de spoorlijn
2. Parse invoerbestand
3. Creeer spoorlijn adhv ingelezen data
4. Open bestand met de beschrijving van de signalisatie
5. Parse invoerbestand
6. FOR elk signaal in het invoerbestand
6.1. Creëer signaal ahv ingelezen data
7. Verifieer fysische consistentie
Uitzonderingen:
1. [Onbestaand bestand] Foutboodschap
4. [Onbestaand bestand] Foutboodschap
2. [Fout in xml-syntax] Foutboodschap
5. [Fout in xml-syntax] Foutboodschap
7. [Fysische inconsistentie] Foutboodschap
Voorbeeld:
File: spoorlijn.xml

        <SPOORLIJN>
                <locatie>AntwerpenCentraal</locatie>
                <locatie>A2</locatie>
                <locatie>A3</locatie>

                <locatie>A4</locatie>
                <locatie>A5</locatie>
                <locatie>A6</locatie>
                <locatie>A7</locatie>

                <locatie>A8</locatie>
                <locatie>A9</locatie>
                <locatie>Mechelen</locatie>
        </SPOORLIJN>

File: signalisatie.xml
        
        <signaal>
                <locatie>A4</locatie>
                <spoor>2</spoor>
                <type>maxSnelheid</type>

                <waarde>20</waarde>
        </signaal>
        <signaal>
                <locatie>A6</locatie>
                <spoor>2</spoor>

                <type>maxSnelheid</type>
                <waarde>90</waarde>
        </signaal>
        <signaal>
                <locatie>A9</locatie>

                <spoor>2</spoor>
                <type>maxSnelheid</type>
                <waarde>10</waarde>
        </signaal>

1.2. Trein inlezen

Prioriteit:
VERPLICHT
Doel:
Doel van deze use-case is het inlezen van de benodigde XML-bestanden voor het creëren van een fysisch correcte trein.
Preconditie:
Geldig treinnet
Een XML-bestand met de beschrijving van de trein
Een XML-bestand met de beschrijving van de bestuurder van de trein
(Zie Appendix 1 voor meer informatie over het XML formaat)
Succesvol einde:
Het systeem bevat een trein die correct gepositioneerd is op de bestaande spoorlijn.
2. Parse invoerbestand
3. Creëer trein adhv ingelezen data
4. Herhaal 1 t/m 3 voor het bestand met de beschrijving van de bestuurder
5. Verifieer fysische consistentie
Uitzonderingen:
2. [Fout in xml-syntax] Foutboodschap
4. [Fout in xml-syntax] Foutboodschap
5. [Fysische inconsistentie] Foutboodschap
Voorbeeld:
File: trein.xml

        <trein>
                <bestemming>A3</bestemming>

                <naam>GT120</naam>
                <snelheid>90</snelheid>
                <maxSnelheid>110</maxSnelheid>
                <locatie>Mechelen</locatie>

        </trein>

File: bestuurder.xml
        
        <treinbestuurder>
                <naam>Hugo</naam>
                <gemistSignaal>2</gemistSignaal>

        </treinbestuurder>
        

2. Uitvoer

2.1. Treinnet uitschrijven

Prioriteit:
VERPLICHT
Doel:
Wegschrijven van de huidige toestand van het treinnet.
Preconditie:
Het systeem bevat een geldig treinnet, eventueel voorzien van een trein.
Succesvol einde:
Het systeem heeft een tekstbestand (ASCII) uitgevoerd, waarin de toestand van het treinnet netjes werd in uitgeschreven.
Stappen:
1. Creëer uitvoerbestand
2. Open uitvoerbestand
3. Schrijf gegevens uit voor de spoorlijn
4. FOR elk signaal
4.1. Schrijf gegevens uit voor het signaal
5. Sluit uitvoerbestand
Uitzonderingen:
1. [Creatie mislukt] Foutboodschap, schrijf naar console ipv file
Voorbeeld: (input is het voorbeeld uit 1.1 en 1.2)
File: toestandTreinnet.txt

---Structuur Treinnet---
Spoorlijn - AntwerpenCentraal<->A2<->A3<->A4<->A5<->A6<->A7<->A8<->A9<->Mechelen
maxSnelheid op A4, spoor2 = 20 km/h
maxSnelheid op A6, spoor2 = 90 km/h
maxSnelheid op A9, spoor2 = 10 km/h

2.2. Trein-informatie uitschrijven

Prioriteit:
VERPLICHT
Doel:
Wegschrijven van de op het treinnet gepositioneerde trein.
Preconditie:
Het systeem bevat op een geldig treinnet, eventueel voorzien van een trein.
Succesvol einde:
Het systeem heeft een tekstbestand (ASCII) uitgevoerd, waarin de toestand van het treinnet netjes werd uitgeschreven.
Stappen:
1. Creëer uitvoerbestand
2. Open uitvoerbestand
3. Schrijf gegevens uit voor de bestuurder
4. Schrijf gegevens uit voor de trein
5. Sluit uitvoerbestand
Uitzonderingen:
1. [Creatie mislukt] Foutboodschap, schrijf naar console ipv file
Voorbeeld: (input is het voorbeeld uit 1.1 en 1.2)
File: ToestandTrein.txt
---Toestand Trein---
Bestuurder: Hugo (mist vaak het 2de signaal)
Trein GT120 met bestemming A3
Huidige locatie Mechelen
Huidige snelheid 90 km/h (max 110 km/h)

3. Simulatie

3.1. Rijden van trein

Prioriteit:
VERPLICHT
Doel:
Rijden van een trein op het treinnet.
Preconditie:
Een correct treinnet met een geldige trein
Succesvol einde:
De trein bevindt zich op een nieuwe locatie in het treinnet
Stappen:
1. FOR de af te leggen afstand
1.1. Verplaats de trein 1 locatie in de gewenste richting
1.2. Verminder de af te leggen afstand
Uitzonderingen:
1.1. einde spoorlijn
Voorbeeld: (toestand zoals ingelezen in 1.1 en 1.2)
Als de trein uit 1.2 40km moet afleggen in de richting van
AntwerpenCentraal, dan krijg je volgende verplaatsingen:

Mechelen -> A9 (10km)
A9       -> A8 (20km)
A8       -> A7 (30km)
A7       -> A6 (40km)

3.2. Reageren op signalisatie

Prioriteit:
VERPLICHT
Doel:
Een treinbestuurder past de toestand van de trein aan aan de geobserveerde signalisatie
Preconditie:
Een correct treinnet met een geldige trein
Succesvol einde:
De treinbestuurder heeft de juiste verandering doorgevoerd
Stappen:
1. IF aantal gepasseerde signalen +1 = gemist signaal THEN
1.1. negeer signaal
2. ELSE
2.1. IF aangegeven snelheid van maxSnelheid-signaal < snelheid trein THEN
2.1.1. reduceer snelheid tot aangegeven snelheid
2.2. ELSE
2.2.1. verhoog snelheid tot aangegeven snelheid.
Uitzonderingen:
2.1. [Onbekend signaal] Negeer signaal
Voorbeeld:

3.3. Traject afleggen

Prioriteit:
VERPLICHT
Doel:
Trein beweegt van beginlocatie tot eindlocatie rekening houdend met de gepasseerde signalisatie
Preconditie:
Een correct treinnet met een geldige trein
Succesvol einde:
De trein bevindt zich op zijn uiteindelijke bestemming
Stappen:
1. WHILE bestemming niet bereikt
1.1. Reageer op de signalisatie
1.2. Rij 10 km
Uitzonderingen:
Geen
Voorbeeld:

Appendix 1: Invoer formaat

Dit is het algemene formaat dat gebruikt wordt voor XML bestanden. De tag-identifiers en waarden zijn afhankelijk van het probleem-domein.

XML-file = { TagValuePair }
TagValuePair = "<" TagIdentifier ">" [ Content ] "</" TagIdentifier ">"
Content = Value | { TagValuePair } 
TagIdentifier = String
Value = String
String = StringCharacter { StringCharacter }
StringCharacter = Number | Letter | "-" 
Number = "0" ... "9"
Letter = "a" ... "z" | "A" ... "Z" 

Geldige informatie

We moeten nu nog de tags en hun waarde vastleggen die gelden voor ons probleem-domein. Dit bestaat uit het vastleggen van de mogelijke tags en de verwachte inhoud ("Content").

De mogelijke tag-identifiers zijn: trein, treinbestuurder, spoorlijn, signaal, naam, snelheid, locatie, bestemming, gemistSignaal, type, waarde en spoor.
Tag-identifiers zijn niet hoofdletter gevoelig, inhouden zijn dit wel.

De inhoud van deze tags is vastgelegd op:

Tag identifier Content
Trein naam, snelheid, locatie, bestemming, maxSnelheid
Treinbestuurder gemistSignaal, naam
SPOORLIJN locatie
Signaal locatie, type, waarde, spoor

Bovendien moet de openingstag steeds overeenkomen met de sluitingstag.

(In)consistentie

Het bestand met de in te lezen situatie wordt met de hand geschreven. Om de ingelezen situatie te kunnen simuleren moet de informatie consistent zijn.

Een spoorlijn is consistent als:

  • Het bestaat uit minstens 2 locaties.
  • Elke locatie aangeduid wordt met een willekeurige opeenvolging van cijfers en letters.

Een trein is consistent als:

  • Zijn naam bestaat uit een willekeurige opeenvolging van cijfers en letters.
  • Zijn snelheid behoort tot het interval [0,zijn maximale snelheid].
  • Zijn huidige locatie behoort tot een bestaande spoorlijn.
  • Zijn bestemming behoort tot een bestaande spoorlijn.
  • Zijn maximale snelheid (maxSnelheid) strikt positief is en niet groter dan 400 km/h.

Een treinbestuurder is consistent als:

  • Hij een naam heeft die bestaat uit een willekeurige opeenvolging van letters.

Een signaal is consistent als:

  • Zijn locatie behoort tot een bestaande spoorlijn.
  • De waarde voor een maxSnelheid-signaal een geldige snelheid uitgedrukt in km/h is. Bovendien zijn enkel positieve waarden toegestaan.
  • De waarde voor het spoor enkel 1 of 2 mag zijn. Met 1 een signaal in de richting van het laatste station van een spoorlijn en 2 de omgekeerde richting.