Skip to content
  1. Sep 06, 2013
    • Jeff Epler's avatar
      mb2hal: compute timeouts with integer math · d226fd5c
      Jeff Epler authored
      The prior code uses questionable casts to do what can be done with
      modulo integer math.
      
      The new code does not give *exactly* the same timeout, because the
      calculation
          (int)(float)(this_mb_tx->mb_response_timeout_ms / 1000.0)
      is subject to rounding errors, while
          timeout.tv_sec  = this_mb_tx->mb_response_timeout_ms / 1000;
      is not.  For example for a response timeout of 2001ms, the old code
      would actually give a timeout of 2.000999 seconds, while the new code
      gives the correct result of 2.001000 seconds.  The new code begins
      giving "radically" different (but again more correct) values around
      65536 seconds due to the loss of precision in float arithmetic
      (65536.000f == 65536.001f when you have a 24-bit mantissa)
      
      Tested by cut&paste of old and new code into a test harness:
      
      struct timeval fold(long arg)
      {
          struct timeval timeout;
          timeout.tv_sec  = (int)(float)(arg / 1000.0);  //int part of the float
          timeout.tv_usec = ((float)(arg / 1000.0) - timeout.tv_sec) * 1000000;
          return timeout;
      }
      
      struct timeval fnew(long arg)
      {
          struct timeval timeout;
          timeout.tv_sec  = arg / 1000;
          timeout.tv_usec = (arg % 1000) * 1000;
          return timeout;
      }
      
      void check(long timeout) {
          struct timeval ta = fold(timeout);
          struct timeval tb = fnew(timeout);
      
          double a = ta.tv_sec + ta.tv_usec * 1e-6;
          double b = tb.tv_sec + tb.tv_usec * 1e-6;
          if(fabs(a - b) > .001) {
          // if(ta.tv_sec != tb.tv_sec || ta.tv_usec != tb.tv_usec) {
              printf("fail tv_sec %lu: %lu.%06lu != %lu.%06lu\n", timeout,
                  (long) ta.tv_sec, (long) ta.tv_usec,
                  (long) tb.tv_sec, (long) tb.tv_usec);
          }
      }
      
      int main() {
          long i;
          for(i=0; i<1000*1000*1000; i += 500) {
              check(i);
              check(i+1);
              check(i+499);
          }
      }
      d226fd5c
  2. Jun 05, 2013
    • Sebastian Kuzminsky's avatar
      configure: require libmodbus3 · c2c5c067
      Sebastian Kuzminsky authored
      By default, configure will now look for libmodbus (installed from a
      separate deb, provided by Ubuntu for Precise and by the linuxcnc.org
      debian archive for Hardy and Lucid) and error out if it can't be found.
      
      The user can disable this check (and disable compilation of all drivers
      that use libmodbus) by configuring with "--without-libmodbus".
      c2c5c067
  3. Mar 27, 2013
  4. Nov 13, 2012
    • Victor Rocco's avatar
      mb2hal: added functionallity, including arduino example. · c4e41765
      Victor Rocco authored
      
      
      - Arduino example added.
        Tested with Arduino Mega 2560 R3 using Modbusino over USB at 115200 bps.
      - New parameters in config file.
        HAL_MODULE_NAME, MB_RESPONSE_TIMEOUT_MS and MB_BYTE_TIMEOUT_MS.
      - New HAL pin "num_errors" for each transaction. num_errors = 0 if last
        transaction OK, else the count of failed transactions.
      - Fix a bug, OPTIONAL's parameters may be 0 instead of default value if
        not specified in 1st transaction.
      
      Signed-off-by: default avatarMichael Haberler <git@mah.priv.at>
      c4e41765
    • Victor Rocco's avatar
      mb2hal: now using libmodbus3, added improvements. · 7bea47a3
      Victor Rocco authored
      
      
      - Mb2hal now uses libmodbus3 instead of the old libmodbus file
        located in src/hal/user_comps/modbus.c used by gs2_vfd.c
        # Also fix a TIMEOUT bug (due to this unpatched old libmodbus file).
      - Better INI file documentation (HOW-TO).
      - Better Submakefile.
      - Source code cleaned and reordered.
        # Now is posible to add new functionallity.
      
      See LogBook.txt for more information.
      
      Signed-off-by: default avatarMichael Haberler <git@mah.priv.at>
      7bea47a3
  5. Nov 01, 2012
  6. Oct 27, 2012
  7. Oct 24, 2012
Loading