使用jamod api从modbus寄存器中检索浮点值

时间:2016-06-25 07:25:40

标签: java modbus

我正在尝试使用Jamod从Modbus寄存器中检索数据。我需要IEEE浮点格式的数据。我尝试了以下代码:

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。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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();
}

希望它能解决你的问题。