IS:connection switch

From railML 2 Wiki
Revision as of 06:18, 5 June 2024 by RailML Coord Common (talk | contribs) (Updated with new template)
Jump to navigation Jump to search

{{InheritConnection |parentLink = <switch> |selfLink = <connection> |maxocc=3 |bestpractice=As the movement possibilities are given for a fully functional <switch> (true), a simple <crossing> (false and false) and a double switch crossing (true and true; within railML® a crossing with @type=doubleSwitchCrossing) the passable does not need to be defined for these element types. For fully functional switches/crossings only use @passable for each of the IS:crossing connection of a crossing@type="simpleSwitchCrossing" (single slip switch) with either the value combination true and false or false and true.

When setting a switch/crossing into a reduced state in railML

When you pad(lock) a switch/switch crossing use the combination of state@disabled=true and passable=true/false under the switch/crossing element. The passable for passing over the switch/crossing on the track the switch is placed on (the principal/straight track) is implicit given through the @passable=true/false of the switch connection (the diverging track).

Norwegian vs. German business logic

This section is based on an example from the railML forum.

<switch>@trackContinueCourse always refers to the continuation of the <track> that the switch is placed on. If the switch is placed at that end of a <track>, this is the <connection> in the corresponding <trackBegin> or <trackEnd>. Conversely, the <[[IS:connection_%23course}, gives the course(s) of the other leg(s). The attribute <switch>@trackContinueCourse is bound to the continuation of the track, and you cannot change which leg it refers to without also swapping the connections. So you should not really be asking which leg @<switch>@trackContinueCourse should refer to, but which leg that belongs in trackBegin/connection (or trackEnd/connection) and which leg that belongs in switch/connection.

What is important, to be able to determine the topology, is that the courses given on the same switch are different. In the case of a symmetrical switch, it is maybe most intuitive that one is "left" and the other is "right". If one is considered "straight" then the other should be "left" or "right". If we make a rule that depends on radius, what will we do when the radius is unknown?

To return to the example of the switch 70W02 in the advanced example, here is a simplified code example with some placeholders in CAPITAL letters:

      <track id="tr1" type="mainTrack">
        <trackTopology>
          <trackBegin id="tb1" pos="0.0" absPos="6505.0">
            <connection id="ctb1" ref="REF1"/>
          </trackBegin>
          <!-- ... -->
          <connections>
            <switch id="sw1" name="70W02" pos="0.0" absPos="6505.0" trackContinueCourse="TRACK_COURSE">
              <connection id="csw1" orientation="incoming" course="SW_COURSE" ref="REF_SW"/>
            </switch>
          </connections>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

      <track id="tr2" name="1" type="mainTrack">
        <trackTopology>
          <!-- ... -->
          <trackEnd id="te2" pos="1180.0" absPos="6505.0">
            <connection id="cte2" ref="REF2"/>
          </trackEnd>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

      <track id="tr3" name="2" type="secondaryTrack">
        <trackTopology>
          <!-- ... -->
          <trackEnd id="te3" pos="1180.0" absPos="6505.0">
            <connection id="cte3" ref="REF3"/>
          </trackEnd>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

With the "German definition" we would have

REF1: cte3

TRACK_COURSE: straight

REF_SW: cte2

SW_COURSE: right

REF2: csw1

REF3: ctb1

With the "Norwegian definition" we get

REF1: cte2

TRACK_COURSE: right

REF_SW: cte3

SW_COURSE: straight

REF2: ctb1

REF3: csw1

So, we are only swapping the two connections. The topology is unchanged, and in both cases the connection from tr1 to tr2 is "right" and the connection from tr1 to tr3 is "straight".

Please also refer to Dev:Connection_between_tracks for information on how to use connections and switches/crossings.|connection]]>@course}, gives the course(s) of the other leg(s). The attribute <switch>@trackContinueCourse is bound to the continuation of the track, and you cannot change which leg it refers to without also swapping the connections. So you should not really be asking which leg @<switch>@trackContinueCourse should refer to, but which leg that belongs in trackBegin/connection (or trackEnd/connection) and which leg that belongs in switch/connection.

What is important, to be able to determine the topology, is that the courses given on the same switch are different. In the case of a symmetrical switch, it is maybe most intuitive that one is "left" and the other is "right". If one is considered "straight" then the other should be "left" or "right". If we make a rule that depends on radius, what will we do when the radius is unknown?

To return to the example of the switch 70W02 in the advanced example, here is a simplified code example with some placeholders in CAPITAL letters:

      <track id="tr1" type="mainTrack">
        <trackTopology>
          <trackBegin id="tb1" pos="0.0" absPos="6505.0">
            <connection id="ctb1" ref="REF1"/>
          </trackBegin>
          <!-- ... -->
          <connections>
            <switch id="sw1" name="70W02" pos="0.0" absPos="6505.0" trackContinueCourse="TRACK_COURSE">
              <connection id="csw1" orientation="incoming" course="SW_COURSE" ref="REF_SW"/>
            </switch>
          </connections>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

      <track id="tr2" name="1" type="mainTrack">
        <trackTopology>
          <!-- ... -->
          <trackEnd id="te2" pos="1180.0" absPos="6505.0">
            <connection id="cte2" ref="REF2"/>
          </trackEnd>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

      <track id="tr3" name="2" type="secondaryTrack">
        <trackTopology>
          <!-- ... -->
          <trackEnd id="te3" pos="1180.0" absPos="6505.0">
            <connection id="cte3" ref="REF3"/>
          </trackEnd>
          <!-- ... -->
        </trackTopology>
        <!-- ... -->
      </track>

With the "German definition" we would have

REF1: cte3

TRACK_COURSE: straight

REF_SW: cte2

SW_COURSE: right

REF2: csw1

REF3: ctb1

With the "Norwegian definition" we get

REF1: cte2

TRACK_COURSE: right

REF_SW: cte3

SW_COURSE: straight

REF2: ctb1

REF3: csw1

So, we are only swapping the two connections. The topology is unchanged, and in both cases the connection from tr1 to tr2 is "right" and the connection from tr1 to tr3 is "straight".

Please also refer to Dev:Connection_between_tracks for information on how to use connections and switches/crossings.