2016-10-20 2 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; 
} 

Пожалуйста, помогите. Спасибо, что в Advance

ответ

0

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

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

int value = readRegister(0x1000); 

it returns me value = 53080 

так ИНТ 32 бит, путем изменения типа данных INT (32 бита) на короткий (16 бит) возвращает первоначальную отрицательное значение

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

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

Смежные вопросы