User Tools

Site Tools


rocnet:rocnet-prot-nl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rocnet:rocnet-prot-nl [2018/11/12 08:56] (current)
Line 1: Line 1:
 +===== Protocol =====
 +[[:​dutch|{{ ​ :​rocrail-logo-35.png}}]]
 +[[:​dutch|Inhoud]] -> [[:​dutch#​Central Stations|Central Stations]] ->  **RocNet** ​
 +  * **Protocol** | [[rocnet:​rocnet-gateway-nl|Gateway]]
 +
 +// \\ // \\ 
 +
 +Dit is een binary Open Source protocol bedoeld voor communicatie tussen twee of meer, in een peer-to-peer-netwerk geplaatste, hardware units.\\
 +Software boxen zullen gemaakt worden in C. De broncode C kan, gedeeltelijk,​ tevens gebruikt worden voor geïntegreerde software (PIC/​Atmel)\\
 + \\
 +**Werk in uitvoering, en toegankelijk voor kommentaar, advies en hulp.**\\
 + \\
 +
 +===== Waarom 7 bit data load =====
 +De opzet van een binair protocol met 8 bit data load maakt het moeilijk om een unieke start byte te bepalen. Meestal is de startbyte tweemaal verzonden of verwijdert wanneer deze code in de rest van het pakket voorkomt, wat resulteert in ongedefinieerde pakket lengtes.\\
 +Indien de overhead van een 8 bit data load vergeleken wordt met het 7 bit slim size, dan is het duidelijk voor een klein protocol met low data transport om voor 7 bit te kiezen. Voor protocollen die veel data bevatten is de 7 bit data load geen goede keuze.
 +
 +
 +Het adresbereik ligt in de range van 1 tot 16383
 + \\
 +
 +===== Zelfstandig Netwerk =====
 +Het idee is om een netwerk te bouwen met twee of meerdere sturing-units. \\
 +Dit zijn verschillende unit-types:
 +  * I/O, voor wissel, seinen, sensoren, ...
 +  * DCC/MM/SLX generatoren
 +  * computers
 +  * ...
 +Ieder heeft zijn eigen uniek ID nodig wat gebruikt wordt als zender/​ontvanger parameter in de hoofding.\\
 +De unit die alle berichten verwerkt en tevens veel zendt kan je de "​master"​ noemen maar eigenlijk is dit een speler als eender andere unit. Dus in het geval van Rocrail is dit de "​master"​.\\
 +
 + \\
 +
 +
 +===== Packet Format =====
 +==== Small ====
 +|  Header ​ ||||||||
 +|  group  |  address ​ ||  action ​ |  data  ||
 +^ group ^ addrH ^ addrL ^ code ^ length |  n data bytes |\\
 + \\
 +
 +
 +==== Extended ====
 +|  Header ​ ||||||||
 +|  network ​ |  receipient ​ ||  sender ​ ||  action ​ ||  data  ||
 +^ netid ^ rcptH ^ rcptL ^ sndrH ^ sndrL ^ group ^ code ^ length |  n data bytes |\\
 +
 +
 + \\
 + \\
 +
 +===== Packet Content =====
 +=== Network ID ===
 +Groep units in een groot systeem.\\
 +=== Ontvanger ===
 +Iedere unit in het netwerk heeft zijn eigen ID. Indien 0, dan moeten alle units het pakket filteren.\\
 +=== Zender ===
 +Het ID van de zender unit.\\
 +=== Address ===
 +Direct addressing of I/O and decoders.\\
 +=== Actie ===
 +Indien de actie een adres nodig heeft, dan komt dit in de eerste twee bytes van het datadeel .\\
 +=== Data ===
 +Het variabele deel van het pakket welke actie afhankelijk is.\\
 +Voor I/O en Lok acties zijn de eerste 2 bytes nodig om het adres te bepalen.\\
 +De lengte mag nul zijn indien geen verdere info nodig is voor de welbepaale actie.\\
 +
 + \\
 +
 +====Validation====
 +The protocol does not feature a checksum byte, but the packet is valid when the first byte has the 7th bit high and all following bytes low.\\
 + \\
 +
 +
 +=== Network ID ===
 +|  bit ^  7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
 +^  function |  1  |  extended=1 | command=0, event=1 | 5 bits ID (0-31) |||||\\
 +The network byte is the only one in the packet with bit 7 high to signal the start of a transmission.\\
 + \\
 +
 +=== Address High/Low ===
 +|  bit ^  7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
 +^  function |  0  |  7 bits high address (0-127) |||||||\\
 +== Calculating the Address ==
 +<​code>​Address = addrL + addrH * 128</​code>​\\
 +
 +
 +=== Group ===
 +|  bit ^  7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
 +^  function | 0/1 | small=0 | command=0, event=1 | 5 bit group code (0-31) ​ |||||\\
 +In case of small package format bit 7 signals the start of a transmission.\\
 +The event bit is set incase of sensor reporting, throttle actions, SCD, ....
 + \\
 +==Type==
 +  * 0 request
 +  * 1 event
 +  * 2 reply
 +  * 3 request; reply expected
 +If the type is an event or reply, no real I/O action should be taken on the specified address; mostly the I/O with this address signals a state change.\\
 + \\
 +
 +=== Length ===
 +|  bit ^  7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
 +^  function |  0  |  number of data bytes |||||||\\
 + \\
 +
 +=== Data ===
 +|  bit ^  7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
 +^  function |  0  |  7 data bits  |||||||\\
 + \\
 +
 + \\
 +
 +===== Groups =====
 +^ Code ^ Description ^ Remark ^
 +|  1 | General ​               | Command Station |
 +|  2 | Output ​                | Switches, signals, ... |
 +|  3 | Input                  | Sensors, buttons, ... |
 +|  4 | Mobile decoders ​       | Locomotives and functions |
 +|  5 | Stationary decoders ​   | Multiport for inputs and outputs |
 +|  6 | Programming mobile ​    | DCC CVs |
 +|  7 | Programming stationary | Including command stations |\\
 +|  8 | GP Data transfer ​      | General purpose data transfer between modules |\\
 + \\
 +
 +==== General ====
 +
 +=== Actions ===
 +^ act ^ description ^ data 1 | reply data 1 | reply data 2 |
 +|   0 | NOP | | 0 | |
 +|   1 | query | | status |  |
 +|   2 | track power | 0 = off, 1 = on | status |  |
 +|   3 | halt | | status |  |
 +|   4 | version | | versionH | versionL |
 +|   5 | PT on/off | on/off | on/off |  |
 + ​\\  ​
 +The address is optional and can be used to point at a single booster.\\ ​
 +
 +== Status ==
 +^  7  ^  6  ^  5  ^  4  ^  3  ^  2  ^  1  ^  0  ^
 +| 0 |   ​| ​  ​| ​  ​| ​  | PT busy | idle | power |\\
 + \\
 +
 +==== Output ====
 +^ act ^ description ^ data 1 ^ data 2 ^ data 3 ^ data 4 | reply data 1 |
 +|  1 | switch port       | 0 = off, 1 = on | | | | status |
 +|  2 | switch multi port¹ | port maskH | port maskL | valueH | valueL | status |\\
 +¹) Offset is address specified in the header.(small) Also use able for a coil pair.\\
 + \\
 +
 +==== Input ====
 +^ act ^ description ^ data 1 ^ data 2 | reply data 1 | reply data 2 | reply data 3 | reply data 4 |
 +|  1 | port status ​     | | | status | | | |
 +|  2 | multi port status¹ | port maskH | port maskL | port maskH | port maskL | valueH | valueL |
 +|  3 | report² |  |  | addrH | addrL | info1 | info2 |\\
 +¹) Offset is address specified in the header.(small) \\
 +²) A report is for extended inputs which for example provide the address of the passing train. \\
 + \\
 +
 +
 +==== Mobile ====
 +=== Actions ===
 +^ request ^^^|  reply  ||||||
 +^ code ^ description ^ data 1 ^ data 2 | data 1 | data 2 | data 3 | data 4 | data 5 | data 6 |
 +|   1 | setup    | protocol: 0=DCC14, 1=DCC28, 2=DCC128, 3=MM1, ... | number of functions | | | | | | | 
 +|   2 | velocity | 0...127 | direction: 1=FWD 0=REV, lights F0  | protocol | | | | | | 
 +|   3 | fg1      | 0...15 where bit 0=F1, 1=F2, 2=F3, 3=F4  | protocol | | | | | | |
 +|   4 | fg2      | 0...15 where bit 0=F5, 1=F6, 2=F7, 3=F8 | protocol | | | |  | | |
 +|   5 | fg3      | 0...15 where bit 0=F9, 1=F10, 2=F11, 3=F12 | protocol | |  | | | | |
 +|   6 | fg4      | 0...15 where bit 0=F13, 1=F14, 2=F15, 3=F16 | protocol | |  | | | | |
 +|   7 | query    |   | | velocity | direction | fg1 | fg2 | fg3 | fg4 |
 +|   8 | dispatch put ¹ |   | | ack | | | | | |
 +|   9 | dispatch get ² |   | | ack | addrH | addrL | | | |
 +|  10 | dispatch free ³ |   | | ack | | | | | |\\
 +|  11 | link | addrH | addrL |    ack | | | | | |
 +|  12 | unlink | addrH | addrL |    ack | | | | | |
 +¹) Set mobile decoder ready for use with a throttle.\\
 +²) Get the dispatched mobile decoder address. (The address set in the header is ignored.)\\
 +³) Free the mobile decoder from the throttle.\\
 + ​\\ ​
 +Extended Setup: ​
 +^ code ^ description ^ data 1 ^ data 2 ^ data 3 - 10 ^
 +|   1 | setup | protocol | number of functions | ASCII coded name |\\
 +//If the length byte contains a length > 6 the loco name is following.//  ​
 + ​\\  ​
 + \\
 +== Acknowledge ==
 +^ Value ^ Description ^
 +|  0 | OK |
 + \\
 +
 +==== Stationary ====
 +=== Actions ===
 +^ code ^ description ^ data 1 ^ data 2 ^ data 3  | reply data 1 ^
 +|   1 | single port | 0,1 (off,on) | protocol | delay | status |
 +|   2 | port pair | 0,1 (close,​throw) address is first port of pair | protocol | delay | status |
 +|   3 | multi port | port mask | 0...127 where address is offset | protocol | status n |
 +|   4 | query single port |  | | | status |
 +|   5 | query port pair |  | | | status |
 +|   6 | query multi port |  | | | status n |\\
 +|   7 | report¹ |  | | | status n |\\
 +¹) All connected stationary decoders should report status if receipient is set to zero.\\
 + \\
 +
 +==== Programming ====
 +For programming stationary decoders the address represents the module address.\\
 +=== Actions ===
 +^ code ^ description ^ data 1 ^ data 2 ^ data 3 ^ data 4 | reply data 1 | reply data 2 | reply data 3 | reply data 4 ^
 +|   1 | write | registerH | registerL | valueH | valueL | registerH | registerL | valueH | valueL |
 +|   2 | read  | registerH | registerL |        |        | registerH | registerL | valueH | valueL |\\
 +|   3 | copy  | destH     | destL     ​| ​      data n   || ack       ​| ​  ​| ​  ​| ​  |\\
  
rocnet/rocnet-prot-nl.txt · Last modified: 2018/11/12 08:56 (external edit)