Model Railroad System  2.2.1
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
C4TTB_Block Class Reference

Block occupation detection using Circuits4Tracks Quad Occupancy Detector and a CTI Train Brain. More...

Public Member Functions

 C4TTB_Block (name,...)
 Constructor: initialize the block object. More...
 
 occupiedp ()
 The occupiedp method returns yes or no (true or false) indicating block occupation. More...
 
 propagate (aspect, from,...)
 Method used to propagate distant signal states back down the line. More...
 

Static Public Member Functions

static validate (object)
 Type validating code Raises an error if object is not either the empty string or a C4TTB_Block type. More...
 

Private Member Functions

 _entering ()
 Method for entering a block. More...
 
 _exiting ()
 Method for exiting a block. More...
 

Private Attributes

 acela
 Acela object. More...
 
 forwardsignal
 Signal object (typically a three color, one head block signal. More...
 
 reversesignal
 Signal object (typically a three color, one head block signal. More...
 
 isoccupied
 Saved occupation state. More...
 

Detailed Description

Block occupation detection using Circuits4Tracks Quad Occupancy Detector and a CTI Train Brain.

Above is a simple diagram for using Circuits4Tracks Quad Occupancy Occupancy board has four current sensors. One wires one side of the track power (either DCC or DC) to a common rail and the other side through the Circuits4Tracks Quad Occupancy Detector to rails isolated with gaps (possibly with insulating rail joiners). This code uses a CTI Train Brain to connect a Circuits4Tracks Quad Occupancy Detectors to the computer via a CTI Acela computer interface.

Typical usage:

Four blocks in a loop:

# Connect to the CTI Acela via USB the serial interface at /dev/ttyACM0
ctiacela::CTIAcela acela /dev/ttyACM0
# The first four bits of the first Train Brain are wired to the Circuits4Tracks
# Quad Occupancy Detector
C4TTB_Block block1 -acelaobj acela -address 0 -signalobj signal1
C4TTB_Block block2 -acelaobj acela -address 1 -signalobj signal2 -previousblock block1
C4TTB_Block block3 -acelaobj acela -address 2 -signalobj signal3 -previousblock block2
C4TTB_Block block4 -acelaobj acela -address 3 -signalobj signal4 -previousblock block3
block1 configure -previousblock block4

A Schematic of the layout would look like this:

For the track work elements use "blockN occupiedp" for the track work elements' occupied command: eg Block1 would have 'block1 occupiedp' as its occupied command, that is its edit window would look like:

The other three blocks would be similar.

Then in the Main Loop, you would have:

while {true} {
MainWindow ctcpanel invoke Block1
MainWindow ctcpanel invoke Block2
MainWindow ctcpanel invoke Block3
MainWindow ctcpanel invoke Block4
update;# Update display
}
Author
Robert Heller <heller@deepsoft.com>

Definition at line 59 of file C4TTB_Block.tcl.

Constructor & Destructor Documentation

◆ C4TTB_Block()

C4TTB_Block::C4TTB_Block ( name  ,
  ... 
)

Constructor: initialize the block object.

Install an CTIAcela object as a component created elsewhere). Install the blocks signal (created elsewhere).

Parameters
nameName of the block object
...Options:
  • -acelaobj This is the CTIAcela object. This option is read-only and must be set at creation time.
  • -address The address of the sensor bit for this block. This is an integer from 0 to 65535 inclusive. This option is read-only and can only be set at creation time. The default is 0.
  • -forwardsignalobj This block's forward signal. This option is read-only and can only be set at creation time. The default is the empty string.
  • -reversesignalobj This block's reverse signal. This option is read-only and can only be set at creation time. The default is the empty string.
  • -previousblock Previous block (next block in reverse) – used for 'propagating' signal aspects and must be a C4TTB_Block type object. The default is the empty string.
  • -nextblock Next block (previous block in reverse) – used for 'propagating' signal aspects and must be a C4TTB_Block type object.
    The default is the empty string.
  • -direction Current running direction, either the word forward or reverse. The default is forward.

Member Function Documentation

◆ _entering()

C4TTB_Block::_entering ( )
private

Method for entering a block.

◆ _exiting()

C4TTB_Block::_exiting ( )
private

Method for exiting a block.

◆ occupiedp()

C4TTB_Block::occupiedp ( )

The occupiedp method returns yes or no (true or false) indicating block occupation.

◆ propagate()

C4TTB_Block::propagate ( aspect  ,
from  ,
  ... 
)

Method used to propagate distant signal states back down the line.

Parameters
aspectThe signal aspect that is being propagated.
fromThe propagating block (not used).
...Options:
  • -direction The direction of the propagation.

◆ validate()

static C4TTB_Block::validate ( object  )
static

Type validating code Raises an error if object is not either the empty string or a C4TTB_Block type.

Member Data Documentation

◆ acela

C4TTB_Block::acela
private

Acela object.

Definition at line 77 of file C4TTB_Block.tcl.

◆ forwardsignal

C4TTB_Block::forwardsignal
private

Signal object (typically a three color, one head block signal.

Definition at line 81 of file C4TTB_Block.tcl.

◆ isoccupied

C4TTB_Block::isoccupied
private

Saved occupation state.

Definition at line 89 of file C4TTB_Block.tcl.

◆ reversesignal

C4TTB_Block::reversesignal
private

Signal object (typically a three color, one head block signal.

Definition at line 85 of file C4TTB_Block.tcl.

C4TTB_Block::acela
acela
Acela object.
Definition: C4TTB_Block.tcl:77
C4TTB_Block
Block occupation detection using Circuits4Tracks Quad Occupancy Detector and a CTI Train Brain.
Definition: C4TTB_Block.tcl:59