Aide pour porgramation Arduino ( Convertisser ascii en modbus RTU )

Bonjour tout le monde ,

Pourrais je avoir une aide ( voir une exemple ) pour pouvoir fonctionner un programme correctement s'il vous plait?

En fait je vous explique " j'ai une carte Arduino Mega + module wifi RN XV + module RS485 + convertisseur rs232 en rs485 " , le but c'est de recevoir des séquences par wifi par la liaison RS232 en moniteur Série Arduino ( ça c'est fait) , ensuite reprendre ces séquences et les envoyées par la liaison RS485 modbus RTU ( j'ai des difficulté) . Je ne sais pas comment je dois procédé pour convertir ces séquence qui sont en ascii en modbus RTU.

Les séquences que je dois recevoir sont de ce genre ( M01-01 ) il y a 14 moteur, je dois faire en sorte que sa le fais automatiquement . ( A mon avis , il dois avoir des CRC a calculé des truc comme ça, or je ne sais pas comment procéder) donc j'ai besoins de votre aide sil vous plait merci.

Voici les liens pour les modules:

: https://dlnmh9ip6v2uc.cloudfront.ne [...]-XV-DS.pdf : https://www.arduino.cc/en/Main/ArduinoBoardMega : http://www.dfrobot.com/wiki/index.php/RS485_Shield : http://www.esis.com.au/Converters/ic485s.pdf

Je vous poste mon programme , merci de votre aide!

cordialement, :confused:


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

Je suppose que tu es maitre sur le bus? MODBUS RTU définit un protocole, le maitre initie des requêtes envoie des commandes/paramètres et attends des réponses. Donc, il faut comprendre ledit protocole et le mettre en oeuvre.

En même temps, le net est riche et bien pourvu et toi manifestement pas très acharné (ou pas doué) dans tes recherches. Si tu fais une recherche avec "arduino modbus rtu" tu devrais trouver ce qu'il te faut (librairie, exemple, ...).