use of com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse in project openems by OpenEMS.
the class ModbusBridge method queryMultipleRegisters.
/**
* Executes a query on the Modbus client
*
* @param modbusUnitId
* @param address
* @param count
* @return
* @throws OpenemsModbusException
*/
private Register[] queryMultipleRegisters(int modbusUnitId, int address, int count) throws OpenemsModbusException {
ModbusTransaction trans = getTransaction();
ReadMultipleRegistersRequest req = new ReadMultipleRegistersRequest(address, count);
req.setUnitID(modbusUnitId);
trans.setRequest(req);
try {
trans.execute();
} catch (ModbusException e) {
// try again with new connection
closeModbusConnection();
trans = getTransaction();
req = new ReadMultipleRegistersRequest(address, count);
req.setUnitID(modbusUnitId);
trans.setRequest(req);
try {
trans.execute();
} catch (ModbusException e1) {
throw new OpenemsModbusException(//
"Error on modbus query. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Count [" + count + "]: " + e1.getMessage());
}
}
ModbusResponse res = trans.getResponse();
if (res instanceof ReadMultipleRegistersResponse) {
ReadMultipleRegistersResponse mres = (ReadMultipleRegistersResponse) res;
return mres.getRegisters();
} else {
throw new OpenemsModbusException(//
"Unable to read modbus response. " + "UnitId [" + modbusUnitId + "], Address [" + address + "], Count [" + count + "]: " + res.toString());
}
}
use of com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse in project SmartApplianceEnabler by camueller.
the class ReadHoldingRegisterExecutor method execute.
@Override
public void execute(TCPMasterConnection con, int slaveAddress) throws ModbusException {
logger.trace("{}: Reading holding register={} requestWords={}", getApplianceId(), getAddress(), getRequestWords());
ReadMultipleRegistersRequest req = new ReadMultipleRegistersRequest(getAddress(), getRequestWords());
req.setUnitID(slaveAddress);
ModbusTCPTransaction trans = new ModbusTCPTransaction(con);
trans.setRequest(req);
trans.execute();
ReadMultipleRegistersResponse res = (ReadMultipleRegistersResponse) trans.getResponse();
if (res != null) {
Integer[] byteValues = new Integer[res.getWordCount()];
for (int i = 0; i < res.getWordCount(); i++) {
byteValues[i] = res.getRegisterValue(i);
}
logger.debug("{}: Holding register={} value={}", getApplianceId(), getAddress(), byteValues);
getValueTransformer().setByteValues(byteValues);
} else {
logger.error("{}: No response received.", getApplianceId());
}
}
Aggregations