Communication RS485
2 participants
GFA :: Programmation :: Utilitaires
Page 1 sur 1
Communication RS485
Communication RS485
Par Lafleche
Par Lafleche
Comme déjà mentionné dans un sujet du forums "Questions Réponses" que j'ai allègrement pollué, je me suis amusé à codé le protocole Modbus permettant à 250 STs (!) de communiquer moyennant un convertisseur RS232/RS485 (du coup moyennant 250 convertisseurs si on veut vraiment connecter 250 STs ).
Depuis je regarde régulièrement le site de mon fournisseur de cartes électroniques préféré, et j'ai vu ce week end une nouvelle carte pilotable par RS485, du coup je l'ai achetée, mais point encore reçu.
Il s'agit, si on ne se fie qu'à la description, d'un afficheur LCD pilotable entre autres par RS485, le MuIn LCD.
Je me suis lancé aussi car par défaut la vitesse de transmission est de 19200 bauds (d'autres cartes proposant par défaut des vitesses supérieures à celles du st seraient embettantes à gérer, car il faut alors se connecter à la vitesse par défaut (du genre 115200 bauds par exemple) pour lui demander de se caler sur une vitesse inférieure, du coup ingérable pour un ST).
Mais ce qui est top, c'est que cette petite carte ne fait pas "que" ça. Il s'agit en fait d'une vraie petite carte intelligente capable entre autres de gérer un afficheur lcd, mais elle propose aussi :
- un buzzer (moui bon ...)
- 6 ports entrée/sortie (ça c'est mieux déjà !)
- 5 entrées convertisseurs Analogique-Numérique (pour brancher des capteurs de tous genres)
Le seul problème de cette petite carte magique, est qu'elle ne gère pas le protocole Modbus mais un protocole apparemment "maison".
La bonne nouvelle, c'est que comparé à Modbus ce protocole est fastoche, les messages s'envoient sous la forme suivante :
'@', ADDR_TO, ADDR_FROM, N_BYTES, BYTE1, BYTE2 ... BYTEn, CRC16H, CRC16L, '#'
par rapport au modbus où on a quelque chose du style :
':', ADDR_TO, ADDR_DATA, BYTE1, BYTE2,...BYTEn, LRC, CRLF
Donc c'est pas bien différent quoi ...
Dans le cas de l'envoi de messages sur l'afficheur, pas de problème il s'agit juste d'envoyer la chaîne de caractères qui va bien, mais dans le cas où on branche un capteur à la carte (où quoi que ce soit d'autre, la limite votre imagination ...), il faut décoder la trame pour recevoir la valeur demandée.
J'ai adapté très facilement mon programme Modbus client pour décoder les trames en question, mais n'ayant pas encore reçu la bête, j'ai fini par faire un simulateur de MuIn LCD pour préparer le terrain.
La copie d'écran montre le résultat de la réception par le port série de la trame suivante :
@ &H0E &H01 &H14 T e s t s u r 2 0 c a r a c t e r 0&h0 0&h0 #
ou traduit : Dispositif numéro 1 appelle dispositif 14 (LCD) pour envoi des 20 caracteres (14 hexa) suivants "Test sur 20 caracter", fin de message
[Vous devez être inscrit et connecté pour voir ce lien]
Lafleche :
Ah oui, j'oubliais l'intérêt majeur de se conformer à ces spécifications : si ça fonctionne,, ça fonctionnera pour toutes les cartes de la société en question (Droids) qui comporte entre autres dans son catalogue une Carte DSP pilotable par RS485 ... :mrgreen:
ManuM :
Super !!!, JB va etre content , lui qui cherche comment récuperer des signaux de pression et de vitesse pour ses fusées
merci Mr Lafleche pour tes recherches sur le RS 485 , je vais jeter un oeil chez DROIDS !!
Lafleche :
Oui j'ai eu JB par mail, et on a déjà causé de tout ça, je pense que ce style de carte peut faciliter pas mal de choses ...
N'hésite pas à passer chez Droids, ils sont super cools en plus, j'ai posé une question sur leur forum hier et dans la journée j'avais une réponse, ils sont très accessibles.
J'ai reçu la bête hier et j'avais des doutes sur la terminologie utilisée pour les deux fils du RS485, A et B, alors que sur mes adaptateurs j'avais TRX- et TRX+.
Ils m'ont répondu , je viens de tester et ... ça marche du tonnerre !
En fait j'ai galéré en voulant essayer la carte sur Linux et mon Mac, et c'était la plaie pour faire reconnaître le bazard sur le port USB.
Sur ST trop fastoche, branchage des deux fils en RS485, un coup de GFA et l'instruction "OUT" pour écrire mes premiers messages, pas plus compliqué que ça.
Ensuite j'ai activé le Mode RS485 de l'afficheur pour faire du multi-points, car de base il est configuré en mode point par point direct.
En mode "de base" (style RS232 ou USB), tout ce que tu envoies apparait directement à l'écran tel quel, en mode multi-points on utilise le système d'adressage décrit ci-dessus.
Mais c'est pas plus compliqué que ça, l'appareil a l'adresse 14 et ne répond qu'à celle-ci.
Prochaine étape dès que j'ai un peu de temps, branchage de plusieurs machines en RS485 + la carte et chacun envoyant ses ordres sans parasiter l'autre. Normalement aucun problème puisque j'ai déjà préparé le code.
Ensuite je testerai les entrées analogiques en branchant un capteur dessus dès que j'en aurai un sous la main (peut être une photo resistance, ou , remarque, un bête potentiomètre peut suffire pour faire le test pour le moment)
ManuM :
Cool!!! ,toujours pret pour l'action ce bon vieux ST !!
Je me suis remis a ma télécommande IR (mais cette fois ci j'utilise le port cartouche)
pour piloter ma TNT sur ST (elle était pilotée par le port //)
j'Jtais limité par les contacts accessibles en façade (M/A,P+,P-)
pour le moment ça encore besoin de réglages (modulation porteuse , puissance diode de sortie IR)
Si tout va bien je testerai le bus differentiel du RS485 par le port cartouche pour piloter du DMX
( j'ai trouvé une interface RS232 19600 DMX mais aucune activité avec mes PC alors pour transposer vers
mon ST sans voir aucune trame )
Lafleche :
Ouah tu passes à la vitesse supérieure en t'attaquant au port cartouche ...
Du RS485 par ce biais, j'imagine que tu comptes passer par une puce du style MAXxxx pour convertir le TTL en RS485 ?
J'aimerais avoir suffisamment de temps pour continuer mon idée de plateforme robotique à base de st avec communication entre les modules par RS485.
J'ai un vieux STF dédié à ça dont j'ai dessoudé le connecteur cartouche, j'aimerais brancher à la place un support de ci pour mettre une eeprom avec un prog qui shunte le gem.
En fait j'ai fait le test de mettre le st sur accus sans alim 12V (qui a priori ne sert que pour le lecteur de disquettes et une broche du signal péritel), sans lecteur de disquettes, et ça boote bien sur le bureau, mais bien sûr celui ci reste vierge.
Alors un TOS qui boote sur afficheur LCD ? j'avoue que ça me ferai marrer (on s'amuse comme on peut) ...
Bien joué en tous cas pour des bidouilles, tu dois avoir un niveau en "hard" qui tient la route
Ton adaptateur tu l'as essayé sur ST ?
parce que vu mes aventures je suis sûr que tu aurais plus de facilité à le faire marcher sur st ...
ManuM :
Je n'ai pas un niveau très élevé mais je suis curieux (remarque je n'avais pas pensé a mettre le ST sur accus mais mon ZX81 lui c'est fait )
il y a 15 ans j'avais plein de projets pour le ST mais pas "la capacité" de les faire en programmation (ça fait que 2 ans que je code en GFA !!)
mais maintenant c'est le temps libre qui fait défaut , alors je suis que des projets soient réalisés , ça me boost pour continuer
Il y a encore des accessoires à greffer sur le ST
Lafleche :
Voila j'ai bien joué avec mon nouveau jouet, le module LCD fonctionne à merveille.
J'ai signalé à Droids quelques bugs que j'ai constaté, le module ne répond pas en utilisant le protocole, mais en renvoyant direct les données.
De plus, en mode USB les 5 entrées analogiques renvoient bien 10 octets correspondant à l'état de chaque octet, en mode RS485 je reçois 16 octets tous identiques et correspondant visiblement à l'état d'une seule entrée.
Je les excuse volontiers, c'est une boite très jeune (2010 je crois) avec de très bonnes idées, et en général ils sont capables de mettre à jour le firmware sur simple remarque d'un utilisateur (j'ai vu le cas dans l'histo de leur forum).
En tous cas les admins m'ont même dit qu'ils étaient prêts à m'aider si je leur expliquais mon projet (tu parles d'un projet).
J'essaye de faire quelques photos à l'occase pour vous montrer la bêêête en action (je ne parle pas de moi !)
Je vais peut être peter un cable à l'occase et brancher un joystick dessus aussi pour déconner ... (eh ... et si je prenais un joystick PC analogique ?)
ManuM :
la carte est bien bi-directionnelle? essai le retour de force sur le Joystick
(et dire que je voulais faire la meme chose avec une carte 16 bits I/O sur port cartouche !!!)
Vas y !!!! n'hésite pas
Lafleche :
J'ai pas de retour de force, mais par contre j'ai des moteurs à masse décentrée récupérés sur des vieux gsm !
Effet Dualshock façon playstation
Après un silence radio de quelques mois voici quelques nouvelles. J'ai utilisé mon travail sur ST pour un cours au Cnam, et maintenant que l'épreuve est terminée avec succès, je
peux vous en faire profiter.
Il s'agit d'une application de transfert de fichiers, où en tous cas de ses bases, le ST est en mode serveur, un client Linux avec interface graphique permet d'envoyer des fichiers au ST via RS485.
Pour le moment je gère l'envoi de fichiers vers le ST, à terme, peut être d'ici plusieurs mois encore , je compte gérer d'autres fonctions comme la lecture du répertoire distant et la réception de fichiers depuis le ST.
Quelques photos
[Vous devez être inscrit et connecté pour voir ce lien]
ManuM :
COOL , c'est decidé je commande une carte pour essayer le RS485 !!!!!
merci Lafleche
Lafleche :
Voici le site où j'ai acheté mon adaptateur pour le ST :
[Vous devez être inscrit et connecté pour voir ce lien]
Sur le même site ils vendent des adaptateurs USB-RS485 pour brancher sur un PC ou Mac récent.
Je me demande si je ne vais pas non plus à terme m'amuser à coder une fonction de messagerie instantanée, c'est carrément jouable.
Tomchi :
excellent !
Jbfou :
salut
Encore un grand codeur gfa
a croire que tout les grands sont de bon codeur un cooper ;-)
mais a quel vitesse tu charge tes fichiers?
aurons-nous le droit a une démonstration en live ?
encore une fois merci pour ton jolie travail.
Lafleche :
Ah la vitesse, le nerf de la guerre. JE ne sais plus très bien , je vais me remonter mon installation prochainement et me livrer à quelques tests.
Avant d'être pris à 100% par le cnam j'avais quelques idées pour travailler sur le sujet. Notamment j'ai dans mes cartons quelques oscillateurs : l'idée serait de remplacer l'oscillateur du MFP pour atteindre 28800 bauds au lieu de 19200.
Je crois me souvenir qu'il fallait 20 à 30 secondes pour une image PI1, du coup je les envoyais zippées et ça allait déjà beaucoup mieux.
Je ne sais plus trop non plus car il me semble qu'une des machines impliquées dans mon test de réseau (un portable sous minix, à moins que ce soit celui sous linux) était limité à 9600 bauds pour une obscure histoire de configuration.
A 19200 bauds et dans le mode le plus rapide du protocole (2 modes pour rappel, un standard, simple et lent, l'autre moins standard mais plus optimisé dans la façon dont les données sont transmises) la vitesse est correcte je trouve.
Bizarrement il y a déjà 15 ou 20 ans, vexé par la suprématie des PCs, je revais d'un système qui permettrait d'asservir un PC pour faire profiter au ST des avancées technologiques, telles que CDROM ou autre.
Par ce biais (ce n'est pas le seul) c'est faisable, juste probablement pas très performant à cause des limitations du MFP.
Un autre truc cool auquel j'ai pensé un jour serait l'accessoire "File moi ton code" : depuis l'éditeur GFA, tu bascules sur un accessoire qui envoit un listing à un autre ST connecté
Cooper :
a croire que tout les grands sont de bon codeur un cooper
Grands par la taille, oué, après pour le talent, c'est sûrement autre chose
Bravo pour tes progs Laflèche, l'afficheur LCD m'a bien fait délirer Pour le transfert de fichiers, ça peut faire une bonne alternatives à ceux qui n'ont pas de carte réseau. Tu as eventuellement pensé à faire un version windows du tool ou pas du tout ?
Asservir le PC, c'est ce que proposait Ghostlink tiens, depuis le GEM. Par contre pas très fiable le coucou, et assez lent Mais je m'en suis servi dans les premières années des lecteurs CD PC pour transferer le contenu des CD STratos sur mon STE
Un autre truc cool auquel j'ai pensé un jour serait l'accessoire "File moi ton code" : depuis l'éditeur GFA, tu bascules sur un accessoire qui envoit un listing à un autre ST connecté
Excellente idée !! Surtout quand on doit tester un truc genre jeu en réseau sur 2 machines, en ne souhaitant avoir qu'un éxecutable !
Lafleche :
La version Windows c'est faisable, le truc c'est que pour le moment, pour des questions de gain de temps, la partie encodage de la trame Modbus côté Linux est codée en script bash, à grands coups de "sed" pour les connaisseurs.
2 possibilités pour une version windows : utiliser sed pour windows (librairie cygwin), simple et portable ou ré-écrire l'encodage en natif java.
Je vais me renseigner sur Ghostlink pour voir ce qu'il proposait.
ManuM :
Certe Ghostlink est lent (1Ko/s sur mon ST),
mais on accéde à tout le PC (DVD,port USB,lecteur de cartes...) pas mal pour un PRG de 1994
dommage maintenant exit les ports RS et // sur les PCs récents
un module RSxxx/USB serait le bien venu
Leglod :
Il existe des adaptateurs usb serie
Re: Communication RS485
C'est vrai que les PC ont de moins en moins de port série, mais il y a encore des cartes qui ont des connecteurs sur la carte mère, il faut juste un bracket pour exposer le port DB9 à la sortie du PC. J'ai fait ça avec le mien et ça marche nickel (je m'en sert pour transférer des fichiers par ZMODEM).
Supers projets en tout cas !
Supers projets en tout cas !
vinz67- Messages : 6
Date d'inscription : 18/02/2020
Localisation : Durningen
GFA :: Programmation :: Utilitaires
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum