Page 1 sur 2

PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 14:31
par DJAbsolom
Bonjour à tous, je suis nouveau ici et je profite déjà du forum.



Si qqn sait me dire ce qui passe comme information dans la liaison série entre l'intellibox et le PC.



J'aimerais créer mon propre programme de commande mais sansces informations, ca va être impossible.



Merci à bientot.

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 14:47
par fabounet
Salut Fabrice et bienvenue sur le forum :) .

Pour ce qui concerne la liaison série entre un PC et une Intellibox, le langage (ou plutot protocole) utilisé est le P50X. Si mes souvenir sont bons, tu ouvres une liaison série entre l'IB et Windows, et tu envoies des codes en hexadécimal qui on une correspondance en P50X.

Nous sommes deux sur ce forum a avoir programmer un logiciel pour commander l'Intellibox.

Alain (ou PNl0l) en a fait un pour Windows, et j'en ai fait un sous linux (avec l'aide d'Alain...)



Tu peux trouver des infos sur ce protocole chez uhlenbrock ou chez Modeltreno.



N'hésite pas à nous questionner !

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 15:12
par DJAbsolom
En effet on m'a déjà parlé du protocole P50X, j'ai été téléchargé la norme et je l'ai imprimé, mais le hic, c'estqu'elle est en anglais, et moi c'est pas trop mon fort l'anglais, il n'existe pas une version française ?

Merci.



Fabrice.

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 17:20
par fabounet
Malheureusement, je crois que tu vas etre obligé de te mettre à l'anglais, car à ma connaissance, il n'éxiste pas de doc en français... :(

Ceci étant il n'y a rien de compliqué dans la doc...

Au pire si tu as un soucis parles en ici, et on trouvera une solution ;) .

Une dernière chose, J'ai utilisé le protocole P50Xb, qui il me semble est plus performant...

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 18:03
par DJAbsolom
Ok, je vais me mettre à la tâche lol.

Mais au fait quel est ta configuration ? Moi j'utilise le DCC avec Intellibox.



Tu pourrais me donner un exemple de chaine que tu envois sur le port RS232 pour par exemple

faire fonctionner en marche avant, feux allumé, la locomotive d'adresse 59 à une vitesse de 15 ?



MErci Fabrice.

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 21:20
par DJAbsolom
Bon je progrresse, je suis arrivé à faire:



Xpwroff en envoyant: 0C6h + 0A6h sur le port 3F8h (COM1) > essais concluant



Xpwron en envoyant: 0C6h + 0A7h sur le port 3F8h (COM1) > essais concluant



par contre, lorsque j'essaye de faire démarrer une locomotive:



adresse: 59 > high byte = 00h et low byte = 3Bh (les valeurs hexa sont-elles correctes ?)

vitesse: 15 > speed byte = 0Fh (la valeur hexa est-elle correcte ?)

pas d'utilisation de F1,F2,F3 et F4 > bit 7 du byte 4 = 0

loco pas encore sous contrôle via l'IB > bit 6 du byte 4 = 0

direction - marche arrière (peu importe) > bit 5 du byte 4 = 0

feux allumés > bit 4 du byte 4 = 1

pas d'utilisation de F1 > bit 3 du byte 4 = 0

pas d'utilisation de F2 > bit 2 du byte 4 = 0

pas d'utilisation de F3 > bit 1 du byte 4 = 0

pas d'utilisation de F4 > bit 0 du byte 4 = 0

valeur du byte 4 = 10h (la valeur hexa est-elle correcte ?)



j'ai fais divers essais en envoyant sur le port 3F8h (COM1):

00h + 3Bh + 0Fh + 10h > ne fonctionne pas

C6h + 00h + 3Bh + 0Fh + 10h > ne fonctionne pas

C7h + 00h + 3Bh + 0Fh + 10h > ne fonctionne pas



Quelqu'un peut me dire où se trouve mon erreur?



Merci.



Fabrice.


Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 21:31
par alain.trinquet
Comme le dit Fabounet, il n'y a rien de compliqué : c'est une documentation en anglais écrite par un italien ! Autant te dire que ce n'est pas du Shakespeare ;)

Juste un petit exemple pour t'aider à démarrer :

Dans le document 'P50X_LT.txt', tu peux lire :



P50Xb (P50X binary) locomotive & turnout control commands.

----------------------------------------------------------

*** XLok (080h) - length = 1+4 bytes

Parameters (byte) - please check also P50Xa 'L' cmd:

1st low byte of Lok address

2nd high byte of Lok address

3rd speed (0..127: 0 = Stop, 1 = Stop/Em.Stop)

N.B. bit #7 is reserved for future use!

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)



Reply:

1st either 00h (cmd Ok) or error code.



En clair, ce paragraphe décrit la commande 'XLok' du protocole de communication P50Xb (version binaire). Cette commande a une taille de : 1+4=5 octets.

Le premier octet à envoyer est la commande XLok, soit l'octet de valeur 80 en hexadécimal.

Puis suivent 4 octets qui sont les 4 paramètres de cette commande :

1er paramètre : l'octet de poids faible de l'adresse de la loco.

2ème paramètre : l'octet de poids fort de l'adresse de la loco.

3ème paramètre : la vitesse de la loco sur une échelle de 0 à 127. 0 = arrêt progressif (avec inertie), 1 = arrêt d'urgence (sans inertie), 2 = premier cran de vitesse (vitesse minimale), 127 = dernier cran de vitesse (vitesse maximale).

4ème paramètre : un octet dans lequel chaque bit a une signification particulière.

-bits 0 à 3 : l'état des fonctions F1 à F4 (1 pour activer la fonction)

-bit 4 : l'état de la fonction F0, c'est à dire les feux (1 pour allumer les feux).

-bit 5 : le sens de marche (1 pour la marche avant)

-bit 6 : forçage de la commande de la loco même si elle est déjà sous contrôle (1 pour forcer).

-bit 7 : mettre à 1 pour que les valeurs des bits 0 à 3 (fonctions F1 à F4) soient prises en compte.



La réponse de l'IBox est constituée d'un seul octet. La valeur 0 signifie que tout c'est bien passé. Sinon, une valeur différente de 0 est un code d'erreur qui permet de savoir pourquoi ça n'a pas réussi.



Bon, maintenant concrétement, pour faire fonctionner en marche avant, feux allumé, la locomotive d'adresse 59 à une vitesse de 15, il faut envoyer :

1er octet : 80 en hexa (commande XLok)

2ème octet : 3B en hexa (59 en décimal)

3ème octet : 0

4ème octet : 0F en hexa (15 en décimal)

5ème octet : F0 en hexa (marche avant, feux allumés, pas de fonctions F1 à F4).

L'IBox doit répondre 0.



Il faut bien sûr que l'IBox soit connectée au PC à la bonne vitesse (voir dans le menu de configuration). Pour valider la communication entre l'IBox et le PC, on peut commencer en s'amusant à taper à la main des commandes du protocole P50Xa (ASCII).



Bon amusement !

:)

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 22:20
par DJAbsolom
C'est bizare, j'envois exactement les 5 octet que tu m'as donné en exemple, rien ne se passe et je récupère un code d'erreur 02h.



A quoi cela correspond?



Devant les 5 octets, ne dois je pas envoyé autre chose, du genre 0C7h ou 0C6h





*** XP50Len2 (0C7h) - length = 1+2 bytes

Parameters (byte):

1st & 2nd same as a two byte long P50 cmd (e.g. Lok control,

Fnc control and Turnout control (red on/greenon))

N.B. there is NO reply!





merci bcp j'avance, lentement mais surement :)



Fabrice.

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 22:29
par DJAbsolom
C'est bizare, j'envois exactement les 5 octet que tu m'as donné en exemple, rien ne se passe et je récupère un code d'erreur 02h.



A quoi cela correspond?



Devant les 5 octets, ne dois je pas envoyé autre chose, du genre 0C7h ou 0C6h





*** XP50Len2 (0C7h) - length = 1+2 bytes

Parameters (byte):

1st & 2nd same as a two byte long P50 cmd (e.g. Lok control,

Fnc control and Turnout control (red on/greenon))

N.B. there is NO reply!





merci bcp j'avance, lentement mais surement :)



Fabrice.

Re : PC <> RSR232 <> INTELLIBOX

MessagePublié: 06 Novembre 2005, 23:32
par alain.trinquet
Non, pas de C7h ou C6h devant.

Bon, précisons les choses. Par défaut, au démarrage, l'IBox peut accepter des commandes P50 et P50x. Les commandes P50 sont envoyées directement alors que les commandes P50x sont précédées du caractère 'x' ou 'X' ; c'est ce qui permet de les différencier. Il faut donc que tu envoie d'abord 'x' ou 'X' puis les 5 octets.

Mais il est plus pratique de déactiver le protocole P50 par la commande "xZzA1"(suivie d'un retour chariot) : ensuite, il n'est plus nécessaire de faire précéder les commandes P50x du caractère 'x' ou 'X'.



Je te conseille de bien lire les documents 'P5XINTRO.TXT' et 'P50_GEN.TXT' (je sais, c'est en anglais mais il faut y passer, il faut bien que les cours d'anglais servent à quelque chose ;) ) Ensuite, comme je te le disais plus haut, le protocole P50Xa est juste à utiliser pour s'amuser à commander ses locos en tapant des commandes à la main. Pour une commande par un programme, utiliser le protocole P50Xb : il est beaucoup plus pratique.

Tu peux aussi commencer par commander une loco à la main à partir d'un programme du genre 'Hyper Terminal' : cela permet de bien comprendre comment ça marche et de tester les commandes P50 et P50Xa. D'une manière générale, je te conseille de commencer par tester les commandes à envoyer à partir d'un programme du genre 'Hyper Terminal' avant de les envoyer à partir de ton programme.

Bon courage.