The Hardwarecontrol should give an abstraction for controlling the Hardware which also makes sure some of the base rules apply.

Features

  • train tracking
  • block locking/crash avoidance
  • speed control: slow down(/speed up?)/parking in a segment
  • same speed policy (same speed on all tracks beneath a train)
  • automatic signal management
  • automatic point branching

Interacting parts

The track is split up into the following smaller interacting parts:

Segment

1 Track, 2 Contacts, 1 Signal

Segment_bid (bi-directional)

1 Track, 2 Contacts, 2 Signals

Track

1 Track

Track_bid

1 Track

Point_in

1 Point with 2 incoming and 1 outgoing tracks

Point_out

1 Point with 1 incoming and 2 outgoing tracks

Point_bid

1 Point, 2 to 1 bi-directional point

Cross_in

1 Track, 2 Points, has 2 incoming, 1 outgoing and 1 bi-directional track where incoming trains get on the main track and outgoing come from the side track

Cross_out

1 Track, 2 Points, has 1 incoming, 2 outgoing and 1 bi-directional track where outgoing trains come from the main track and incoming go to the side track

The differentiation of bi-directional and uni-directional Elements is made to have simpler parts for the unidirectional parts.

With these we can model the railway system by connecting these parts in terms of mapping input and output values according to the connections. To fulfill the tasks/rules every connection (uni-directional) has the following variables, where in and out describes if it's an input/output of the previous part in travel direction:

output

int

requestLockFor > 0

id of the track to request the lock for

-1: get next lock (not supported if nondeterministic)

output

int

requestLockTrain

when requestLockFor!=0 the id of the incoming train

input

bool

Locked

the next part is locked and expects an incoming train, lock is released when train reaches the next track

input

bool

Branched

the connection to the next "part"(save track) is branched (to set the signal)

input

bool

PullSpeed

the speed to synchronize to have one speed for all used tracks

To have a dependency cycle free model there has to be a part in each cycle that writes each of these in order and first read afterwards.

Tags:
Created by stu114053 on 2017/08/17 13:08