diff --git a/src/ModbusMaster.cpp b/src/ModbusMaster.cpp index 4169e58..9ae0f53 100644 --- a/src/ModbusMaster.cpp +++ b/src/ModbusMaster.cpp @@ -46,6 +46,7 @@ ModbusMaster::ModbusMaster(void) _idle = 0; _preTransmission = 0; _postTransmission = 0; + _u16ResponseTimeout = ku16MBDefaultResponseTimeout; } /** @@ -140,9 +141,6 @@ void ModbusMaster::send(uint8_t data) - - - uint8_t ModbusMaster::available(void) { return _u8ResponseBufferLength - _u8ResponseBufferIndex; @@ -294,6 +292,22 @@ void ModbusMaster::clearTransmitBuffer() } } +/** +Get the response timeout. Value is in msec. +*/ +uint16_t ModbusMaster::getResponseTimeout() +{ + return _u16ResponseTimeout; +} + +/** +Sets the response timeout. Value should be given in msec. +The default is 2000 msec. +*/ +void ModbusMaster::setResponseTimeout(uint16_t timeout) +{ + _u16ResponseTimeout = timeout; +} /** Modbus function 0x01 Read Coils. @@ -797,7 +811,7 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction) break; } } - if ((millis() - u32StartTime) > ku16MBResponseTimeout) + if ((millis() - u32StartTime) > _u16ResponseTimeout) { u8MBStatus = ku8MBResponseTimedOut; } diff --git a/src/ModbusMaster.h b/src/ModbusMaster.h index 8c433e6..6d6a1fb 100644 --- a/src/ModbusMaster.h +++ b/src/ModbusMaster.h @@ -192,6 +192,9 @@ class ModbusMaster void clearResponseBuffer(); uint8_t setTransmitBuffer(uint8_t, uint16_t); void clearTransmitBuffer(); + + uint16_t getResponseTimeout(); + void setResponseTimeout(uint16_t); void beginTransmission(uint16_t); uint8_t requestFrom(uint16_t, uint16_t); @@ -233,6 +236,7 @@ class ModbusMaster uint16_t* rxBuffer; // from Wire.h -- need to clean this up Rx uint8_t _u8ResponseBufferIndex; uint8_t _u8ResponseBufferLength; + uint16_t _u16ResponseTimeout; // Modbus function codes for bit access static const uint8_t ku8MBReadCoils = 0x01; ///< Modbus function 0x01 Read Coils @@ -249,7 +253,7 @@ class ModbusMaster static const uint8_t ku8MBReadWriteMultipleRegisters = 0x17; ///< Modbus function 0x17 Read Write Multiple Registers // Modbus timeout [milliseconds] - static const uint16_t ku16MBResponseTimeout = 2000; ///< Modbus timeout [milliseconds] + static const uint16_t ku16MBDefaultResponseTimeout = 2000; ///< Modbus timeout [milliseconds] // master function that conducts Modbus transactions uint8_t ModbusMasterTransaction(uint8_t u8MBFunction);