2016-06-25 20 views
2

Jamodを使用してModbusレジスタからデータを取得しようとしています。 IEEE浮動小数点形式のデータが必要です。jamod apiを使用してmodbusレジスタから浮動小数点値を取得

private float getData (String address, int count) { 
     float sum = 0.0f; 

     request = new ReadMultipleRegistersRequest(Integer.parseInt(address), count); 
     response = new ReadMultipleRegistersResponse(); 
     request.setUnitID(1); 
     response.setUnitID(1); 
     request.setHeadless(); 

     try { 

      response = (ReadMultipleRegistersResponse) execute(connection, holdingRequest); 

      for (int i=0; i<registerCount; i++) { 
       sum = sum + response.getRegisterValue(i); 
      } 
      System.out.println("Sum: " + sum); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return sum; 
    } 

private ModbusResponse execute(SerialConnection connection, ModbusRequest request) {   
     try { 
      transaction = new ModbusSerialTransaction(connection); 
      transaction.setRequest(request); 
      transaction.execute(); 
      return transaction.getResponse(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

しかし、私はいくつかのランダムな値を取得するたびに:私は、次のコードを試してみました。私はオンラインで検索し、これがlinkであることを発見しました。私はリンクに解決策を試みたが、私はjava.lang.ArrayIndexOutOfBoundsException: 4を得ている。どんな助けもありがとう。

答えて

0

レジスタのサイズが16ビットであるため、適切なデータ型を使用して値を取得するだけで、16ビットを使用して格納する必要があります。あなたのケースでは

は、このコードを使用します。

try { 
    response = (ReadMultipleRegistersResponse) execute(connection, holdingRequest); 
    for (int i=0; i<registerCount; i++) { 
     sum = sum + (short) response.getRegisterValue(i); 
    } 
    System.out.println("Sum: " + sum); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

それはあなたの問題を解決を願っています。

関連する問題