Wiki source code of Interface
Last modified by aas2 on 2025/01/30 12:17
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | [[image:attach:interface.png]] | ||
| 2 | |||
| 3 | == Errors: == | ||
| 4 | |||
| 5 | * collision_error | ||
| 6 | ** -1: no error | ||
| 7 | ** other values: a single track with multiple trains | ||
| 8 | * train_speed_mismatch_error[NUM_TRAINS] | ||
| 9 | ** -1: no error | ||
| 10 | ** 1: the front and rear wagon have different speeds | ||
| 11 | * train_point_changed_error[NUM_TRAINS] | ||
| 12 | ** indicates, that a point was changed while the train was standing on it, | ||
| 13 | i.e., the front passed the point, but the rear not yet. | ||
| 14 | ** -1: no error | ||
| 15 | ** other values: the point that has the error | ||
| 16 | * wagon_error_message[NUM_TRAINS][2] | ||
| 17 | ** -1: no error | ||
| 18 | ** 1: point not set correctly | ||
| 19 | ** 2: wagon uses wrong direction on KH_LN_2 or KH_LN_7, because the corresponding point was set wrongly | ||
| 20 | ** 3: wagon position under min of track (indicates a mistake in the environment) | ||
| 21 | ** 4: wagon position over max of track (indicates a mistake in the environment) | ||
| 22 | ** 5: diamond point set to send a train backwards through IC or OC. May cause further unexpected behavior | ||
| 23 | * wagon_error_pos[NUM_TRAINS][2] | ||
| 24 | ** NOTE: The meaning depends on wagon_error_message. | ||
| 25 | ** if wagon_error_message is 0 | ||
| 26 | *** this error can be ignored | ||
| 27 | ** if wagon_error_message is 1, 2 or 5\\ | ||
| 28 | *** the point on which the error occurs | ||
| 29 | ** if wagon_error_message is 3 or 4\\ | ||
| 30 | *** the track on which the error occurs | ||
| 31 | |||
| 32 | == Environment: == | ||
| 33 | |||
| 34 | * ((( | ||
| 35 | {{{track_contacts: int[NUM_TRACKS][2]}}} | ||
| 36 | |||
| 37 | * ((( | ||
| 38 | 0: no signal | ||
| 39 | ))) | ||
| 40 | * ((( | ||
| 41 | 1: forwards | ||
| 42 | ))) | ||
| 43 | * ((( | ||
| 44 | 2: backwards | ||
| 45 | ))) | ||
| 46 | * ((( | ||
| 47 | 3: uni | ||
| 48 | ))) | ||
| 49 | ))) | ||
| 50 | * ((( | ||
| 51 | {{{cross_contacts: int[NUM_CONTACTS]}}} | ||
| 52 | |||
| 53 | * ((( | ||
| 54 | 0: no signal | ||
| 55 | ))) | ||
| 56 | * ((( | ||
| 57 | 1: closing | ||
| 58 | ))) | ||
| 59 | * ((( | ||
| 60 | 2: opening | ||
| 61 | ))) | ||
| 62 | ))) | ||
| 63 | |||
| 64 | == User: == | ||
| 65 | |||
| 66 | * ((( | ||
| 67 | {{{train_setup: int[NUM_TRAINS] }}} | ||
| 68 | |||
| 69 | * ((( | ||
| 70 | index: train number | ||
| 71 | ))) | ||
| 72 | * ((( | ||
| 73 | value: track number, (negative: train stands against main travel direction) | ||
| 74 | ))) | ||
| 75 | ))) | ||
| 76 | * ((( | ||
| 77 | {{{destination: int[NUM_TRAINS]}}} | ||
| 78 | |||
| 79 | * ((( | ||
| 80 | index. train number | ||
| 81 | ))) | ||
| 82 | * ((( | ||
| 83 | value: track number | ||
| 84 | ))) | ||
| 85 | ))) | ||
| 86 | * ((( | ||
| 87 | {{{speeds: int[NUM_TRAINS][4]}}} | ||
| 88 | |||
| 89 | * ((( | ||
| 90 | index: train number | ||
| 91 | ))) | ||
| 92 | * ((( | ||
| 93 | index: 0-3 | ||
| 94 | ))) | ||
| 95 | * ((( | ||
| 96 | value: 1-127 | ||
| 97 | ))) | ||
| 98 | ))) | ||
| 99 | |||
| 100 | == Controller: == | ||
| 101 | |||
| 102 | * ((( | ||
| 103 | {{{track_speeds: int[NUM_TRACKS]}}} | ||
| 104 | |||
| 105 | * ((( | ||
| 106 | 0: off | ||
| 107 | ))) | ||
| 108 | * ((( | ||
| 109 | 1 to 127: forward speed | ||
| 110 | ))) | ||
| 111 | * ((( | ||
| 112 | -1 to -127: backward speed | ||
| 113 | ))) | ||
| 114 | ))) | ||
| 115 | * ((( | ||
| 116 | {{{signals: int[NUM_TRACKS][2]}}} | ||
| 117 | |||
| 118 | * ((( | ||
| 119 | 0: off | ||
| 120 | ))) | ||
| 121 | * ((( | ||
| 122 | 1: red | ||
| 123 | ))) | ||
| 124 | * ((( | ||
| 125 | 2: yellow | ||
| 126 | ))) | ||
| 127 | * ((( | ||
| 128 | 3: green | ||
| 129 | ))) | ||
| 130 | ))) | ||
| 131 | * ((( | ||
| 132 | {{{lamps: bool[NUM_LAMPS]}}} | ||
| 133 | |||
| 134 | * ((( | ||
| 135 | true: on | ||
| 136 | ))) | ||
| 137 | * ((( | ||
| 138 | false: off | ||
| 139 | ))) | ||
| 140 | ))) | ||
| 141 | * ((( | ||
| 142 | {{{cross_light: int}}} | ||
| 143 | |||
| 144 | * ((( | ||
| 145 | 0: off | ||
| 146 | ))) | ||
| 147 | * ((( | ||
| 148 | 1: red | ||
| 149 | ))) | ||
| 150 | * ((( | ||
| 151 | 2: yellow | ||
| 152 | ))) | ||
| 153 | ))) | ||
| 154 | * ((( | ||
| 155 | {{{bell: bool}}} | ||
| 156 | |||
| 157 | * ((( | ||
| 158 | true: on | ||
| 159 | ))) | ||
| 160 | * ((( | ||
| 161 | false: off | ||
| 162 | ))) | ||
| 163 | ))) | ||
| 164 | * ((( | ||
| 165 | {{{points: bool[NUM_POINTS]}}} | ||
| 166 | |||
| 167 | * ((( | ||
| 168 | true: branch | ||
| 169 | ))) | ||
| 170 | * ((( | ||
| 171 | false: straight | ||
| 172 | ))) | ||
| 173 | ))) | ||
| 174 | * ((( | ||
| 175 | {{{gate: bool}}} | ||
| 176 | |||
| 177 | * ((( | ||
| 178 | true: down | ||
| 179 | ))) | ||
| 180 | * ((( | ||
| 181 | false: up | ||
| 182 | ))) | ||
| 183 | ))) | ||
| 184 | * ((( | ||
| 185 | {{{reached: bool[NUM_TRAINS]}}} | ||
| 186 | |||
| 187 | * ((( | ||
| 188 | index: train number | ||
| 189 | ))) | ||
| 190 | * ((( | ||
| 191 | value: true: destination reached; false: destination not yet reached | ||
| 192 | ))) | ||
| 193 | ))) | ||
| 194 | |||
| 195 | == Scheduler: == | ||
| 196 | |||
| 197 | * ((( | ||
| 198 | {{{schedule: int[NUM_TRAINS]}}} | ||
| 199 | |||
| 200 | * ((( | ||
| 201 | index: train number | ||
| 202 | ))) | ||
| 203 | * ((( | ||
| 204 | value: next save track on the way to destination | ||
| 205 | ))) | ||
| 206 | ))) | ||
| 207 | |||
| 208 | {{code language="sct" title="Controller-Environment Interface"}} | ||
| 209 | scchart environment { | ||
| 210 | |||
| 211 | //------------------------------------------------------------\\ | ||
| 212 | //-- INPUTS --\\ | ||
| 213 | //------------------------------------------------------------\\ | ||
| 214 | // Initial track of the trains | ||
| 215 | input int train_setup[NUM_TRAINS]; | ||
| 216 | // Speed of all tracks | ||
| 217 | input int track_speeds[NUM_TRACKS]; | ||
| 218 | // State of all switches | ||
| 219 | input bool points[NUM_POINTS]; | ||
| 220 | // State of all signals | ||
| 221 | input int signals[NUM_TRACKS][2]; | ||
| 222 | |||
| 223 | //------------------------------------------------------------\\ | ||
| 224 | //-- OUTPUTS --\\ | ||
| 225 | //------------------------------------------------------------\\ | ||
| 226 | // State of all contacts of the railway | ||
| 227 | output int track_contacts[NUM_TRACKS][2]; | ||
| 228 | |||
| 229 | //------------------------------------------------------------\\ | ||
| 230 | //-- RAILWAY CONSTANTS --\\ | ||
| 231 | //------------------------------------------------------------\\ | ||
| 232 | const int NUM_TRACKS = 48; | ||
| 233 | const int NUM_TRAINS = 11; | ||
| 234 | const int NUM_POINTS = 30; | ||
| 235 | const int NUM_LAMPS = 24; | ||
| 236 | const int NO_TRACK = -1; | ||
| 237 | |||
| 238 | //------------------------------------------------------------\\ | ||
| 239 | //-- RAILWAY INTERFACE --\\ | ||
| 240 | //------------------------------------------------------------\\ | ||
| 241 | const int OFF = 0, RED = 1, YELLOW = 2, GREEN = 4; | ||
| 242 | const int ON = 1, OFF = 0, FWD = 1, REV = 2, BRAKE = 3; | ||
| 243 | |||
| 244 | const int DOWN = 0, UP = 1; | ||
| 245 | const int NONE = 0, UNI = 3; | ||
| 246 | |||
| 247 | const int STRAIGHT = 0, BRANCH = 1; | ||
| 248 | |||
| 249 | const int IC_JCT_0 = 0 , IC_LN_0 = 1 , IC_LN_1 = 2 , IC_LN_2 = 3; | ||
| 250 | const int IC_LN_3 = 4 , IC_LN_4 = 5 , IC_LN_5 = 6 , IC_ST_0 = 7; | ||
| 251 | const int IC_ST_1 = 8 , IC_ST_2 = 9 , IC_ST_3 = 10, IC_ST_4 = 11; | ||
| 252 | const int IO_LN_0 = 12, IO_LN_1 = 13, IO_LN_2 = 14; | ||
| 253 | |||
| 254 | const int KH_LN_0 = 15, KH_LN_1 = 16, KH_LN_2 = 17, KH_LN_3 = 18; | ||
| 255 | const int KH_LN_4 = 19, KH_LN_5 = 20, KH_LN_6 = 21, KH_LN_7 = 22; | ||
| 256 | const int KH_LN_8 = 23, KH_ST_0 = 24, KH_ST_1 = 25, KH_ST_2 = 26; | ||
| 257 | const int KH_ST_3 = 27, KH_ST_4 = 28, KH_ST_5 = 29, KH_ST_6 = 30; | ||
| 258 | const int KIO_LN_0 = 31, KIO_LN_1 = 32; | ||
| 259 | |||
| 260 | const int OC_JCT_0 = 33, OC_LN_0 = 34, OC_LN_1 = 35, OC_LN_2 = 36; | ||
| 261 | const int OC_LN_3 = 37, OC_LN_4 = 38, OC_LN_5 = 39, OC_ST_0 = 40; | ||
| 262 | const int OC_ST_1 = 41, OC_ST_2 = 42, OC_ST_3 = 43, OC_ST_4 = 44; | ||
| 263 | const int OI_LN_0 = 45, OI_LN_1 = 46, OI_LN_2 = 47; | ||
| 264 | |||
| 265 | initial state init; | ||
| 266 | } | ||
| 267 | {{/code}} |