Dev:Simple crossing

From railML 3 Wiki
Jump to navigation Jump to search

The purpose of this example is twofold. It shall teach newcomers the principles of a model’s topology of railML® 3. As for the proficient users, this tutorial is to provide a common way to describe simple railway crossing, e.g. for certification purposes.

A railway crossing is a point where two tracks cross each other and either enable trains to move from one track to the other or not.

Simple crossings do not enable trains to move from one track to the other. They are described with <crossing> element of railML® 3.

Types of crossings

Introduction

Usually, simple crossing is part of a diamond (scissor) crossover. It consists of a simple crossing and four railway switches.

Functional layer of the railML® 3 simple crossing

Below you can see a source code of a diamond crossover description. Please refer to “Example data” of railML.org website for an example of a linear positioning system definition. Below code snippet below deliberately misses these, as well as some other references for the sake of space reasons (this section is already very-very long).

1   <infrastructure id="is_01">
2     <topology>
3       <netElements>
4         <netElement id="ne26">
5           <relation ref="nr_ne26ne9_swi53"/>
6           <relation ref="nr_ne26ne25_swi53"/>
7           <relation ref="nr_ne26ne31_scr314"/>
8           <relation ref="nr_ne26ne32_scr314"/>
9           <relation ref="nr_ne26ne29_scr314"/>
10         <associatedPositioningSystem id="ne26_aps01">
11           <intrinsicCoordinate id="ne26_aps01_ic01"
12                                intrinsicCoord="0"/>
13           <intrinsicCoordinate id="ne26_aps01_ic02"
14                                intrinsicCoord="1"/>
15         </associatedPositioningSystem>
16       </netElement>
17       <netElement id="ne31">
18         <relation ref="nr_ne30ne31_swi312"/>
19         <relation ref="nr_ne26ne31_scr314"/>
20         <relation ref="nr_ne31ne25_swi312"/>
21         <relation ref="nr_ne31ne32_scr314"/>
22         <relation ref="nr_ne31ne29_scr314"/>
23         <associatedPositioningSystem id="ne31_aps01">
24           <intrinsicCoordinate id="ne31_aps01_ic01"
25                                intrinsicCoord="0"/>
26           <intrinsicCoordinate id="ne31_aps01_ic02"
27                                intrinsicCoord="1"/>
28         </associatedPositioningSystem>
29       </netElement>
30       <netElement id="ne32">
31         <relation ref="nr_ne26ne32_scr314"/>
32         <relation ref="nr_ne31ne32_scr314"/>
33         <relation ref="nr_ne28ne32_swi313"/>
34         <relation ref="nr_ne32ne29_scr314"/>
35         <relation ref="nr_ne32ne10_swi313"/>
36         <associatedPositioningSystem id="ne32_aps01">
37           <intrinsicCoordinate id="ne32_aps01_ic01"
38                                intrinsicCoord="0"/>
39           <intrinsicCoordinate id="ne32_aps01_ic02"
40                                intrinsicCoord="1"/>
41         </associatedPositioningSystem>
42       </netElement>
43       <netElement id="ne29">
44         <relation ref="nr_ne26ne29_scr314"/>
45         <relation ref="nr_ne31ne29_scr314"/>
46         <relation ref="nr_ne28ne29_swi55"/>
47         <relation ref="nr_ne32ne29_scr314"/>
48         <relation ref="nr_ne29ne27_swi55"/>
49         <associatedPositioningSystem id="ne29_aps01">
50           <intrinsicCoordinate id="ne29_aps01_ic01"
51                                intrinsicCoord="0"/>
52           <intrinsicCoordinate id="ne29_aps01_ic02"
53                                intrinsicCoord="1"/>
54         </associatedPositioningSystem>
55       </netElement>
56     </netElements>
57     <netRelations>
58       <netRelation id="nr_ne26ne31_scr314"
59                    positionOnA="1"
60                    positionOnB="1"
61                    navigability="None">
62         <elementA ref="ne26"/>
63         <elementB ref="ne31"/>
64       </netRelation>
65       <netRelation id="nr_ne26ne32_scr314"
66                    positionOnA="1"
67                    positionOnB="0"
68                   navigability="None">
69        <elementA ref="ne26"/>
70        <elementB ref="ne32"/>
71      </netRelation>
72      <netRelation id="nr_ne26ne29_scr314"
73                   positionOnA="1"
74                   positionOnB="0"
75                   navigability="Both">
76        <elementA ref="ne26"/>
77        <elementB ref="ne29"/>
78      </netRelation>
79      <netRelation id="nr_ne31ne32_scr314"
80                   positionOnA="1"
81                   positionOnB="0"
82                   navigability="Both">
83        <elementA ref="ne31"/>
84        <elementB ref="ne32"/>
85      </netRelation>
86      <netRelation id="nr_ne31ne29_scr314"
87                   positionOnA="1"
88                   positionOnB="0"
89                   navigability="None">
90        <elementA ref="ne31"/>
91        <elementB ref="ne29"/>
92      </netRelation>
93      <netRelation id="nr_ne32ne29_scr314"
94                   positionOnA="0"
95                   positionOnB="0"
96                   navigability="None">
97        <elementA ref="ne32"/>
98        <elementB ref="ne29"/>
99      </netRelation>
100     <netRelation id="nr_ne26ne9_swi53"
101                  positionOnA="0"
102                  positionOnB="0"
103                  navigability="Both">
104       <elementA ref="ne26"/>
105       <elementB ref="ne9"/>
106     </netRelation>
107     <netRelation id="nr_ne26ne25_swi53"
108                  positionOnA="0"
109                  positionOnB="1"
110                  navigability="None">
111       <elementA ref="ne26"/>
112       <elementB ref="ne25"/>
113     </netRelation>
114     <netRelation id="nr_ne9ne25_swi53"
115                  positionOnA="0"
116                  positionOnB="1"
117                  navigability="Both">
118       <elementA ref="ne9"/>
119       <elementB ref="ne25"/>
120     </netRelation>
121     <netRelation id="nr_ne30ne25_swi312"
122                  positionOnA="0"
123                  positionOnB="0"
124                  navigability="Both">
125       <elementA ref="ne30"/>
126       <elementB ref="ne25"/>
127     </netRelation>
128     <netRelation id="nr_ne30ne31_swi312"
129                  positionOnA="0"
130                  positionOnB="0"
131                  navigability="Both">
132       <elementA ref="ne30"/>
133       <elementB ref="ne31"/>
134     </netRelation>
135     <netRelation id="nr_ne31ne25_swi312"
136                  positionOnA="0"
137                  positionOnB="0"
138                  navigability="None">
139       <elementA ref="ne31"/>
140       <elementB ref="ne25"/>
141     </netRelation>
142     <netRelation id="nr_ne28ne32_swi313"
143                  positionOnA="0"
144                  positionOnB="1"
145                  navigability="None">
146       <elementA ref="ne28"/>
147       <elementB ref="ne32"/>
148     </netRelation>
149     <netRelation id="nr_ne28ne10_swi313"
150                  positionOnA="1"
151                  positionOnB="0"
152                  navigability="Both">
153       <elementA ref="ne10"/>
154       <elementB ref="ne28"/>
155     </netRelation>
156     <netRelation id="nr_ne32ne10_swi313"
157                  positionOnA="1"
158                  positionOnB="1"
159                  navigability="Both">
160       <elementA ref="ne10"/>
161       <elementB ref="ne32"/>
162     </netRelation>
163     <netRelation id="nr_ne28ne27_swi55"
164                  positionOnA="1"
165                  positionOnB="0"
166                  navigability="Both">
167       <elementA ref="ne28"/>
168       <elementB ref="ne27"/>
169     </netRelation>
170     <netRelation id="nr_ne28ne29_swi55"
171                  positionOnA="1"
172                  positionOnB="1"
173                  navigability="None">
174       <elementA ref="ne28"/>
175       <elementB ref="ne29"/>
176     </netRelation>
177     <netRelation id="nr_ne29ne27_swi55"
178                  positionOnA="1"
179                  positionOnB="0"
180                  navigability="Both">
181       <elementA ref="ne29"/>
182       <elementB ref="ne27"/>
183     </netRelation>
184   </netRelations> ...
185 </topology>
186 <functionalInfrastructure>
187   <switches>
188     <switchIS id="swi27"
189               continueCourse="right"
190               branchCourse="left"
191               type="ordinarySwitch">
192       <name name="70W02"
193             language="en"/>
194       <spotLocation id="swi27_sloc01"
195                     netElementRef="ne26"
196                     applicationDirection="normal"
197                     intrinsicCoord="0.0000"/>
198       <designator register="_Example"
199                   entry="SWITCH 70W02"/>
200       <leftBranch netRelationRef="nr_ne24ne26_swi27"
201                   branchingSpeed="60"
202                   joiningSpeed="60"
203                   radius="-500"/>
204       <rightBranch netRelationRef="nr_ne23ne26_swi27"
205                    branchingSpeed="60"
206                    joiningSpeed="60"
207                    radius="0"/>
208     </switchIS>
209     <switchIS id="swi53"
210               continueCourse="right"
211               branchCourse="left"
212               type="ordinarySwitch">
213       <name name="Sw15"
214             language="en"/>
215       <spotLocation id="swi53_sloc01"
216                     netElementRef="ne9"
217                     applicationDirection="reverse"
218                     intrinsicCoord="0.0000"/>
219       <designator register="_Example"
220                   entry="SWITCH Sw15"/>
221       <leftBranch netRelationRef="nr_ne9ne25_swi53"
222                   branchingSpeed="60"
223                   joiningSpeed="40"
224                   radius="0"/>
225       <rightBranch netRelationRef="nr_ne26ne9_swi53"
226                    branchingSpeed="40"
227                    joiningSpeed="40"
228                    radius="500"/>
229     </switchIS>
230     <switchIS id="swi312"
231               continueCourse="right"
232               branchCourse="left"
233               type="ordinarySwitch">
234       <name name="Sw01"
235             language="en"/>
236       <spotLocation id="swi312_sloc01"
237                     netElementRef="ne30"
238                     applicationDirection="normal"
239                     intrinsicCoord="0.0000"/>
240       <designator register="_Example"
241                   entry="SWITCH Sw01"/>
242       <leftBranch netRelationRef="nr_ne30ne31_swi312"
243                   branchingSpeed="60"
244                   joiningSpeed="60"
245                   radius="-500"/>
246       <rightBranch netRelationRef="nr_ne30ne25_swi312"
247                    branchingSpeed="60"
248                    joiningSpeed="60"
249                    radius="0"/>
250     </switchIS>
251     <switchIS id="swi313"
252               continueCourse="right"
253               branchCourse="left"
254               type="ordinarySwitch">
255       <name name="Sw02"
256             language="en"/>
257       <spotLocation id="swi313_sloc01"
258                     netElementRef="ne10"
259                     applicationDirection="normal"
260                     intrinsicCoord="1.0000"/>
261       <designator register="_Example"
262                   entry="SWITCH Sw02"/>
263       <leftBranch netRelationRef="nr_ne32ne10_swi313"
264                   branchingSpeed="40"
265                   joiningSpeed="60"
266                   radius="-500"/>
267       <rightBranch netRelationRef="nr_ne28ne10_swi313"
268                    branchingSpeed="40"
269                    joiningSpeed="60"
270                    radius="0"/>
271     </switchIS>
272   </switches>
273   <crossings>
274     <crossing id="scr314">
275       <name name="Sw03"
276             language="en"/>
277       <spotLocation id="scr314_sloc01"
278                     netElementRef="ne31"
279                     intrinsicCoord="1.0000"/>
280       <designator register="_Example"
281                   entry="CROSSING Sw03"/>
282       <straightBranch netRelationRef="nr_ne31ne32_scr314"/>
283       <straightBranch netRelationRef="nr_ne26ne29_scr314"/>
284     </crossing>
285   </crossings>
286   <tracks>
287     <track id="trk9"
288            mainDirection="both"
289            type="mainTrack"
290            infrastructureManagerRef="ou_01">
291       <name name="track9"
292             language="en"/>
293       <linearLocation id="trk9_lloc01"
294                       applicationDirection="both">
295         <associatedNetElement keepsOrientation="false"
296                               netElementRef="ne9"/>
297       </linearLocation>
298       <designator register="_Example"
299                   entry="TRACK track9"/>
300       <length value="240.000"
301               type="physical"/>
302       <trackEnd ref="swi53"/>
303     </track>
304     <track id="trk25"
305            mainDirection="both"
306            type="mainTrack"
307            infrastructureManagerRef="ou_01">
308       <name name="track25"
309             language="en"/>
310       <linearLocation id="trk25_lloc01"
311                       applicationDirection="both">
312         <associatedNetElement keepsOrientation="false"
313                               netElementRef="ne25"/>
314       </linearLocation>
315       <designator register="_Example"
316                   entry="TRACK track25"/>
317       <length value="150.000"
318               type="physical"/>
319       <trackBegin ref="swi53"/>
320       <trackEnd ref="swi312"/>
321     </track>
322     <track id="trk30"
323            mainDirection="both"
324            type="mainTrack"
325            infrastructureManagerRef="ou_01">
326       <name name="track30"
327             language="en"/>
328       <linearLocation id="trk30_lloc01"
329                       applicationDirection="both">
330         <associatedNetElement keepsOrientation="true"
331                               netElementRef="ne30"/>
332       </linearLocation>
333       <designator register="_Example"
334                   entry="TRACK track30"/>
335       <length value="1110.000"
336               type="physical"/>
337       <trackBegin ref="swi312"/>
338     </track>
339     <track id="trk26"
340            mainDirection="both"
341            type="mainTrack"
342            infrastructureManagerRef="ou_01">
343       <name name="track26"
344             language="en"/>
345       <linearLocation id="trk26_lloc01"
346                       applicationDirection="both">
347         <associatedNetElement keepsOrientation="true"
348                               netElementRef="ne26"/>
349       </linearLocation>
350       <designator register="_Example"
351                   entry="TRACK track26"/>
352       <length value="106.066"
353               type="physical"/>
354       <trackBegin ref="swi53"/>
355       <trackEnd ref="scr314"/>
356     </track>
357     <track id="trk31"
358            mainDirection="both"
359            type="mainTrack"
360            infrastructureManagerRef="ou_01">
361       <name name="track31"
362             language="en"/>
363       <linearLocation id="trk31_lloc01"
364                       applicationDirection="both">
365         <associatedNetElement keepsOrientation="true"
366                               netElementRef="ne31"/>
367       </linearLocation>
368       <designator register="_Example"
369                   entry="TRACK track31"/>
370       <length value="106.066"
371               type="physical"/>
372       <trackBegin ref="swi312"/>
373       <trackEnd ref="scr314"/>
374     </track>
375     <track id="trk32"
376            mainDirection="both"
377            type="mainTrack"
378            infrastructureManagerRef="ou_01">
379       <name name="track32"
380             language="en"/>
381       <linearLocation id="trk32_lloc01"
382                       applicationDirection="both">
383         <associatedNetElement keepsOrientation="false"
384                               netElementRef="ne32"/>
385       </linearLocation>
386       <designator register="_Example"
387                   entry="TRACK track32"/>
388       <length value="106.066"
389               type="physical"/>
390       <trackBegin ref="swi313"/>
391       <trackEnd ref="scr314"/>
392     </track>
393     <track id="trk29"
394            mainDirection="both"
395            type="mainTrack"
396            infrastructureManagerRef="ou_01">
397       <name name="track29"
398             language="en"/>
399       <linearLocation id="trk29_lloc01"
400                       applicationDirection="both">
401         <associatedNetElement keepsOrientation="false"
402                               netElementRef="ne29"/>
403       </linearLocation>
404       <designator register="_Example"
405                   entry="TRACK track29"/>
406       <length value="106.066"
407               type="physical"/>
408       <trackBegin ref="swi55"/>
409       <trackEnd ref="scr314"/>
410     </track>
411     <track id="trk27"
412            mainDirection="both"
413            type="mainTrack"
414            infrastructureManagerRef="ou_01">
415       <name name="track27"
416             language="en"/>
417       <linearLocation id="trk27_lloc01"
418                       applicationDirection="both">
419         <associatedNetElement keepsOrientation="true"
420                               netElementRef="ne27"/>
421       </linearLocation>
422       <designator register="_Example"
423                   entry="TRACK track27"/>
424       <length value="1172.132"
425               type="physical"/>
426       <trackBegin ref="swi55"/>
427     </track>
428     <track id="trk28"
429            mainDirection="both"
430            type="mainTrack"
431            infrastructureManagerRef="ou_01">
432       <name name="track28"
433             language="en"/>
434       <linearLocation id="trk28_lloc01"
435                       applicationDirection="both">
436         <associatedNetElement keepsOrientation="false"
437                               netElementRef="ne28"/>
438       </linearLocation>
439       <designator register="_Example"
440                   entry="TRACK track28"/>
441       <length value="150.000"
442               type="physical"/>
443       <trackBegin ref="swi55"/>
444       <trackEnd ref="swi313"/>
445     </track>
446     <track id="trk10"
447            mainDirection="both"
448            type="mainTrack"
449            infrastructureManagerRef="ou_01">
450       <name name="track10"
451             language="en"/>
452       <linearLocation id="trk10_lloc01"
453                       applicationDirection="both">
454         <associatedNetElement keepsOrientation="true"
455                               netElementRef="ne10"/>
456       </linearLocation>
457       <designator register="_Example"
458                   entry="TRACK track10"/>
459       <length value="2648.528"
460               type="physical"/>
461       <trackEnd ref="swi313"/>
462     </track>
463   </tracks>
464 </functionalInfrastructure>
465</infrastructure>

Topological layer of a simple crossing

To describe a simple crossing at the topological level, at least four net elements must be defined (ellipses) to go through straight branches of the crossing ‒ from track 26 to track 29 ‒ and from track 32 to track 31 (Figure 3, lines 3-56 of the listing). Elements are linked by relations (green and red circles, line 57-185 of listing).

As our example is complicated by diamond crossing, additionally, six net elements are defined for railway switches (swi53, swi312, swi313, swi55). Please note that railway switch description uses only branching and continue branches for its description, the switchable crossing description makes use of only straight and turning branches, while simple crossing uses only straight branches.

Topological layer of the railML® 3 simple crossing

In the figure relations (circles) are highlighted by the colour of the corresponding crossing or switch from the above figure.

The condensed relations matrices for simple crossing and diamond crossover are presented in the tables below.

ne26 ne29 ne31 ne32
ne26 + - -
ne29 + - -
ne31 - - +
ne32 - - +


ne9 ne25 ne30 ne26 ne29 ne31 ne32 ne10 ne28 ne27
ne9 + +
ne25 + + -
ne30 + +
ne26 + + - -
ne29 + - - - +
ne31 - + - - +
ne32 - - + + -
ne10 + +
ne28 - - + +
ne27 + +

In the table, pluses are navigable relations (e.g., line 72 of the listing). The train can go through a simple crossing only in a “straight” branch ‒ from element 51 to 75 (e.g. from track 26 to track 29).

The branching mechanism of a simple crossing means that to get from track 26 (element ne26) to track 31 (element ne31), one should return to the switch swi53. In that, it is not possible to go directly from track 26 to track 31.

To represent the impossibility of going from track 26 to track 31 directly, non-navigable relations (attribute @navigability)=“none”, e.g. line 58 of the listing) are used ‒ minuses.

Functional

Based on the topology, child <spotLocation> defines the logical location of a simple crossing (line 277). Track 31 is located at element ne31 (line 363 of the listing) and a crossing scr314 is located at element ne31 (line 277). This implies that the crossing is located at track 31.

The simple crossing is then connected to navigable relations via <straightBranch> children (lines 282, and 283 of the listing). Simple crossings are not explicitly linked with non-navigable relations (line 58 of the listing). This thesis means that both navigable and non-navigable relations are necessary to describe the topology of an ordinary railway switch but only the first ones are linked to a switch by @netRelationRef attributes of a switch’s children. On the other hand, non-navigable relations are linked to a switch in an implicit manner. If a non-navigable relation links the “branch” and “continue” course elements of a switch, then it also describes this switch.

For a crossing @continueCourse and @branchCourse attributes should not be used. There is also no beginning of a crossing, so it is not possible to define an application direction.

Comparison with railML® 2

According to Connection_between_tracks in railML® 2, there are three ways to describe a crossing: with 4, 3 or 2 tracks. In railML3 it is also possible to merge let's say ne30 and ne94 into one track. Yet the topology layer remains the same.

According to Connection_between_tracks in railML® 2, the navigability of straight branches is described implicitly with the combination of “incoming” and “outgoing” attributes, i.e. @passable=“true” is not defined. In railML® 3 navigability is defined explicitly by a corresponding attribute.

Scope

In railML® 2 <crossing> is used to describe double, single switch crossings as well as simple crossings.

In railML® 3 <switchIS> is used to describe double, single switch crossings. <crossing> is only used for simple crossings.