Changes for page Project goals
Last modified by Alexander Schulz-Rosengarten on 2025/01/30 12:05
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki.c bu1 +XWiki.csp - Content
-
... ... @@ -13,7 +13,7 @@ 13 13 Remember, you are going to present your controller at the end of the summer term! Getting this task done right is a very important step to succeed with your controller and this project! 14 14 {{/info}} 15 15 16 - 16 +== **Goals** == 17 17 18 18 **The following goals should definitely be reached (if we get modules in Kieler):** 19 19 ... ... @@ -32,8 +32,11 @@ 32 32 Trains should drive slowly at the points 33 33 ))) 34 34 35 -**Road Map:** 35 +== **Road Map:** == 36 36 37 +** 38 +** 39 + 37 37 {{code}} 38 38 13.5. Presentation 39 39 27.5. Station-Station Controller + C-Interface ... ... @@ -48,11 +48,8 @@ 48 48 ** 49 49 ** 50 50 51 -**Current work distribution: ** 54 +=== **Current work distribution: ** === 52 52 53 -** 54 -** 55 - 56 56 |=((( 57 57 Task 58 58 )))|=((( ... ... @@ -89,15 +89,12 @@ 89 89 Small groups, dynamic time schedule 90 90 ))) 91 91 92 -** 93 -** 92 +== **Implementation in short:** == 94 94 95 - **Implementation in short:**94 +The main idea is, that we have a universal model of the track segments. From these single track segments, track sections, that connect train stations are modeled and from those track sections, all final schedules for the trains should be build. On each track segment, there should be at most one train: In order to drive over a track, a train must request this track, and afterwards it must free it again (details below). If two trains request the same track section, the priority, which is derived from the train number, decides, which train gets the track section. A train must request all tracks until the next possibility to stop and wait in order to avoid collisions. If the train does not get all track segments, it must free them again in order to avoid deadlocks or delays of other trains. Deadlocks might occur at the exits of all train stations, and additionally, if one train with a low priority exits the Kicking-Horse-path while another train with a higher priority sends an entry-request. It remains to be seen, if additional deadlocks occur. Deadlocks can be resolved by using a superior Mutex-Controller. 96 96 97 - Themain idea is, that we have a universal model of the track segments. From these single track segments, track sections, that connect train stations are modeled and from those track sections, all final schedules for the trains should be build. On each track segment, there should be at most one train:In order to drive over a track, a trainmust request this track, and afterwards it must free it again (details below). If two trains request the same track section, thepriority, which is derived from the train number, decides, which train gets the track section. A train must request all tracks until thenext possibility to stop an wait in order to avoid collisions. If the train does not get all track segments, it must free themagain in orderto avoid deadlocks or delays of other trains.Deadlocks might occur at the exists of all trainstations, andadditionally, if onerain with alowpriority exists the Kicking-Horse-path while another train with a higher priority sends an entry-request. It remains to be seen, if additional deadlocks occur. Deadlocks can be resolved by using a superior Mutex-Controller.96 +== **Implementation in detail:** == 98 98 99 -=== **Implementation in detail:** === 100 - 101 101 **Basic Track:** 102 102 103 103 The behaviours of a basic track is described as follows: ... ... @@ -105,35 +105,45 @@ 105 105 **Sample Pass for one Track (in pseudocode)** 106 106 107 107 {{code linenumbers="true"}} 108 -state Foo 109 ---> Gleissegment with contact(Segment,0) 110 -state Gleissegment { 111 - entry / req(next_Segment); 112 - entry / setSignal(prevSegment, red); 113 - 114 - inital state Entry 115 - --> Continue with contact(Segment,0) & perm_next_Segment 116 - --> Slowdown with contact(Segment,0); 117 - 118 - state Slowdown { 119 - entry / setSpeed(Segment,SLOW); 120 - } --> Waiting with contact(Segment,1) 105 +scchart Default_Pass { 106 + bool perm_next_Segment; 107 + initial state prev 108 + --> Gleissegment with 'contact(Segment,0)'; 109 + state Gleissegment { 110 + entry / 'req(next_Segment)'; 111 + entry / 'setSignal(prevSegment, red)'; 112 + initial state Entry 113 + --> Continue with 'contact(Segment,0)' & perm_next_Segment 114 + --> Slowdown with 'contact(Segment,0)'; 115 + state Slowdown { 116 + entry / 'setSpeed(Segment,SLOW)'; 117 + } 118 + --> Waiting with 'contact(Segment,1)' 121 121 --> Continue with perm_next_Segment; 122 - 123 - state Waiting { 124 - entry / setSpeed(Segment,BRAKE); 125 - } --> Continue with perm_next_Segment; 126 - 127 - state Continue { 128 - entry / setSignal(Segment,green); 129 - entry / setSpeed(Segment,full); 130 - entry / setSpeed(nextSegment,full); 131 - entry / setSignal(nextSegment, red); 132 - entry / free(prevSegment) 133 - entry / setSpeed(prevSegment,OFF); 134 - }--> leave immediate; 135 - 136 - final state leave; 120 + state Waiting { 121 + entry / 'setSpeed(Segment,BRAKE)'; 122 + } 123 + --> Continue with perm_next_Segment; 124 + state Continue { 125 + entry / 'setSignal(Segment,green)'; 126 + entry / 'setSpeed(Segment,full)'; 127 + entry / 'setSpeed(nextSegment,full)'; 128 + entry / 'setSignal(nextSegment, red)'; 129 + } 130 + --> leave immediate; 131 + final state leave; 132 + region: 133 + initial state Entry 134 + --> cleanup with 'contact(Segment, 0)'; 135 + state cleanup { 136 + entry / 'free(prevSegment)'; 137 + entry / 'setSpeed(prevSegment,OFF)'; 138 + } 139 + --> done immediate; 140 + final state done; 141 + } 142 + >-> next with 'contact(nextSegment, 0)'; 143 + state next; 137 137 } 138 138 {{/code}} 139 139 ... ... @@ -143,8 +143,8 @@ 143 143 144 144 **Station-Station Modules** 145 145 146 -Input: Zugnummer,Startgleis,Zielgleis, Cleanup, (MutexVariablen?)147 -Output: " Echtes"Zielgleis(Ausweichgleis?)153 +Input: train number, departure track, destination track, Cleanup flag, (mutex variables necessary?) 154 +Output: "real" destination track (alternative destination track) 148 148 149 149 Modules needed: 150 150 ... ... @@ -165,7 +165,7 @@ 165 165 166 166 === [[image:attach:nbw-mutex-sct.png]] === 167 167 168 - ===C-Interface===175 +**C-Interface** 169 169 170 170 The C-Interface wraps some general functions, in order to prevent long and ugly host-code statements within the SCCharts. It especially hides the railway pointer. In addition, the C-Interface provides a persistent environment during a macro step. To bring in some randomness, the time, which a train has to wait in a station, is controlled by the C-Interface. Therefore, trains have to notify the interface about their arrival and their departure. 171 171 ... ... @@ -183,7 +183,7 @@ 183 183 184 184 185 185 186 -== Organization == 193 +== **Organization** == 187 187 188 188 Meetings: Every Wednesday at 4 pm. 189 189
- Confluence.Code.ConfluencePageClass[0]
-
- Id
-
... ... @@ -1,1 +1,1 @@ 1 -94707 781 +9470784 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/SS14Railway/pages/94707 78/Project goals1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/SS14Railway/pages/9470784/Project goals