我正在尝试使用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
。任何帮助将不胜感激。
答案 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();
}
希望它能解决你的问题。