User Tools

Site Tools


rocnet:rocnet-prot-fr

Le protocole RocNet

SommaireLes centrales numériquesRocNet


RocNet ⇒ Réseau Rocrail®

C'est un protocole binaire Open Source prévu pour la communication entre deux et plusieurs, dans un réseau d'égal à égal, unités matériels.


Réseau sans maître

L'idée est de construire un réseau de deux ou plus d'unités en fonctionnement.
Il y a différents types d'unités:

  • E/S, pour les aiguillages, signaux, détecteurs, …
  • Générateurs DCC
  • Décodeurs mobile et stationnaire activés par WLAN
  • Ordinateurs

Tous doivent avoir leurs propre identifient unique qui sont utilisés comme paramètre expéditeur/destinataire dans l'en-tête.
L'unité qui traite tous les messages et en envoie beaucoup entre eux et peut être autorisé à être l'hôte du réseau, mais en fait il est seulement un joueur dans le jeu.
Alors dans le cas de Rocrail l'ordinateur qui exécute ce logiciel peut être vu comme un hôte.


Identifiants réservés

ID Description Note
0 Diffusion Tous les nœuds l'évalueront.
1 Serveur Rocrail. C'est l'identifiant recommandé par défaut. Un deuxième serveur doit utiliser 65001+.
65535 L'identifiant du nœud initial; Un nouvel identifiant sera assigné par le serveur Rocrail.


Configuration


Plus d'informations à propos de la mise en place de la connexion RocNet: Configuration

UDP 8 bit

UDP est la méthode de communication par défaut recommandée qui est également utilisée en combinaison avec les RocNetNodes.
Toutes les autres méthodes sont limitées à la communication "un-à-un" communication.

Réglages par défaut:


ASCII HEXA 16 bit

Cela peut être utilisé pour une communication série utilisant seulement les caractères ASCII.
Le début du paquet démarre avec un @ et le reste est en HEXA1). (La valeur de 255 est représenté en HEXA par "FF", 100 par "64" etc…)
Les caractères ASCII utilisés:

@ 0 1 2 3 4 5 6 7 8 9 A B C D E F

Après la détection du début du paquet les 16 premiers caractères (8 octects), l'en-tête, peut être lu.
La longueur des données est dans deux derniers caractères de l'en-tête. Dans ce cas la longueur doit être multipliée par deux pour lire la partie donnée.

Exemple:
Une commande de mise sous tension de la voie envoyée à partir du serveur:

@000000000101020101


7 bit série

:!: L'octet netid doit avoir le bit 7, 0x80, à l'état haut pour signaler le début du paquet. Tous les autres octets doivent utiliser 7 bit, 0x7F, chargement de la donnée.

Réglages par défaut:

  • dispositif: com1

Exemple

  <digint iid="rn-1" lib="rocnet" sublib="serial" device="com1" bps="19200">
    <rocnet id="1" crc="true"/>
  </digint>


Format du paquet

8 Byte Header
réseau destinataire expéditeur action donnée crc
netid idH idL idH idL groupe code longueur n octets de données optionnel pour 7-bit



Contenu du paquet

Identifiant réseau

Pour grouper les unités dans un large système. Laisser à zéro si il n'y a qu'un seul réseau actif.
Le bit 7 doit être réglé en cas de 7 bit série.
Alternativement il peut être utilisé comme identifiant d'emplacement pour grouper les nœuds logiquement dans une boite de dialogue de vue d'ensemble.

Destinataire

Chaque unité sur le réseau à son propre identifiant.
Si laissé à zéro toutes les unités doivent évaluer le paquet. Cela peut être utile pour les requêtes pour voir quels dispositifs sont disponibles.

Expéditeur

L'identifiant de l'unité expéditrice. L'identifiant par défaut du serveur Rocrail est 1.
Une valeur à "0" est pour la diffusion.

Action

Si l'action a besoin d'une adresse elle sera fourni par les premiers deux octets de la partie donnée. (format étendu)

Longueur

Nombre net d'octets des données suivantes.

Donnée

La partie variable du paquet qui dépend de l'action.
La longueur peut être réglée à zéro si aucune information futur n'est nécessaire pour l'action donnée.


Identifiant Réseau

bit 7 6 5 4 3 2 1 0
8 bits ID (0-255)
7 bits 1 ID (0-127)

L'identifiant zéro est pour tous les réseaux.

Identifiant de nœud Haut/Bas

bit 7 6 5 4 3 2 1 0
8 bits ID (0-255)
7 bits 0 ID (0-127)
Calcul de l'adresse/identifiant
8 bit ID = idL + idH * 256
7 bit ID = idL + idH * 128


Groupe

bit 7 6 5 4 3 2 1 0
8 bit code groupe (0-255)
7 bit 0 code groupe (0-127)


Code

bit 7 6 5 4 3 2 1 0
fonction 0 2 bit type (0-3) 5 bit code (0-31)
Type
  • 0 requête
  • 1 évènement
  • 2 réponse

Si le type est un évènement ou une réponse, aucune action d'E/S réelle ne doit être effectuée sur l'adresse spécifiée; la plupart du temps l'E/S avec cette adresse signale un changement d'état.

Longueur

bit 7 6 5 4 3 2 1 0
8 bit nombre d'octets donnée (0-255)
7 bit 0 nombre d'octets donnée (0-127)


Donnée

bit 7 6 5 4 3 2 1 0
8 bits 8 bits de donnée (0-255)
7 bits 0 7 bits de donnée (0-127)


CRC

Optionnel pour les connexions série 7-bit:
Le complément à 1 du OU exclusif au niveau du bit de tous les octets dans le message.

Exemple de code
unsigned char rnChecksum(const unsigned char *b, int len) {
  unsigned char chksum = 0xff;
  int i;
  for (i = 0; i < len; i++) {
    chksum ^= b[i];
  }
  return chksum;
}


Groupes

Code Description Remarque sujet MQTT
0 Hôte Rocrail rocnet/ht
1 Centrale numérique Centrale numérique rocnet/cs
2 Décodeurs mobiles Locomotives et fonctions rocnet/lc
3 Décodeurs stationnaires Ports multiples pour entrées et sorties rocnet/dc
4 Programmation mobile DCC CVs rocnet/pm
5 Programmation stationnaire Incluant les centrales numériques rocnet/ps
6 Transfert de données GP Transfert de données à usage général entre les modules rocnet/gp
7 Horloge Horloge accélérée rocnet/ck
8 Détecteur Détermination de la position rocnet/sr
9 Sortie rocnet/ot
10 Entrée rocnet/in
11 Son rocnet/sn
12 Afficheur rocnet/dp


Hôte

Actions

act description data 1 data 2 data 3 data 4 data 5 data 6 data 7 données de réponse 1 données de réponse 2
1 Arrêt


Centrale numérique

Actions

act description data 1 data 2 data 3 data 4 data 5 data 6 data 7 data 8 données de réponse 1 données de réponse 2
0 NOP 0
1 requête statut
2 alimentation de la voie 0 = off, 1 = on statut
3 arrêt statut
4 version versionH versionL
5 PT on/off on/off on/off
6 vélocité addrH addrL 0…127 direction lumières protocole crans de vitesse
7 fonction addrH addrL F1-F8 F9-F16 F17-F24 protocole fonction changée + lumières 0x80 F25-F32
8 POM addrH addrL cvH cvL value opération: 0=obtenir, 1=régler
9 Aiguillage commande type adresse
10 Sortie commande type value adresse


Statut
7 6 5 4 3 2 1 0
0 Occupation PT idle alimentation


Mobile

Actions

requête réponse
code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée 6 donnée 7 donnée 1 donnée 2 donnée 3 donnée 4
0 NOP 0
1 réglage protocole nombre de fonctions
2 vélocité 0…127 direction lumières masse pas
3 fonction F1-F8 F9-F16 F17-F24 fonction modifiée F25-F32
4 requête code sous-code code sous-code réponse dépendant du code
5 fieldcmd adresse de base V_raw dirf fg 0+1 fg 2+3 fg 4+5 fg 6+7


Type de protocole

Code Type Description
0 256 256 pas interprété (8 bit seulement)
1 DCC 28 NMRA DCC avec 28 crans de vitesse
2 DCC 128 NMRA DCC avec 128 crans de vitesse
3 DCC 14 NMRA DCC avec 14 crans de vitesse
3 MM 1 Märklin/Motorola
4 MM 2 Märklin/Motorola
5 MM 3 Märklin/Motorola
6 MM 4 Märklin/Motorola
7 MM 5 Märklin/Motorola


Exemples

Arrête toutes les locomotives envoyé par le serveur Rocrail:
netid rcptH rcptL sndrH sndrL groupe code longueur velocité direction lumières
0 0 0 0 1 2 2 3 0 0 0
tout tout tout srvr srvr mobile velocité

Représentation binaire:

00 00 00 00 01 02 02 03 00 00 00

Représentation ASCII HEXA:

@0000000001020203000000

La direction et les lumières restent inchangées parce que le bit 6 des deux octets ne sont pas définis.


Réglage de la vélocité par le serveur Rocrail:
  • Adresse Locomotive = 291
  • Velocité = 48
  • Direction = avant
  • Lumières = off
netid rcptH rcptL sndrH sndrL groupe code longueur velocité direction lumières
0 1 35 0 1 2 2 3 48 65 64

Représentation binaire:

00 01 23 00 01 02 02 03 30 41 40

Représentation ASCII HEXA:

@0001230001020203304140


Stationnaire

Actions

Réponse
code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée 6 donnée 7
0 NOP 0
1 single port 0,1 (off,on) protocole/type délai port statut
2 port paire 0,1 (fermé,lancé) protocole/type délai port statut
3 port multiple masque du port 0…255 ou l'adresse est décalée protocole/type port statut n
4 requête port simple port addrH addrL statut
5 requête port paire port addrH addrL statut
6 requête port multiple port addrH addrL statut n
7 report¹ addrH addrL statut1 statut2
8 identifier classe manuID versionH versionL nr E/S subipH subipL
9 arrêt 1=les nœuds doivent également s'éteindre rc
10 accuser réception code action portnr optionnel
11 afficher²
12 début de journée
13 rapport d'erreur classe d'erreur raison addrH addrL

¹) Tous les décodeurs stationnaires doivent rapporter leur statuts si le destinataire est réglé à zéro.
²) Le bouton poussoir sur le nœud déclenchera la boite de dialogue RocNetNode qui apparaîtra avec le nœud sélectionné. Une requête affichée à partir de l'hôte fera clignoter la LED sur le nœud.

Programmation

Pour la programmation des décodeurs stationnaires l'adresse représente l'adresse du module.

Actions

code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée de réponse 1 donnée de réponse 2 donnée de réponse 3 donnée de réponse 4 donnée de réponse 5 donnée de réponse 6 donnée de réponse 7 donnée de réponse 8 donnée de réponse 9 donnée de réponse 10 donnée de réponse 11 donnée de réponse 12 donnée de réponse 13
1 écriture registerH registerL valeurH valeurL registreH registreL valeurH valeurL
2 lecture registreH registreL registreH registreL valeurH valeurL
3 copie destH destL donnée n ack
4 lecture de la configuration du port du port au port port# valeur type délai
5 écriture de la configuration du port port# valeur type délai
6 régler l'identifiant RocNet idH idL subipH subipL
7 lecture des options iotype flags cstype csdevice I2C scan 0x20 H I2C scan 0x20 L I2C scan 0x30 H I2C scan 0x30 I2C scan 0x40 H I2C scan 0x40 L adc threshold I2C scan 0x50 H I2C scan 0x50 L
8 écriture des options iotype:
0=GPIO, 1=I2c-0, 2=I2C-1
flags:
bit0=ack
cstype:
0=none, 1=dcc232, 2=sprog
csdevice:
0=/dev/ttyUSB0, 1=/dev/ttyUSB1
9 lecture des macros nombre nombre port délai type valeur
10 écriture des macros nombre port délai type valeur
11 mise à jour revH revL
12 lecture d'un évènement du port du port au port port# idH idL port
13 écriture d'un évènement du port port# idH idL port
14 effacement de la configuration du port port#


Canaux
code description d1 d2 d3 d4 d5 d6 d7 d8 d1 d2 d3 d4 d5 d6 d7 d8
15 lecture de la configuration du canal du canal au canal canal# offposH offposL onposH onposL offsteps onsteps options
16 écriture de la configuration du canal canal# offposH offposL onposH onposL offsteps onsteps options
17 efficacement de la configuration du canal canal#
18 régler le canal canal# valeurH valeurL


La lecture, l'écriture et l'effacement du port/canal peut contenir jusqu'à 8 configurations de port.
La lecture et l'écriture de macro peut contenir jusqu'à 8 commandes.

Sortie

Type

Type Valeur
aiguillage 0
lumière 1
servo 2
son 3
moteur 4
analogique 5
macro 6
rétro-éclairage 7

Actions

code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée 6 donnée 7 donnée 8
0 off type valeur adresse
1 on type valeur adresse
1 (macro) on 6 0 aspect macro offset


Entrée

Le groupe entrée n'est pas utilisé ni défini; Utiliser le groupe détecteur.

Actions

code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée 6 donnée 7 donnée 8


Horloge

Actions

code description donnée 1 donnée 2 donnée 3 donnée 4 donnée 5 donnée 6 donnée 7 donnée 8 donnée 9
1 réglage annéeH annéeL mois jour heure minutes secondes diviseur luminosité
2 sync annéeH annéeL mois jour heure minutes secondes diviseur luminosité


Son

Actions

code description donnée 1-n
1 play nom du fichier audio
2 setpath chemin du fichier audio
3 setplayer nom du programme du lecteur audio


Afficheur

Actions

code description donnée 1 donnée 2 donnée 3-n
1 text addr displaynr texte à montrer sur l'afficheur


Détecteur

Actions

code description donnée 1 donnée 2 donnée 3 donnée 4 donnée n
1 report addrH¹ addrL¹ status port identifier (RFID)

¹) Adresse de la locomotive déclarée.
L'identifiant du détecteur est réglé dans l'entête; Expéditeur.
Une sécurité du détecteur est faite avec le message d'accusé de réception stationnaire:

  • Code = 1
  • Port = port


Fichiers

1)
Un octect est représenté par deux caractères ASCII.
rocnet/rocnet-prot-fr.txt · Last modified: 2019/02/12 23:35 by phil45