Как извлечь отрицательные значения с помощью JAMOD

#java #modbus

#java #modbus

Вопрос:

Я использую Jamod для извлечения значений с устройства Modbus. Это отлично работает для нормальных значений. Когда я пытаюсь извлечь отрицательное значение из register, оно генерирует некоторое случайное значение.

Код:

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

Пожалуйста, помогите. Заранее спасибо

Ответ №1:

В устройствах modbus размер регистра в основном равен 16 битам, поэтому, когда вы получаете значения из register с помощью jamod, вы должны позаботиться о сохранении их в надлежащем типе данных.

например. в регистре 0x1000 сохранено значение -12456, и когда мы прочитаем его, скажем

 int value = readRegister(0x1000);

it returns me value = 53080
  

таким образом, int является 32-разрядным, изменение типа данных int (32-разрядный) на short (16-разрядный) возвращает исходное отрицательное значение

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

надеюсь, это ответит на вашу проблему!