da seriale a modbus

Ciao ragazzi,
ho ancora bisogno di voi....
Ho un dispositivo che trasmette via seriale alcuni dati (stringhe) ad arduino.
Ora vorrei che questi dati vengano recapitati ad un plc collegato ad arduino tramite protocollo modbus.
Potete darmi una mano per trasformare arduino in un passacarte per il plc?
Di seguito il codice che mi permette di leggere i dati da un arduino:

#include <SoftwareSerial.h>

#define rxPin 3
#define txPin 4

SoftwareSerial softSerial =  SoftwareSerial(rxPin, txPin);
//
void setup()  {
 
 pinMode(rxPin, INPUT);
 pinMode(txPin, OUTPUT);
 softSerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
 Serial.begin(9600);
   while (!softSerial) {
    ; // wait for serial port to connect. Needed for native USB
    }
}
//--------------------------------
int CalcChannel(unsigned char ui8type, unsigned char ui8Msb, unsigned char ui8Lsb)  {
int ui8Temp;
if (ui8type==0){
ui8Temp=ui8Msb*256+ui8Lsb;
}
if (ui8type==1) {
ui8Temp=ui8Msb*256+ui8Lsb;
ui8Temp=ui8Temp-2048;
}
return (ui8Temp);
}
//--------------------------------
int ui8Buffer[8][2];
int ui16Idx=0;
int ui8CheckSum=0;
//--------------------------------
void loop() {
          // send data only when you receive data:
          if (softSerial.available() > 0) {
            if (softSerial.read()==0x55) {
                  ui8Buffer[0][0]=0x55;
                  ui8Buffer[0][1]=0;
                        do {
                          if (softSerial.available() > 0) { 
                            ui16Idx++;
                            ui8Buffer[ui16Idx][0] = softSerial.read();
                            ui8Buffer[ui16Idx][1] = ui16Idx;
                           }
                       }while (ui16Idx<=8);
                      ui16Idx=0;
ui8CheckSum=0;
//Calcolo del check sum per vedere 
        for (ui16Idx=0;ui16Idx<7;ui16Idx++){
        
        ui8CheckSum = ui8CheckSum + ui8Buffer[ui16Idx][0];
        }
      ui16Idx=0;

        if (((unsigned char)ui8CheckSum)==ui8Buffer[7][0]){
          
//          Serial.println("checksum calcolato:");
//          Serial.println((unsigned char)ui8CheckSum);
//          Serial.println("Pacchetto ricevuto:");
//          
//             for (ui16Idx=0;ui16Idx<8;ui16Idx++){         //stampa il pacchetto ricevuto in maniera ricorsiva
//                  Serial.println(ui8Buffer[ui16Idx][0]);
//                  }


          Serial.println("Lettura del primo canale:");
          if (ui8Buffer[1][0]==0) Serial.println("ph:");
          if (ui8Buffer[1][0]==1) Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[1][0], (unsigned char) ui8Buffer[2][0], (unsigned char) ui8Buffer[3][0])); //calcola il valore
          // 
          Serial.println("Lettura del secondo canale:");
          if (ui8Buffer[4][0]==0) Serial.println("ph:");
          if (ui8Buffer[4][0]==1)Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[4][0], (unsigned char) ui8Buffer[5][0], (unsigned char) ui8Buffer[6][0])); //calcola il valore  
          //
                  
         }
         else {
          Serial.println("checksum error:");
         }
         ui16Idx=0;
}
}


//delay(1000);


}
//display values read

                // read the incoming byte:

               //digitalWrite(LED_BUILTIN, HIGH);
                //Serial.println("dato ricevuto");

Grazie per l'aiuto.
Saluti Fabio

ciao...arduino deve essere Master o slave verso il PLC?

per iscrizione, che mi interessa

arduino sarà slave.
A comando, il plc richiederà la lettura dei dati che verrà acquisita e farà parte del suo programma;

ok...io posso suggerirti questa libreria:

in pratica ti basterà creare un array contenente le info che t'interessa passare...dacci un occhio e fammi sapere