Bonjour les amis
j'ai un probleme , je veux envoyer ces variables en modbus RTu avec le rs485, j'ai beau cherché sur internet mais j'ai pas compris , comment dois je envoyer ces variables ?
Bonjour les amis
j'ai un probleme , je veux envoyer ces variables en modbus RTu avec le rs485, j'ai beau cherché sur internet mais j'ai pas compris , comment dois je envoyer ces variables ?
Et bien, tu recherches d'abord comment tu vas pouvoir utiliser du RS485 avec un Arduino (je suppose que tu en as un?). Tu recherches "RS485 Arduino" sur G**gle
Ensuite tu te familiarises avec le protocole Modbus sur RS485. Tu cherches "Modbus RS485"
Puis tu cherches s'il existe des biblio toutes faites pour Arduino.
Enfin, tu écris ton code.
Merci de me rependre ,
pour bien clarifier mon projet je veux connecté mon arduino nano avec un automate avec la communication modbus
enfaite j'ai trouvé les bibliothèque mais j'arrive pas à les comprendre , et vue que j'ai trouvé pas mal de bibliotheque je sais pas la plus compatible pour mon projet
j'ai deux variables réel ce que j'ai compris c'est que je dois les convertir en un mot pour que je puisse les envoyer ,donc ma question c'est comment faire la conversion et comment stocker ces variable dans des registres
je vais des exemple simple de transfer de donné si c'est possible
Merci
ModBus est un protocole normé. Il n'y a pas de librairie non compatible.
Choisis une librairie avec des exemples, ceux qui seront susceptibles de t'aider.
Pour répondre à ta question, il n'y a aucune conversion à faire.
Tu crées une structure comportant deux membres du type qui t'intéresse :
struct message
{
float temperature;
float humidity;
};
struct message msg;
Tu renseignes les deux variables membres à l'aide des infos des capteurs et tu envoies.
Merci pour votre repense
est ce que je dois utilisé l'arduino comme un esclave ou bien un maitre ?
le but c'est d'envoyer les données à l'automate
hbachetti:
ModBus est un protocole normé. Il n'y a pas de librairie non compatible.
vous pouvez me recommander une library pour mon nano s'il vous plais
est ce que je dois utilisé l'arduino comme un esclave ou bien un maitre ?
Il faudrait d'abord savoir si l'automate est maître ou non. Je suppose que oui.
vous pouvez me recommander une library pour mon nano s'il vous plais
Aucune idée. Je n'ai jamais essayé le RS485 sur ARDUINO.
hbachetti:
Il faudrait d'abord savoir si l'automate est maître ou non. Je suppose que oui.
s'il vous plais tu peut m'aider a faire un petit programme pour envoyer les donnée en mod bus
Désolé je n'ai pas de convertisseur UART / RS485 sous la main.
D'ailleurs j'espère que toi-même tu as ce qu'il faut, car sans convertisseur tu n'iras pas loin.
Il faudra aussi connaître le contenu des trames que va envoyer le maître et le format des réponses attendues.
hbachetti:
D'ailleurs j'espère que toi-même tu as ce qu'il faut, car sans convertisseur tu n'iras pas loin.
je convertisseur je vais le recevoir demain , j'ai lu des documentation concernant le rs485, mais j'ai pas arrivé à comprendre tout seul , les registre... vous avez une idée comment faire pour stocker les valeur sur des registres ?
Bonjour,
Comme le dit hbachetti il te faut d'abord une interface CMOS-RS485
Ensuite les exemples de gestion modbus ne manquent pas sur le net. Ici tu as un exemple (SimpleModbusSlaveExampleUNO) d'esclave Modbus qui semble être un bon exemple pour ton application.
Pour répondre plus précisément à ta question
Tu gères deux registres, par exemple le 0 pour la température et 1 pour l'humidité.
Comme modbus gère des mots, il faut que tu convertisses tes mesures en entiers non signés. Pour ne pas perdre en précision il faut transmettre des dixièmes (ou centièmes) de degrés, idem pour l'humidité.
Si tes mesures sont en float tu fais par exemple
holdingRegs[0]=10*temperature;
holdingRegs[1]=10*humidite;
Du coté réception, il faut que tu interprètes les mesures comme des dixièmes de degré et des dixième de % d'humidité.
Bonjour Kamill ,
j'ai essayé de télécharger la bibliothèque mais il m affiche ce msg "Le dossier spécifié ne contiens pas de bibliothèque valide".
Le zip contient 3 librairies. Il faut que tu copies le répertoire SimpleModbusSlave du zip vers le répertoire libraries de ton répertoire Arduino.
ca marche maintenant le programme , je vais essayer de faire des modification dedans pour voir ce que ca donne
kamill:
Si tes mesures sont en float tu fais par exempleholdingRegs[0]=10*temperature;
holdingRegs[1]=10*humidite;
Du coté réception, il faut que tu interprètes les mesures comme des dixièmes de degré et des dixième de % d'humidité.
si je fait ça je pense que je vais recevoir seulement la valeurs positive ?
Oui, par défaut les registres modbus sont non signés.
Mais rien n’empêche d'interpréter les mesures reçues comme signées (ça dépend du programme de réception).
Rebonjour
/* if (Temperature> 0)
{ temp=Temperature*10;
}
else
temp=Temperature*100+65536;
holdingRegs[0]=temp;
*/
j'ai fait ce petit programme , pour que je puise envoyer les mots (sois la temperature positive sois negatige) est je veux savoir si c'est just ?
Merci pour votre aides
Moi j'aurai fait simplement
holdingRegs[0]=(int16_t)(10*temperature);
et du côté réception tu l'interprètes comme signė.
c'est bon Merci
donc ce que j'ai compris dans la partis arduino il suffit de stocker la variable dans un registre et l'automate dois accéder au registre pour extraire la valeur ?.
Oui. L'automate fait une demande à l'esclave pour qu'il envoie un ou des registres.