Durante la ejecución de mi programa he ido añadiendo varios "Serial.print" como método de comprobación de que se estaban haciendo bien los pasos, por ejemplo en mi salida por pantalla.
Consigna de caudal = 90 l/h
//Corresponde a la variable de consigna de caudal que quiero escribir en los registros de memoria de mi bomba.
//(Recuerda: Consigna de caudal = 0x00002328 = 90.000 * 10^-2 = 90 l/h).
Iniciando descomposicion uint32_t --> uint16_t...
//Me indica que voy a proceder la descomposición de mi variable de consigna de caudal de un
//numero uint32_t a un numero uint16_t. Esto se utiliza ya que para añadir la variable
//u32_ConsignaCaudal al buffer de transmisión implementado en la clase <ModbusMaster.h> es
//necesario descomponerlo en dos registros/numeros de 16 bits.
u16_ArrayTmp[0] = 0
u16_ArrayTmp[1] = 9000
//Aquí muestro el resultado de la descomposición en dos numero uint_16, añadidos a un array
//temporal creado en esta función en especifico.
MSB adjuntado correctamente al Buffer de transmision.
LSB adjuntado correctamente al Buffer de transmision.
//Aqui compruebo que se han añadido correctamente al buffer de transmisión de la clase ModbusMaster.
...L.....#(:DError en la orden de writeMultipleRegisters!!!
Tipo de Error = 226
. Se identifica con: Response Timed Out
//Aquí muestro que la petición no ha sido correcta y que corresponde con ese tipo de error
//(según está en la clase ModbusMaster)
Investigando en los archivos .h y .cpp de la librería, me he encontrado que se debe a un error debido al CRC.
//Excepción CRC de respuesta inválida de ModbusMaster.
//El CRC en la respuesta no coincide con el calculado.
if ((millis() - u32StartTime) > ku16MBResponseTimeout)
{
u8MBStatus = ku8MBResponseTimedOut;
}
}
//En mi caso ku8MBResponseTimedOut = 1000 ms
Es por eso, que tras analizar la trama en el Software "Serial Port Monitor" me aparecen varias tramas como [BAD] hasta que se muestra un [OK].
¿Piensas que una maquina de estados hará que no se produzca este error en el calculo del CRC y sea más eficiente mi aplicación? ¿O por el contrario el problema es otro?
No consigo dar con la solución a este problema. Un saludo!!!