public:cbuspublic:start
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
public:cbuspublic:start [2019/04/28 19:44] – [CBUS - A universal layout control system] Bob Vetterlein | public:cbuspublic:start [2020/01/22 15:57] – [CBUS - A universal layout control system] grovenor | ||
---|---|---|---|
Line 1: | Line 1: | ||
===== CBUS - A universal layout control system ===== | ===== CBUS - A universal layout control system ===== | ||
- | [[public: | + | |
- | [[public:cbuspublic: | + | [[public: |
+ | [[:public:start|Index to other public Wiki pages]]\\ | ||
==== Introduction ==== | ==== Introduction ==== | ||
- | When first introduced, | + | CBUS is a Layout Control System running on the [[wp> |
+ | * **[[https:// | ||
+ | * **[[https:// | ||
+ | A complete description of CBUS including the full specification and implementation notes is contained in the ' | ||
+ | | ||
- | The intention was to develop a system for comprehensive layout control based on a general purpose Layout Control Bus (LCB). The fundamental tenet was that of ‘simplicity’ without sacrificing ‘universality’– a difficult juggling trick. It had to be affordable and easy to install and set up by non-technical users. It also had to cover the range from small, simple home layouts to the largest and most complex club layout imaginable. | ||
- | So what are the functions | + | ===== CBUS Documentation ===== |
- | - Control of devices | + | This is the public view of CBUS and does not include MERG Technical Bulletins |
- | - Detection of ‘states’ (inputs) | + | |
- | Examples of (1) are changing turnouts (points), signals, power to block sections, turntables, level crossing gates, layout lighting, setting routes, controlling the speed and direction of locomotives (by DCC or analogue DC) and any other electrical or electro-mechanical devices that may be on a layout. | + | |
- | Examples of (2) are control panel switches, block occupancy detectors, bar code or RFID readers, turnout direction sensors, turntable position and ‘RailCom’™ track detectors. | + | |
- | At the basic level, we wanted our system to both look and operate like a conventional ‘hard wired’ system having a control panel with switches to operate turnouts and simple route setting. It also had to allow use as a ‘CAB bus’ for DCC systems so handsets (CABs) could be connected to a DCC command station using the same wiring. At the other extreme, it had to allow full computer control, using multiple computers if necessary, and a fully automated layout | + | [[developerguide|CBUS Developers' |
+ | This Guide is intended for those with technical knowledge wishing to develop additional hardware, software | ||
- | So far, CBUS has been referred to as a ‘system’. The CBUS system can be regarded in two parts. | + | [[jmriacccmd|Commanding Accessory Decoders using CANCMD & JMRI]] |
- | - The hardware | + | |
- | - The messages | + | |
- | The two are not completely independent as the style and frequency of the messages is determined by the hardware capability. However, they will be described | + | |
- | ==== Hardware requirements of the BUS ==== | ||
- | **The choice of CAN.**\\ | ||
- | The CAN bus (Controller Area Network) was developed by the Robert Bosch company in the 1980s for use in motor vehicles but has since been applied to many other types of machinery including aircraft and medical scanners to name just two. It became an open international standard as ISO 11519 in 1994 and a higher speed version as ISO 11898 in 2003. It is now used in virtually all modern motor vehicles so there is a wide applications base and ‘off the shelf’ components are readily available. When we looked at CAN, it seemed pretty much the ideal for a LCB. It was intended for relatively infrequent transmission of small amounts of data between devices for control purposes where response times and safety were paramount. Unlike the more familiar ‘Ethernet’, | ||
- | The data rate chosen for CBUS is 125Kbps. This is one of the defined CAN rates which go up to 1 Mbps but there is a trade off against cable length. 125Kbps allows lengths of up to 500 metres, good enough for even most garden layouts. The wire should be a twisted pair but doesn’t need to be screened. Only the ‘standard’ CAN frame is used. | ||
- | ==== The messaging scheme. ==== | ||
- | After much debate, we settled on the ‘producer-consumer’ model at least for layout control. For those used to the idea of sending specific messages from A to B – a ‘source-destination’ scheme, this is a very different concept although widely used for industrial control systems. Imagine changing a switch on a control panel. This creates an ‘event’. A frame is sent on to the bus which contains no source address, no destination address, no information, | ||
- | This is an extremely powerful and very flexible arrangement. Producers can send many events. Many consumers can act on an event and in different ways. Consumers can also act in the same way for different events. CBUS is a ‘one to many’ scheme which means that a specific event number will be restricted to one producer only. | ||
- | The above description may seem rather abstract. Here is a recognisable example. You want a push button (PB) on a control panel to set a route and the corresponding signals. You have a producer node on the control panel. You have a number of consumer nodes that drive turnouts and signals. Let’s say the PB creates event number 1. Turnout controller A has been taught that event 1 means set turnout 1 to normal, turnout 2 to reverse. Turnout controller B has been taught that event 1 means set turnout 3 to reverse, turnout 4 to reverse and turnout 5 to normal. Signal drivers C and D have been taught that event 1 means set the various signals or aspects for that route. Pressing the one PB sets the route and all the signals in one go. Obviously, a different PB could send event 2. The various consumers would know to act on event 2 in a different way to event 1 so set a different route. | ||
- | With this P-C model, you have effectively transferred some of the decision making from the producer to the consumer. It still allows for computer control or assistance, such as interlocking, | ||
- | While full PC operation is easily accomplished, | ||
- | As a result of experience with ' | ||
- | {{ http:// | ||
- | ===== CBUS in Brief ===== | ||
- | This is a short overview, mostly useful to someone generally informed in the area, and wishing to understand specific details about CBUS. | ||
- | |||
- | CBUS is a local area bus designed for model railways and it is used for the control of layout accessories and DCC trains. The message is entirely self contained and independent of any transport used. It is currently specified to run over [[wp> | ||
- | |||
- | A CBUS installation consists of a number of ' | ||
- | |||
- | In situations where the Producer / Consumer model is inappropriate, | ||
- | ===== Identifiers ===== | ||
- | |||
- | - **Nodes** are the basic unit of CBUS, and each is usually implemented on one PCB. Node-ids are 16-bit, and are assigned by the user. | ||
- | - **Event** messages are sent by ' | ||
- | * Short-event: | ||
- | * Long-event: 32-bit, made up of the concatenation of a node-id and a 16-bit event# | ||
- | * They are distinguished by the opcode of the message. | ||
- | ===== Message Formats ===== | ||
- | | ||
- | Where the opcode informs the receiving node what to do, using the data as necessary. | ||
- | There are many opcodes, including: | ||
- | - On-Events and Off-Events | ||
- | - Train control, including programming | ||
- | - Node configuration | ||
- | Long Event format is: { opcode, [node-id(2).event# | ||
- | Where the concatenation [node-id.event# | ||
- | Short Event format is: { opcode, node-id(2), device#(2) }, | ||
- | Where node-id and device# are independent. The device# is considered a ' | ||
- | More than one node can send this event, e.g. throttles, and it will have the same effect. | ||
- | By convention, device#s 1-9999 denote ' | ||
- | and device# 10000 the `Start-of-Day' | ||
- | | ||
- | The reason for this partition is that CABs can send short events up to 9999 and it would not be | ||
- | advisable for these to clash with sensor events by mistake. | ||
| | ||
===== Tools: ===== | ===== Tools: ===== | ||
Line 73: | Line 28: | ||
* **[[http:// | * **[[http:// | ||
* **[[http:// | * **[[http:// | ||
- | * **[[http:// | + | * **SSI** (Solid State Interlocker) from [[http:// |
- | ===== Implementation Notes ===== | ||
- | |||
- | * CBUS operates over CAN at 125kbps. | ||
- | * CAN is bidirectional and has built-in error correction and message re-send. | ||
- | * CBUS CAN frames have an 11-bit header and an 8-byte data-part. | ||
- | * The data-part carries the CBUS message. | ||
- | * The header must be unique, and this is ensured by including the 1 byte CAN-ID assigned to the sending node. | ||
- | * The CAN-ID is retained by the node, moving it to a new layout may cause a CAN-ID conflict. | ||
- | * In SLiM mode, the node-id is set by switches, and the CAN-ID is set equal to the low-byte of the node-id. | ||
- | * In FLiM mode, if the node does not have a CAN-ID, one is automatically obtained by self-enumeration: | ||
- | * NB: New modules //must// be introduced to the bus one at a time. | ||
- | * The CAN-ID may be re-assigned: | ||
- | * CBUS uses 29-bit header CAN messages for bootloading. | ||
- | * A complete description of CBUS including the full specification and implementation notes is contained in the ' | ||
- | | ||