Modbus protocol Implimentation

How to configure Slave Configuration Here.How to assign the Slave ID, SLAVE address, How to check output.I have uploaded Code. I have r2232 to rs 485 device. But i could not able to get commiicate

byte  data[12];
byte  address;
byte  function;
byte  function_code;
unsigned int data_received;
byte  byte_receive;
byte  state=0;
byte  cont1=1;
byte  trace_OK=0;
unsigned int checksum;
unsigned int checksum_trace;

#define  pinCONTROL    02
#define  myaddress     01
  
  
  
  void sendACK(byte address1,byte address2,byte data_type,byte code1,byte code2,byte Sign,byte data1,byte data2,byte data3,byte data4)
{
  
  unsigned int checksum_ACK;
  checksum_ACK=address1+address2+6+data_type+code1+code2+Sign+data1+data2+data3+data4+3;
  
  digitalWrite(pinCONTROL,HIGH);
  delay(100);
  //Serial.println("Trama ACK");
  //Serial.print("Checksum:");
  //Serial.println(checksum_ACK,HEX);
  Serial.print(0,byte); 
  Serial.print(address1,byte);
  Serial.print(address2,byte);
  Serial.print(6,byte);
  Serial.print(data_type,byte);
  Serial.print(code1,byte);
  Serial.print(code2,byte);
  Serial.print(Sign,byte);
  Serial.print(data1,byte);
  Serial.print(data2,byte);
  Serial.print(data3,byte);
  Serial.print(data4,byte);  
  Serial.print(3,byte);
  Serial.print(((checksum_ACK>>8)&255),byte);
  Serial.print(((checksum_ACK)&255),byte);
  delay(100);
  digitalWrite(pinCONTROL,LOW);

  
  
}


void setup() {

   pinMode(13,OUTPUT);
   pinMode(pinCONTROL,OUTPUT);
   digitalWrite(2,LOW);
   Serial.begin(9600);
   Serial.println("Empezamos");

}

void loop() 
{

   while (Serial.available() > 0){
     
     byte_receive=Serial.read();
     if (byte_receive==00){
       //Serial.println("Se ha recibido byte Start");
       state=1;
       checksum_trace=0;
       checksum=0;
       trace_OK=0;
       address=0;
       data_received=0;
       cont1=1;
     }else if (state==1 && cont1<=12){
       data[cont1-1]=byte_receive;
       checksum=checksum+byte_receive;
       cont1=cont1+1;
     }else if (state==1 && cont1==13){
       checksum_trace=byte_receive<<8;
       cont1=cont1+1; 
       //Serial.print("Primer byte Checksum");      
       //Serial.print(checksum_trace,HEX);
     }else if (state==1 && cont1==14){
       checksum_trace=checksum_trace+byte_receive;
       cont1=cont1+1;
       state=0;
       //Serial.println(byte_receive,HEX);
       //Serial.println("Recibida trama");
       //Serial.print("Checksum Trace= ");
       //Serial.println(checksum_trace,HEX);
       //Serial.print("Checksum= ");
       //Serial.println(checksum,HEX); 
       //Serial.println(checksum,byte); 
       //Serial.println("Trama= ");
       //Serial.print(data[0]);
       //Serial.print(data[1]);
       //Serial.print(data[2]);
       //Serial.print(data[3]);
       //Serial.print(data[4]);
       //Serial.print(data[5]);
       //Serial.print(data[6]);
       //Serial.print(data[7]);
       //Serial.print(data[8]);
       //Serial.print(data[9]);
       //Serial.print(data[10]);
       //Serial.println(data[11]);       

       if (checksum_trace==checksum){
         trace_OK=1;
         
         address=(hex2num(data[0])<<4)+(hex2num(data[1]));
         function=data[3];
         function_code=(hex2num(data[4])<<4)+(hex2num(data[5]));
         data_received=(hex2num(data[7])<<12)+(hex2num(data[8])<<8)+(hex2num(data[9])<<4)+(hex2num(data[10]));
         
         //Serial.println("TRAZA CORRECTA");
         //Serial.println(address,byte);
         //Serial.println(data_received);
         if (address==myaddress){
           if ((function=='D') && (function_code==0) && data[2]==5){ 
             if (data_received==1){
               digitalWrite(13,HIGH);
               //Serial.println(data_received,byte);
               sendACK(data[0],data[1],data[3],data[4],data[5],data[6],data[7],data[8],data[9],data[10]);
             }else if (data_received==0){
               digitalWrite(13,LOW);
               sendACK(data[0],data[1],data[3],data[4],data[5],data[6],data[7],data[8],data[9],data[10]);
             }
           }
         }
       }else{
         //Serial.println("TRAZA INCORRECTA");  
         sendNAK(data[0],data[1],data[3],data[4],data[5],data[6],data[7],data[8],data[9],data[10]);
       }
     }

  } 
  
}



void sendNAK(byte address1,byte address2,byte data_type,byte code1,byte code2,byte Sign,byte data1,byte data2,byte data3,byte data4){
  
  unsigned int checksum_ACK;
  checksum_ACK=address1+address2+6+data_type+code1+code2+Sign+data1+data2+data3+data4+3;
  
  digitalWrite(pinCONTROL,HIGH);
  delay(100);
  //Serial.println("Trama ACK");
  //Serial.print("Checksum:");
  //Serial.println(checksum_ACK,HEX);
  Serial.print(0,byte); 
  Serial.print(address1,byte);
  Serial.print(address2,byte);
  Serial.print(15,byte);
  Serial.print(data_type,byte);
  Serial.print(code1,byte);
  Serial.print(code2,byte);
  Serial.print(Sign,byte);
  Serial.print(data1,byte);
  Serial.print(data2,byte);
  Serial.print(data3,byte);
  Serial.print(data4,byte);  
  Serial.print(3,byte);
  Serial.print(((checksum_ACK>>8)&255),byte);
  Serial.print(((checksum_ACK)&255),byte);
  digitalWrite(pinCONTROL,LOW);
  delay(100);
  
  
}



byte hex2num(byte x){

  byte result;
  
  if (x>=48 && x<=57){
    result=x-48;  
  }else if (x>=65 && x<=70){
    switch(x){
      case 65:
        result=10;
        break;
      case 66:
        result=11;
        break;
      case 67:
        result=12;
        break;
      case 68:
        result=13;
        break;
      case 69:
        result=14;
        break;
      case 70:
        result=15;
        break;     
    }   
  }
  return result;  
}