* Calcula el CRC del paquete.
*/
public void calculateCRC() {
CRC16(trama,lenght-2);
trama[lenght-2]=toByte(uchCRCLo);
trama[lenght-1]=toByte(uchCRCHi);
}
/**
* Nos permite conocer si el CRC del paquete es correcto
* @return Devuelve true si el paquete es correcto,
* false en caso contrario.
*/
public boolean isCRCOK() {
if(CRC16(trama,lenght)==0) {
return true;
}
else {
return false;
}
}
/**
* Obtiene el contenido del CRC
* @return Devuelve un entero con el CRC
*/
public int getCRC() {
return uchCRCHi*256+uchCRCLo;
}
/*
* Convierte un entero de 0 a 255 en un byte con signo
* @param i Valor entero a codificar como byte, de 0 a 255
* @return
Devuelve byte codificado de -128 a 127
*/
static private byte toByte(int i) {
byte resultado;
if (i<128) {
resultado=(byte)i;
}
else if (i<256){
resultado=(byte)(i-256);
}
else {
resultado=0;
}
return resultado;
}
/**
* Convierte un byte a un entero.
* @param b
* @return
*/
static private int toInt(byte b) {
int resultado;
if (b>=0) {
resultado=b;
}
else {
resultado=256+b;
}
return resultado;
}
//Tabla CRC bytes altos
private final static int [] auchCRCHi = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
MANUAL MODBUS iBDAM
16 – Feb – 2018 rev 1,00
Pág 56 de 60