2016-10-20 16 views
0

私はJamodを使用してModbusデバイスから値を取得しています。正常な値で正常に動作します。私はレジスタから負の値を取得しようとすると、いくつかのランダムな値を生成します。JAMODを使用して負の値を取得する方法

コード:

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; 
} 

助けてください。おかげさまで

答えて

0

modbusデバイスでは、レジスタのサイズはほとんど16ビットですので、jamodを使用してレジスタから値を取得するときは、適切なデータ型に格納してください。

例えば、保存されたレジスタの0x1000値で-12456であり、我々が読んだとき、それは32ビットが短い(16ビット)の整数(32ビット)のデータ型を変更することにより、ある

int value = readRegister(0x1000); 

it returns me value = 53080 

のでINT言う元の負の値を返す

short value = (short) readRegister(0x1000); 
it returns value = -12456 

あなたの問題にお答えしますように!

関連する問題