Sigo leyendo ahora ModbusMaster..
// transmit request
if (_preTransmission)
{
_preTransmission();
}
for (i = 0; i < u8ModbusADUSize; i++)
{
_serial->write(u8ModbusADU[i]);
}
u8ModbusADUSize = 0;
_serial->flush(); // flush transmit buffer
if (_postTransmission)
{
_postTransmission();
}
el "_serial->flush()" no se entiende como el serial.flush(); que espera a que se envien los datos?
si fuera así una trama de 8 bytes (son las comunes que estoy usando en esta aplicación) me costarían @ 9600 baudios= 8*8 / 9600 = 0.00666
0.0666 + espera del inicio mas espera del final 3.5 tiempos = 0.0066+ 0.003+0.003 aprox 10 ms. estaría bien la cuenta así?
eso mas la espera de recibida del esclavo serian aproximadamente 20ms, por 3 variadores (las fallas suelen ser cada tanto..)son 60 ms mas los delay de pretransmision y postransmision diría que redondeo los 90ms.
Los pulsadores se actualizan en cada ciclo de programa, el programa en si trabaja con marcadores de esos pulsadores, el pin 9 es la marca i7, si i7=1 pin 9 high. sospecho que esa tabla no se actualiza bien por las paradas de la comunicación, por que sin comunicación funcionan, y cuando fallan puedo ver que quizas no se envia el dato de parada de algun variador, o el dato de arranque de un variador, por ejemplo (me doy cuenta que un motor no paro cuando deberia o no arranco cuando deberia)
PD: cuestion que razono todavía, si se tarda tan poco en enviar el mensaje como puedo ver el tx y rx parpadear?
muchas gracias