Model Railroad System
2.2.1
Overall User Manaual
|
A number of OpenLCB daemons are provided by the Model Railroad System. These daemons provide operational OpenLCB functionallity, including providing hubs and gateways for both real physical nodes and virtual nodes, along with several virtual nodes.
The Hub Daemons create a virtual "wire" that connects multiple virtual nodes. Each node is a separately running process that has connected to the daemons network port. The hub deamon reads LCC messages from each of its connections and then writes those messages out to one (if it is specificly addressed) or all (if it is a broadcast message) of its connections. It does not write the message back out to the connection the message came from. It maintains a routing table that maps source addresses (or aliases) with source connections. Hub deamons are configured from their command line. Mostly this is the address to bind the port to and the port to bind (listen on). By default the hub deamons bind only to localhost, the loopback network device. This means that only virtual nodes running on the local machine can connect and the resultant network is "private" and local to the local machine. Optionally, the bind host (-host) can be set to 0.0.0.0. This causes the daemon to bind to all available network interfaces and make itself generally available to the whole network.
There are two hub daemons that implement a OpenLCB network over Tcp/Ip and connect CAN busses connected to different host computers connected via Tcp/Ip over Ethernet. These daemons are:
Both hub daemons implement a OpenLCB network over Tcp/Ip, although using different message formats. Both also take a common set of command line arguments. The common command line arguments define the host ports and devices to bind sockets to. The GridConnect hub can also connect to both physical CAN busses (over [USB] serial ports) and other OpenLCB network hubs over Tcp/Ip. The daemons run non-interactively and log their activity to a log file.
There are several virtual nodes that implement OpenLCB nodes to provide useful functions. These daemons are:
All of these programs normally run as non-interactive daemon processes and use a configuration file in XML format to define the detailed operation of the programs. This configuration file can either be hand edited or can be edited by the programs themselves using the specific GUI configuration editor built-in to each program.
Additionally, the Dispatcher program can generate Event Exchange based CTC panel programs that connects to a OpenLCB network as nodes and produces events in response to control elements and consumes events to update track work state and control element indicators.
Not only can these nodes interact with devices on a physical OpenLCB network (such as a CAN bus), but also with each other over a virtual OpenLCB network or even both at the same time.
All of the Virtual Nodes have these common configuration fields:
The OpenLCB_MRD2 daemon is used to tie one or more USB connected Azatrax MRD2 boards to an OpenLCB network, tying event production to the Sense and Latch inputs of each defined connected device and, for relay equiped boards, event consumption to the Channel 1 and Channel 2 outputs of each defined connected device.
In addition to the Common Node Configuration fields the OpenLCB_MRD2 daemon has a field for a polling interval in miliseconds, defaulting to 500. This is the interval between polls of the MRD2 devices. Then for each device there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_MRD2 configuration files --> <xs:schema version="OpenLCB_MRD2 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_MRD2" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_MRD2 daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="pollinterval" minOccurs="0" maxOccurs="1" /> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="device" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one device. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="serial" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="sense1on" minOccurs="0" maxOccurs="1" /> <xs:element name="sense1off" minOccurs="0" maxOccurs="1" /> <xs:element name="sense2on" minOccurs="0" maxOccurs="1" /> <xs:element name="sense2off" minOccurs="0" maxOccurs="1" /> <xs:element name="latch1on" minOccurs="0" maxOccurs="1" /> <xs:element name="latch1off" minOccurs="0" maxOccurs="1" /> <xs:element name="latch2on" minOccurs="0" maxOccurs="1" /> <xs:element name="latch2off" minOccurs="0" maxOccurs="1" /> <xs:element name="setchan1" minOccurs="0" maxOccurs="1" /> <xs:element name="setchan2" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_PiGPIO daemon is used to tie one or more of a Raspberry Pi's GPIO pins to event production (input pins) or event consumption (output pins).
In addition to the Common Node Configuration fields the OpenLCB_PiGPIO daemon has a field for a polling interval in miliseconds, defaulting to 500. This is the interval between polls of the GPIO Pins. Then for each pin there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiGPIO configuration files --> <xs:schema version="OpenLCB_PiGPIO 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiGPIO" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiGPIO daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="pollinterval" minOccurs="0" maxOccurs="1" /> <xs:element name="pin" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one pin. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="number" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="mode" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin1" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout1" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_PiMCP23008 daemon is used to tie one or more of a MCP23008's GPIO pins to event production (input pins) or event consumption (output pins). A MCP23008 is a 8 bit I2C port expander that can be connected to a Raspberry Pi.
In addition to the Common Node Configuration fields the OpenLCB_PiMCP23008 daemon has a field for a polling interval in miliseconds, defaulting to 500. This is the interval between polls of the GPIO Pins. There is also a field containing the low 3 bits of the address of the MCP23008's I2C address (the default is 7). Then for each pin there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiMCP23008 configuration files --> <xs:schema version="OpenLCB_PiMCP23008 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiMCP23008" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiMCP23008 daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="pollinterval" minOccurs="0" maxOccurs="1" /> <xs:element name="i2caddress" minOccurs="0" maxOccurs="1" /> <xs:element name="pin" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one pin. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="number" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="mode" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin1" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout1" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_PiMCP23017 daemon is used to tie one or more of a MCP23017's GPIO pins to event production (input pins) or event consumption (output pins). A MCP23017 is a 16 bit I2C port expander that can be connected to a Raspberry Pi.
In addition to the Common Node Configuration fields the OpenLCB_PiMCP23017 daemon has a field for a polling interval in miliseconds, defaulting to 500. This is the interval between polls of the GPIO Pins. There is also a field containing the low 3 bits of the address of the MCP23017's I2C address (the default is 7). Then for each pin there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiMCP23017 configuration files --> <xs:schema version="OpenLCB_PiMCP23017 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiMCP23017" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiMCP23017 daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="pollinterval" minOccurs="0" maxOccurs="1" /> <xs:element name="i2caddress" minOccurs="0" maxOccurs="1" /> <xs:element name="pin" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one pin. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="number" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="mode" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinin1" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout0" minOccurs="0" maxOccurs="1" /> <xs:element name="pinout1" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_PiMCP23017_signal daemon is used to tie groups of a MCP23017's GPIO pins into signal heads and all pins are set to to output mode. A MCP23017 is a 16 bit I2C port expander that can be connected to a Raspberry Pi.
In addition to the Common Node Configuration fields the OpenLCB_PiMCP23017 daemon has a field containing the low 3 bits of the address of the MCP23017's I2C address (the default is 7). Then for each signal there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiMCP23017_signal configuration files --> <xs:schema version="OpenLCB_PiMCP23017_signal 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiMCP23017_signal" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiMCP23017_signal daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="i2caddress" minOccurs="0" maxOccurs="1" /> <xs:element name="signal" minOccurs="0" maxOccurs="unbound"> <xs:annotation> <xs:documentation> This defines one signal. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="number" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="ledcount" minOccurs="1" maxOccurs="1" /> <xs:element name="common" minOccurs="1" maxOccurs="1" /> <xs:element name="aspect" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> <xs:element name="bits" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_QuadSignal daemon implememts an OpenLCB node that implements the EventExchange protocol for the MCP23017-based quad signal head HAT for the Raspberry Pi. Each signal mast can have 1, 2, or 3 "heads". Each head has four "lamps" (unused lamps can be set to "None"). For a given aspect, a lamp can be on, off, blink, or reverse blink. In addition to the Common Node Configuration fields the OpenLCB_PiMCP23017 daemon has a field containing the low 3 bits of the address of the MCP23017's I2C address (the default is 7). Then for each signal mast there is a tab containing these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiMCP23017_signal configuration files --> <xs:schema version="OpenLCB_PiMCP23017_signal 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiMCP23017_signal" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiMCP23017_signal daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="i2caddress" minOccurs="0" maxOccurs="1" /> <xs:element name="mast" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="aspect" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> <xs:element name="name" minOccurs="1" maxOccurs="1" /> <xs:element name="head" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="lamp" minOccurs="4" maxOccurs="4" > <xs:complexType> <xs:sequence> <xs:element name="id" minOccurs="1" maxOccurs="1" /> <xs:element name="effect" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_PiSPIMax7221 daemon is used to implement upto 8 signal masts using a SPI connected MAX7221 LED driver. Each digit
of the MAX7221 corresponds to one signal mast and each segment of each digit corresponds to one LED.
In addition to the Common Node Configuration fields the OpenLCB_PiSPIMax7221 daemon has a field to select the SPI channel (0 or 1) and tabs for each signal (up to 8). Each signal has a signal number (1 through 8), a textual description, and any number (at least one) of aspects. Each aspect contain an event id and an eight bit field defining the on (1) or off (0) LEDS, typically top to bottom.
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_PiSPIMax7221 configuration files --> <xs:schema version="OpenLCB_PiSPIMax7221 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_PiSPIMax7221" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_PiSPIMax7221 daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="spichannel" minOccurs="0" maxOccurs="1" /> <xs:element name="signal" minOccurs="1" maxOccurs="8" > <xs:annotation> This defines one signal. </xs:documentation> <xs:complexType> <xs:sequence> <xs:element name="number" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="aspect" minOccurs="1" maxOccurs="unbounded" > <xs:complexType> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> <xs:element name="bits" minOccurs="1" maxOccurs="1" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_TrackCircuits daemon is used to implement one or more virtual track circuits. Each track circuit can emit a code event in response to an event and can emit an event in response to a code event, possibly prefixed with a Code 1 Start event.
In addition to the Common Node Configuration fields the OpenLCB_TrackCircuits daemon has tabs for each track, containing these fields:
The track codes defined for transmitters and receivers are:
None
No track code.Code7
ClearCode4
Advance ApproachCode3
Approach LimitedCode8
Approach MediumCode2
ApproachCode9
Approach SlowCode6
Accelerated Tumble DownCode5_occupied
Non-Vital (occupied)Code5_normal
Non-Vital (normal)CodeM_failed
Power/Lamp (failed)CodeM_normal
Power/Lamp (normal)<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_TrackCircuits configuration files --> <xs:schema version="OpenLCB_TrackCircuits 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_TrackCircuits" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_TrackCircuits daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="track" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one track. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="enabled" minOccurs="0" maxOccurs="1" /> <xs:element name="transmitter" minOccurs="0" maxOccurs="unbounded" > <xs:complexType> <xs:sequence> <xs:element name="code" minOccurs="1" maxOccurs="1" /> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="transmitbaseevent" minOccurs="0" maxOccurs="1" /> <xs:element name="receivebaseevent" minOccurs="0" maxOccurs="1" /> <xs:element name="code1startevent" minOccurs="0" maxOccurs="1" /> <xs:element name="receiver" minOccurs="0" maxOccurs="unbounded" > <xs:complexType> <xs:sequence> <xs:element name="code" minOccurs="1" maxOccurs="1" /> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_Logic daemon is used to implement one or more logic blocks. Each logic can be standalone or part of a mast or ladder group.
In addition to the Common Node Configuration fields the OpenLCB_Logic daemon has tabs for each logic block, containing these fields:
single
(Single or last), mast
(Mast Group), or ladder
(Ladder Group).and
(V1 and V2), or
(V1 or V2), xor
(V1 xor V2), andch
(V1 and V2 change), orch
(V1 or V2 change), then
(V1 then V2), or true
.<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_Logic configuration files --> <xs:schema version="OpenLCB_Logic 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_Logic" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_Logic daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="logic" minOccurs="0" maxOccurs="unbounded" > <xs:annotation> <xs:documentation> This defines one logic block. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="grouptype" minOccurs="1" maxOccurs="1" /> <xs:element name="v1onevent" minOccurs="0" maxOccurs="1" /> <xs:element name="v1offevent" minOccurs="0" maxOccurs="1" /> <xs:element name="logicfunction" minOccurs="1" maxOccurs="1" /> <xs:element name="v2onevent" minOccurs="0" maxOccurs="1" /> <xs:element name="v2offevent" minOccurs="0" maxOccurs="1" /> <xs:element name="delay" minOccurs="0" maxOccurs="1" /> <xs:element name="retriggerable" minOccurs="0" maxOccurs="1" /> <xs:element name="action1delay" minOccurs="0" maxOccurs="1" /> <xs:element name="action1event" minOccurs="0" maxOccurs="1" /> <xs:element name="action2delay" minOccurs="0" maxOccurs="1" /> <xs:element name="action2event" minOccurs="0" maxOccurs="1" /> <xs:element name="action3delay" minOccurs="0" maxOccurs="1" /> <xs:element name="action3event" minOccurs="0" maxOccurs="1" /> <xs:element name="action4delay" minOccurs="0" maxOccurs="1" /> <xs:element name="action4event" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_Acela daemon is used to tie a CTI Acela network to an OpenLCB network, tying event production to the inputs (sensors) and outputs (controls and signals) connected to a CTI Acela network.
In addition to the Common Node Configuration fields the OpenLCB_Acels daemon has tabs for each Control, Signal, or Sensor. Each type has a numerical address and a textual description.
You will want to read the "The Acela Network Bridge Programmer's Guide" for an explaination of some of the terminolgy used here.
In addition each Control has these fields:
In addition each Signal has these fields:
There are also three common fields for all signals:
In addition each sensor has these fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_Acela configuration files --> <xs:schema version="OpenLCB_Acela 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_Acela" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_Acela daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="acelaport" minOccurs="1" maxOccurs="1" /> <xs:element name="blinkrate" minOccurs="0" maxOccurs="1" /> <xs:element name="yellowhue" minOccurs="0" maxOccurs="1" /> <xs:element name="brightness" minOccurs="0" maxOccurs="1" /> <xs:element name="control" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> This defines one Control. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="address" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="pulsewidth" minOccurs="0" maxOccurs="1" /> <xs:element name="blinkperiod" minOccurs="0" maxOccurs="1" /> <xs:element name="activate" minOccurs="0" maxOccurs="1" /> <xs:element name="deactivate " minOccurs="0" maxOccurs="1" /> <xs:element name="pulseon " minOccurs="0" maxOccurs="1" /> <xs:element name="pulseoff " minOccurs="0" maxOccurs="1" /> <xs:element name="blink " minOccurs="0" maxOccurs="1" /> <xs:element name="revblink" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="signal" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> This defines one Signal. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="address" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="pulsewidth" minOccurs="0" maxOccurs="1" /> <xs:element name="aspect" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="eventid" minOccurs="0" maxOccurs="1" /> <xs:element name="arglist" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="sensor" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> This defines one Sensor. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="address" minOccurs="1" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> <xs:element name="filterthresh" minOccurs="0" maxOccurs="1" /> <xs:element name="filterselect" minOccurs="0" maxOccurs="1" /> <xs:element name="polarity" minOccurs="0" maxOccurs="1" /> <xs:element name="onevent" minOccurs="0" maxOccurs="1" /> <xs:element name="offevent" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
The OpenLCB_CMRI daemon implememts the EventExchange protocol for a C/MRI network, tying event production to the inputs and outputs connected to a C/MRI network.
In addition to the Common Node Configuration fields the OpenLCB_CMRI has these global fields:
<?xml version="1.0" ?> <?xml-stylesheet href="schema2xhtml.xsl" type="text/xsl" ?> <!-- XML Schema for OpenLCB_Acela configuration files --> <xs:schema version="OpenLCB_Acela 1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xs:element name="OpenLCB_Acela" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the configuration container for the OpenLCB_Acela daemon. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="transport" minOccurs="1" maxOccurs="1"> <xs:annotation> <xs:documentation> This defines the transport to use for this node. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="constructor" minOccurs="1" maxOccurs="1" /> <xs:element name="options" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="identification" minOccurs="0" maxOccurs="1"> <xs:annotation> <xs:documentation> This is the node identification section. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="name" minOccurs="0" maxOccurs="1" /> <xs:element name="description" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType></xs:complexType> </xs:element> <xs:element name="port" minOccurs="1" maxOccurs="1" /> <xs:element name="baud" minOccurs="1" maxOccurs="1" /> <xs:element name="maxtries" minOccurs="1" maxOccurs="1" /> <xs:element name="node" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="description" minOccurs="1" maxOccurs="1" /> <xs:element name="address" minOccurs="1" maxOccurs="1" /> <xs:element name="type" minOccurs="1" maxOccurs="1" /> <xs:element name="cardmap" minOccurs="0" maxOccurs="1" /> <xs:element name="yellowmap" minOccurs="0" maxOccurs="1" /> <xs:element name="numberofyellow" minOccurs="0" maxOccurs="1" /> <xs:element name="inputports" minOccurs="1" maxOccurs="1" /> <xs:element name="outputports" minOccurs="1" maxOccurs="1" /> <xs:element name="delay" minOccurs="1" maxOccurs="1" /> <xs:element name="input" minOccurs="0" maxOccurs="unbounded" > <xs:complexType> <xs:sequence> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> <xs:element name="byte" minOccurs="1" maxOccurs="1" /> <xs:element name="mask" minOccurs="1" maxOccurs="1" /> <xs:element name="comp" minOccurs="1" maxOccurs="1" /> <xs:element name="value" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="output" minOccurs="0" maxOccurs="unbounded" > <xs:complexType> <xs:sequence> <xs:element name="eventid" minOccurs="1" maxOccurs="1" /> <xs:element name="byte" minOccurs="1" maxOccurs="1" /> <xs:element name="mask" minOccurs="1" maxOccurs="1" /> <xs:element name="value" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>