Page 1 sur 1

Aide pour porgramation Arduino ( Convertisser ascii en modbus RTU )

Publié : 10 juin 2016, 11:40
par hugoflorian
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:

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