home


Les Articles ...

Intellibox : le protocole P50X
Mis à jour le Dimanche 14 octobre 2012 à 12h33min dans Modélisme - Version 2

Attention la présente page s'adresse à un public averti ! Celle-ci a été rédigée par Alain Trinquet membre contributeur du site Espace Rails.

Introduction :

L'intellibox possède une interface série RS232 pour communiquer avec un ordinateur. Le protocole de communication utilisé est public et simple à mettre en oeuvre. Je vous propose donc une initiation à la conduite de vos locos à partir d'un ordinateur.

L'intellibox

Connexion de la centrale Intellibox à l'ordinateur :

Le câble :

Pour communiquer avec la centrale Intellibox, vous devez utiliser un câble de communication connecté à un port de communication série RS232 de l'ordinateur. Un port de communication série est généralement accessible à l'arrière de l'ordinateur via un connecteur mâle de 9 ou 25 points.

Le plan du câble de communication est décrit dans la documentation de l'Intellibox. Si vous ne l'avez pas, vous pouvez utiliser un des plans de câblage suivants.

Pour un ordinateur avec un connecteur DB9 mâle :

PC
Prise 9 points 
DB9 Femelle
  Intellibox
Prise 9 points
DB9 Mâle
2 ---------------- 2
3 ---------------- 3
5 ---------------- 5
8 ---------------- 8
1, 4, 6 Reliés  

Pour un ordinateur avec un connecteur DB25 mâle :

PC
Prise 25 points
DB25 Femelle
  Intellibox
Prise 9 points
DB9 Mâle
3 ---------------- 2
2 ---------------- 3
7 ---------------- 5
5 ---------------- 8
6, 8, 20 Reliés  

D'après la documentation de l'Intellibox et dans le cas où l'ordinateur possède un connecteur DB9 mâle, on peut également utiliser un cordon équipé d'une prise DB9 femelle côté ordinateur et d'une prise DB9 mâle coté Intellibox dont les 9 contacts sont reliés point à point (contact 1 d'un côté sur contact 1 de l'autre côté, ...).

Le port série :

Le port série est nommé COMx, où 'x' est généralement un chiffre valant 1 ou 2. Sur certains ordinateurs portables par exemple, ce chiffre peut valoir 3, 4, 5 ou 6.

Les paramètres de la communication :

La communication avec l'Intellibox utilise un port série RS232 avec les paramètres suivants :
  • vitesse : 2400, 4800, 9600, 19200 ou 38400 bauds
  • 8 bits de données
  • pas de bit de parité
  • 2 bits de stop.

Le protocole de communication :

Il existe 2 protocoles de communication avec l'IB :

  • le P50 initialement mis en place par Marklin

  • le P50X mis en place par Uhlenbrock qui est une extension du protocole P50.

Le protocole P50X possède 2 versions :

  • la version P50Xa (ASCII) : ce sont des commandes en clair ('Stop' par exemple) à utiliser pour taper des commandes à la main

  • la version P50Xb (binaire) : les commandes sont des suites d'octets, chacun ayant une signification particulière. Ce protocole est particulièrement bien adapté à la conduite par ordinateur.

Le document p50Xopp.html dans les fichiers du groupe de discussion 'IBX' sur Yahoo liste et décrit les commandes des protocoles P50 et P50X.

L'archive P50X.ZIP téléchargeable sur le site du fabricant ou dans les fichiers du groupe de discussion 'IBX' sur Yahoo contient des informations sur le protocole P50X :

  • P5XIntro.txt : un document introductif sur le P50X, les termes employés, les vitesses de communication possibles, la syntaxe générale des commandes P50Xa, la procédure d'identification de la vitesse et du protocole, la gestion de la ligne CTS, ...

  • P50XaGEN.txt : une description des commandes générales du protocole P50Xa.

  • P50X_GEN.txt : une description des commandes générales et liées aux événements du protocole P50Xb.

  • P50X_LT.txt : une description des commandes pour les locomotives et les aiguillages des protocoles P50Xa et P50Xb.

  • P50X_PT.txt : une description des commandes pour la programmation des décodeurs avec les protocoles P50Xa et P50Xb.

  • IB.BAS et IBE.BAS : des exemples en Basic d'utilisation des commandes du protocole P50X et en particulier, la procédure de détection automatique de la vitesse de communication.

Si on s'intéresse uniquement au protocole P50Xb pour la commande des locos et des aiguillages, les fichiers nécessaires sont P5XIntro.txt, P50X_GEN.txt et P50X_LT.txt.

Syntaxe :

La syntaxe du protocole P50Xb est la suivante :

  • 1 octet d'en-tête pouvant être la lettre 'X' ou 'x' indiquant que la commande utilise le protocole P50X

  • 1 octet indiquant la commande à exécuter

  • éventuellement des octets supplémentaires en fonction de la commande à exécuter.

La plupart des commandes P50X entrainent une réponse de l'IB sous forme de texte ASCII pour le protocole P50Xa et sous forme binaire pour le protocole P50Xb.

Remarque : dans le cas où on utilisera uniquement des commandes du protocole P50X, il est possible d'activer le mode P50X seulement par la commande xZzA1 suivie du caractère retour chariot ce qui permettra de supprimer le premier octet ('x' ou 'X') pour les commandes P50X suivantes. Il est également possible d'activer le mode P50X seulement dans le menu de l'IB (Menu -> Mode -> Interface -> Syntaxe -> uniq. IB-Syn).

Premiers pas :

Un des premiers tests que vous pouvez faire pour vérifier la communication avec l'IB est d'utiliser un programme de communication pour taper des commandes P50Xa à la main. Vous pouvez le faire facilement avec le programme WDiags.exe par exemple ou avec l'HyperTerminal. Lancer ce programme, choisissez le port COM connecté à votre IB, configurez la liaison (vitesse correspondant à celle de votre IB, 8 bits de données, aucune parité, 2 bits de stop). Ouvrez le port COM et tapez ensuite les commandes à envoyer à l'IB suivie d'un retour chariot et vérifiez le fonctionnement.

Il convient d'abord de vérifier si les protocoles P50 et P50X sont actifs. Par défaut, si vous n'avez pas modifié la configuration de l'IBox, les 2 protocoles sont actifs. Dans ce cas, l'envoi d'un simple retour chariot ne donne lieu à aucune réponse (commande P50 vide). Par contre, lors de l'envoi de 'x' ou 'X' suivi d'un retour chariot, l'IBox répond par un crochet fermant (']') correspondant à la réponse à une commande vide en P50X. Si vous avez modifié la configuration de l'IBox pour définir le mode P50X seulement, l'envoi de 'x' ou 'X' n'est pas nécessaire et l'IBox répond par un ']' à l'envoi d'un retour chariot.

Quelques exemples :

Commande
Réponse
Action effectuée
xGo ]Pwr On IBox en mode Go (led verte allumée)
xStop ]Pwr Off IBox en mode Stop (led rouge allumée)
xV ]IB (SPU).... Donne les versions et le numéro de série de l'IBox


Test P50 et P50X

D'autres commandes P50Xa sont décrites dans les documents P50XaGEN.txt,P50X_LT.txt et P50X_PT.txt.
Si ces commandes ne fonctionnent pas, vérifiez votre câble, les paramètres de transmission (vitesse correspondant à celle de votre IBox, 8 bits de données, aucune parité, 2 bits de stop). Si l'IBox est déjà en  mode P50X seulement (voir la remarque plus haut), ne pas envoyer le 'x' de début de commande.

Bien, la communication avec l'IBox fonctionne, arrêtons de jouer et passons maintenant au protocole P50Xb.

Le protocole P50Xb :

Pour plus de simplicité, nous allons passer en mode P50X seulement si ce n'est pas déjà le cas. Pour ce faire, il suffit d'envoyer la commande xZzA1 suivie du caractère retour chariot. L'IBox répond : P50X only mode (P50 is disabled). A partir de ce moment là, le 'x' de début de commande ne doit plus être envoyé.

Protocole P50X seul

Nous allons commencer par tester le protocole P50Xb à le main. Le protocole P50Xb étant un protocole binaire, les valeurs des octets envoyés et reçus ne correspondent pas forcément à des touches du clavier. Pour pouvoir envoyer et visualiser les octets envoyés et reçus, il est souhaitable de passer en mode Debug (bouton Debug Hexa du programme WDiags.exe). Les valeurs des différents octets seront ainsi visualisés en hexadécimal.

Le premier test consiste à tester la communication avec l'IBox en lui envoyant une commande ne faisant rien d'autre que retourner un octet de valeur 00h (h comme hexadécimal) signifiant que tout est Ok. Cette commande s'appelle XNOP et son code est C4 en hexadécimal soit C4h. Elle est décrite dans le document P5OX_GEN.TXT. Dans le programme WDiags.exe, cliquez sur Définition trame puis saisissez la valeur C4 dans la zone de saisie et validez par OK. Cliquez alors sur le bouton Envoi trame : le texte.:C4 s'affiche dans la fenêtre d'émission et le texte .:00 dans la fenêtre de réception. L'IBox vient de répondre positivement (00h signifie OK) à la commande XNOP du protocole P50Xb ! Encore une fois (je sais, je me répète !), je suppose que l'IBox est en mode P50X seulement. Si ce n'est pas le cas, il faut faire précéder les commandes de la lettre 'x' ou plus simplement passer en mode P50X seulement (voir plus haut).

Deux autres exemples simples sont les commandes XPwrOn et XPwrOff équivalentes aux commandes Go et Stop du protocole P50Xa. Essayez la procédure précédence en remplaçant la valeur C4h par A7h pour la commande XPwrOn et par A6h pour la commande XPwrOff.  

Test P50Xb : XNOP, XPwrOn et XPwrOff

Allons maintenant plus loin en conduisant une loco. La commande à utiliser se nomme XLok et son code est 80h. Elle est décrite dans le document P50X_LT.TXT. Nous allons voir comment décrypter la documentation sur cette commande :

*** XLok (080h) - length = 1+4 bytes
La commande se nomme XLok, son code est 80h, elle est composée d'un octet de commande (de valeur 80h) et de 4 paramètres.

Parameters (byte) - please check also P50Xa 'L' cmd:
1st    low byte of Lok address
2nd    high byte of Lok address
Le premier paramètre représente l'octet de poids faible de l'adresse de la loco.
Le deuxième paramètre représente l'octet de poids fort de l'adresse de la loco.

3rd    speed (0..127: 0 = Stop, 1 = Stop/Em.Stop)
    N.B. bit #7 is reserved for future use!


Le troisième paramètre représente la vitesse de la loco. Elle est comprise entre 0 et 127 en décimal soit entre 0 et 7F en hexadécimal. La valeur 0 signifie l'arrêt (arrêt progressif utilisant la valeur de décélération contenue dans le CV4 du décodeur de la loco), la valeur 1 signifie l'arrêt d'urgence (arrêt immédiat). La valeur 2 représente la plus petite vitesse et la valeur 127 (ou 7Fh) la vitesse maximale.

4th    this byte has the following format:

    bit#   7     6     5     4     3     2     1     0
        +-----+-----+-----+-----+-----+-----+-----+-----+
        |ChgF |Force| Dir | FL  | F4  | F3  | F2  | F1  |
        +-----+-----+-----+-----+-----+-----+-----+-----+

    where:
        ChgF    set if F1..F4 to be used for setting F1..F4 of
            Lok (otherwise F1..F4 are ignored)
        Force    if set (1), then the XLok command is 'forced'
            even in case of a Lok already controlled by a
            non-PC device
        Dir    Lok direction: 1 = forward, 0 = reverse
        FL    Lok light status: 1 = on, 0 = off
        F4..F1    Lok F4..F1 status (if ChgF is set)


Le quatrième paramètre est un octet dans lequel chaque bit a une signification particulière :
Bit n°7 : il se nomme ChgF. Il doit être à 1 si les bits nommés F4 à F1 doivent être utilisés pour piloter les fonctions F4 à F1 du décodeur de la loco. Si ce bit est mis à 0, les bits nommés F4 à F1 sont ignorés et les fonctions F4 à F1 du décodeur seront inchangées.
Bit n°6 : il se nomme Force. Si ce bit est à 1, la commande XLok est forcée même si la loco est déjà sous le contrôle d'un équipement (IBox, IBControl, commande à main, ...). Si ce bit est à 0 et que la loco est déjà sous le contrôle d'un équipement, la commande sera refusée.
Bit n°5 : il se nomme Dir. Il représente le sens de déplacement de la loco. La valeur 1 signifie marche avant et la valeur 0 marche arrière.
Bit n°4 : il se nomme FL. Il représente l'état des feux de la loco (fonction F0). La valeur 1 signifie allumé et la valeur 0 éteint.
Bit n°3 à n°0 : ils se nomment F4 à F1. Ils représentent les fonctions F4 à F1 du décodeur de la loco. La valeur 1 signifie fonction activée et la valeur 0 fonction déactivée. Ces bits ne seront pris en compte que si le bit n°7 (ChgF) est à 1.

N.B.    Address must be in range 0..9999
    (depending on protocol, not every address is legal!)


L'adresse de la loco doit être dans l'intervalle 0 à 9999. Suivant le protocole (Motorola, DCC, Selectrix, ...), toutes les adresses ne sont pas autorisées.

Reply:
1st    either 00h (cmd Ok) or error code.
Réponse de l'IBox :
un seul octet de valeur 00h ou différente de 00h. La valeur 00h signifie que tout est Ok. Une valeur différente de 00h signifie qu'il y a une erreur ; la valeur représente alors le code de l'erreur.

Error/warning codes:
XBADPRM (02h)    illegal parameter value
XNOLSPC (08h)    there is no space in the Lok cmd buffer, please try later!
XNOSLOT (0Bh)    there is no slot available
XBADLNP (0Ch)    Lok# is illegal for this protocol
XLKBUSY (0Dh)    Lok already controlled by another device
XLKHALT (41h)    Command accepted (Lok status updated), but IB in 'Halt' mode!
XLkPOFF (42h)    Command accepted (Lok status updated), but IB in Power Off!
Liste des codes d'erreurs :
XBADPRM : valeur 02h : valeur de paramètre illégale (vitesse illégale)
XNOLSPC : valeur 08h : plus de place dans le tampon des commandes des locos, réessayez un peu plus tard SVP !
XNOSLOT : valeur 0Bh : plus de slot disponible pour piloter cette loco (trop de locos simultanément)
XBADLNP : valeur 0Ch : l'adresse de la loco est illégale pour le protocole concerné
XLKBUSY : valeur 0Dh : la loco est déjà  sous le contrôle d'un équipement (voir le bit Force pour forcer la commande)
XLKHALT : valeur 41h : la commande a été acceptée mais la loco ne peut pas être actuellement conduite car l'IBox est en mode Halt (toutes les locos sont stoppées)
XLkPOFF : valeur 42h :     la commande a été acceptée mais la loco ne peut pas être actuellement conduite car l'IBox est en mode Stop (alimentation des voies coupée)

Ouf !

Exemple :

Un petit exemple peut-être pour éclairer les points encore obscurs ?

Supposons que l'on souhaite conduire la loco d'adresse 12 (en décimal) à la moitié de la vitesse maximale en marche arrière, feux allumés, fonctions F1 activée, fonctions F4 à F2 déactivée même si la loco est déjà sous le contrôle d'un autre équipement.
Les deux premiers paramètres représentent l'adresse de la loco, ici 12 en décimal soit 0C en hexadécimal ou 000Ch. Ceci nous donne donc 0Ch pour le premier paramètre et 00h pour le deuxième.
Le troisième paramètre représente la vitesse souhaitée de la loco, ici la moitié de la vitesse maximale c'est à dire environ 64 en décimal soit 40h.
Pour le quatrième paramètre, les valeurs des différents bits doivent être les suivantes :
bit n°7 : à 1 pour pouvoir activer la fonction F1
bit n°6 : à 1 pour pouvoir conduire la loco même si elle est déjà sous le contrôle d'un autre équipement
bit n°5 : à 0 pour la marche en arrière
bit n°4 : à 1 pour allumer les feux de la loco
bits n°3 à n°1 : à 0 pour désactiver les fonction F4 à F2
bit n°0 : à 1 pour activer la fonction F1.
Ceci nous donne la valeur 1101 0001 en binaire soit D1h.
Au bilan, les octets à envoyer sont :
80h, 0Ch, 00h, 40h, D1h.

Dans le programme WDiags.exe, cliquez sur Définition trame puis saisissez les valeurs 80 0C 00 40 D1 dans la zone de saisie et validez par OK. Cliquez alors sur le bouton Envoi trame : les valeurs envoyées s'affichent dans la fenêtre d'émission et normalement la valeur .:00 s'affiche dans la fenêtre de réception. L'IBox vient de répondre positivement (00h signifie OK) à votre commande XLok ! Si l'IBox ne répond pas, vérifier la communication avec la commande XNOP (voir plus haut). Si l'IBox ne répond pas avec la valeur 00h, déterminez la cause de l'erreur en observant le code d'erreur retourné.

Conduite de la loco 12

Si la loco d'adresse 12 est sous le contrôle de l'IBox,les leds function et f1 doivent s'allumer et l'affichage doit indiquer que la vitesse est à la moitié de la vitesse maximale.

La loco 12 conduite à partir de l'ordinateur

Voilà. C'est simple, non ? Les autres commandes du protocole P50Xb fonctionnent de manière similaire.

Si vous souhaitez développer votre propre programme de conduite, il ne vous reste plus qu'à prendre votre outil de développement préféré et à l'utiliser pour communiquer avec l'IBox par la liaison série.

Bon courage !!!


Posté initialement par Eric LIMOUSIN le Dimanche 14 octobre 2012 à 12h33min

Retour >
Réagir sur cet Article ?
Pas de commentaires !