Duvida para ler uma trama

Do que percebi tu entao envias lhe uma trama de 18 Bytes e depois ele devolve -te outros 18 bytes correcto.
Se assim é tens de criar uma funçao para enviar os 18 bytes e outra para receber os 18 bytes.
Para enviares podes usar assim:

unsigned char txBuffer[17];//Variavel com todos os elementos que queres enviar
txBuffer[0] = 0xbb;//Pelo que entendi este e sempre o startByte
txBuffer[1] = 0xcc;//Segundo byte
//... carregas os restantes com o que queres

depois para enviares no programa passas o vector para o procedimento e o numero de bytes que contem

sendBytes(txBuffer,17);
o procedimento é este:
 
void sendBytes(unsigned char * bufferToSend , uint8_t lenght)// Isto recebe um vector de char que conteem a informaçao que queres enviar 
{
for(uint8_t i = 0; i<= lengh; i++)
    {
    Serial.write(bufferToSend[i]);
    }
}

Se declarares a variavel txBuffer como global podes fugir ao uso dos ponteiros se nao te sentires a vontade com eles, no entanto é bom estudares ponteiros.

Para receberes do modulo tens de ficar a espera do startByte 0xbb e quando o receberes entao carregas tudo o que tens no buffer para um outro vector rxBuffer.

void receivedData()
{
unsigned char temp = 0;

  if(Serial.available > 0){
    temp = Serial.read();
    if (temp == 0xbb)//Comprova que recebeste o startByte e estas pronto para receber os restantes 17 bytes, o que tens de esperar que eles entrem no buffer da Serial Port
        {
        while(Serial.available() <16);//Espera pelos 17 bytes restantes, nao sai desta linha ate que eles entrem
        for(uint8_t i = 0; i<= 16; i++)rxBuffer[i] = Serial.read();//Carrega os bytes para cada posiçao no vector
        }
        
    }


}

Nao testei o codigo mas a teoria será algo assim +-