code: void waitBetweenFrames(int transDelayMS, long lastTransactionTimestamp) {
  
          // If a fixed delay has been set
          if (transDelayMS > 0) {
              ModbusUtil.sleep(transDelayMS);
          }
          else {
              // Make use we have a gap of 3.5 characters between adjacent requests
              // We have to do the calculations here because it is possible that the caller may have changed
              // the connection characteristics if they provided the connection instance
              int delay = getInterFrameDelay() / 1000;
  
              // How long since the last message we received
              long gapSinceLastMessage = (System.nanoTime() - lastTransactionTimestamp) / NS_IN_A_MS;
              if (delay > gapSinceLastMessage) {
                  long sleepTime = delay - gapSinceLastMessage;
  
                  ModbusUtil.sleep(sleepTime);
  
                  if (logger.isDebugEnabled()) {
                      logger.debug("Waited between frames for {} ms", sleepTime);
                  }
              }
          }
      }
docs: Injects a delay dependent on the last time we received a response or
  if a fixed delay has been specified
  
  @param transDelayMS             Fixed transaction delay (milliseconds)
  @param lastTransactionTimestamp Timestamp of last transaction