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;
}