Aide pour porgramation Arduino ( Convertisser ascii en modbus RTU )
Publié : 10 juin 2016, 11:40
Bonjour tout le monde,
J'ai besoins de votre aide pour faire la conversion des trames reçus de mon programmes en Trames Modbus RTU.
Je vous envoie mon algorithme et le code effectuer , j'ai effectuer tout les taches sauf la partie " convertir les données ".
Merci d'avance de votre aide les amis .
Algorithme
- Recevoir donnée wifi ( via liaison RS232)
- lire donnée Reçus
- Convertir les données en RS485 ( c'est a dire modbus RTU)
- Transmettre les données en RS485 au commande treuil.
_____________________
Programme:
J'ai besoins de votre aide pour faire la conversion des trames reçus de mon programmes en Trames Modbus RTU.
Je vous envoie mon algorithme et le code effectuer , j'ai effectuer tout les taches sauf la partie " convertir les données ".
Merci d'avance de votre aide les amis .
Algorithme
- Recevoir donnée wifi ( via liaison RS232)
- lire donnée Reçus
- Convertir les données en RS485 ( c'est a dire modbus RTU)
- Transmettre les données en RS485 au commande treuil.
_____________________
Programme:
Code : Tout sélectionner
String messageRecu;
char bufferTransmissionRS485[256];
int led = 13;
int EN =2 ;//Definition RS485 shield enable terminal (the 2nd digital IO ports),
//high for the sending state, the low level of receiving state
//déclaration des prototypes des fonctions
int Rs485_Ecrire( char* ptrMessage, unsigned int pNombreOctet);
int Rs485_Lire(char* ptrMessageRecu, unsigned int pNombreOctet);
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial1.setTimeout(1000);
Serial.setTimeout(1000);
pinMode(led,OUTPUT);
pinMode(EN,OUTPUT);
}
void loop()
{
// variable contenant le caractère à lire
char reception = 0;
// variable contenant le nombre de caractère disponibles dans le buffer
int tailleMessage = 0;
//recepNombre = Serial1.available();
while (Serial1.available()) // tant qu'il y a des caractères à lire
{
messageRecu = Serial1.readString(); // on lit la chaine provenant du module Wifi
// Serial.print(messageRecu); // puis on le renvoi à l'expéditeur tel quel
//recepNombre = Serial.available(); // on relit le nombre de caractères dispo
}
tailleMessage = messageRecu.length();
if ( tailleMessage != 0)
{
messageRecu.toCharArray(bufferTransmissionRS485,tailleMessage);
Rs485_Ecrire(bufferTransmissionRS485,tailleMessage);
}
delay(2000);
messageRecu=""; //réinitialise le message reçu
}// fin fonction loop()
int Rs485_Ecrire( char* ptrMessage, unsigned int pNombreOctet)
{
int codeRetour=0;
digitalWrite(EN,HIGH); //Enable high, RS485 shield waiting to transmit data
codeRetour = Serial.write(ptrMessage,pNombreOctet);
delay(pNombreOctet);
return codeRetour;
}
int Rs485_Lire(char* ptrMessageRecu, unsigned int pNombreOctet)
{
int codeRetour=0;
digitalWrite(EN,LOW); //Enable low, RS485 shield waiting to receive data
codeRetour=Serial.readBytes(ptrMessageRecu, pNombreOctet);
return codeRetour;
}