Search in sources :

Example 1 with ReadInputRegistersResponse

use of com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse in project SmartApplianceEnabler by camueller.

the class ReadInputRegisterExecutor method execute.

@Override
public void execute(TCPMasterConnection con, int slaveAddress) throws ModbusException {
    ReadInputRegistersRequest req = new ReadInputRegistersRequest(Integer.parseInt(registerAddress, 16), 2);
    req.setUnitID(slaveAddress);
    ModbusTCPTransaction trans = new ModbusTCPTransaction(con);
    trans.setRequest(req);
    trans.execute();
    ReadInputRegistersResponse res = (ReadInputRegistersResponse) trans.getResponse();
    if (res != null) {
        registerValue = Float.intBitsToFloat(res.getRegisterValue(0) << 16 | res.getRegisterValue(1));
        logger.debug("{}: Input register={} value={}", applianceId, registerAddress, registerValue);
    } else {
        logger.error("{}: No response received.", applianceId);
    }
}
Also used : ModbusTCPTransaction(com.ghgande.j2mod.modbus.io.ModbusTCPTransaction) ReadInputRegistersRequest(com.ghgande.j2mod.modbus.msg.ReadInputRegistersRequest) ReadInputRegistersResponse(com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse)

Example 2 with ReadInputRegistersResponse

use of com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse in project openems by OpenEMS.

the class ModbusBridge method queryInputRegisters.

/**
 * Executes a query on the Modbus client
 *
 * @param modbusUnitId
 * @param address
 * @param count
 * @return
 * @throws OpenemsModbusException
 */
private InputRegister[] queryInputRegisters(int modbusUnitId, int address, int count) throws OpenemsModbusException {
    ModbusTransaction trans = getTransaction();
    ReadInputRegistersRequest req = new ReadInputRegistersRequest(address, count);
    req.setUnitID(modbusUnitId);
    trans.setRequest(req);
    try {
        trans.execute();
    } catch (ModbusException e) {
        // try again with new connection
        closeModbusConnection();
        trans = getTransaction();
        req = new ReadInputRegistersRequest(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 ReadInputRegistersResponse) {
        ReadInputRegistersResponse mres = (ReadInputRegistersResponse) res;
        return mres.getRegisters();
    } else {
        throw new OpenemsModbusException(// 
        "Unable to read modbus response. " + "UnitId [" + modbusUnitId + "], Address [" + address + "], Count [" + count + "]: " + res.toString());
    }
}
Also used : OpenemsModbusException(io.openems.api.exception.OpenemsModbusException) ModbusResponse(com.ghgande.j2mod.modbus.msg.ModbusResponse) ReadInputRegistersRequest(com.ghgande.j2mod.modbus.msg.ReadInputRegistersRequest) ModbusTransaction(com.ghgande.j2mod.modbus.io.ModbusTransaction) ModbusException(com.ghgande.j2mod.modbus.ModbusException) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException) ReadInputRegistersResponse(com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse)

Example 3 with ReadInputRegistersResponse

use of com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse in project SmartApplianceEnabler by camueller.

the class ReadInputRegisterExecutor method execute.

@Override
public void execute(TCPMasterConnection con, int slaveAddress) throws ModbusException {
    logger.trace("{}: Reading input register={} requestWords={}", getApplianceId(), getAddress(), getRequestWords());
    ReadInputRegistersRequest req = new ReadInputRegistersRequest(getAddress(), getRequestWords());
    req.setUnitID(slaveAddress);
    ModbusTCPTransaction trans = new ModbusTCPTransaction(con);
    trans.setRequest(req);
    trans.execute();
    ReadInputRegistersResponse res = (ReadInputRegistersResponse) 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("{}: Input register={} value={}", getApplianceId(), getAddress(), byteValues);
        getValueTransformer().setByteValues(byteValues);
    } else {
        logger.error("{}: No response received.", getApplianceId());
    }
}
Also used : ModbusTCPTransaction(com.ghgande.j2mod.modbus.io.ModbusTCPTransaction) ReadInputRegistersRequest(com.ghgande.j2mod.modbus.msg.ReadInputRegistersRequest) ReadInputRegistersResponse(com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse)

Aggregations

ReadInputRegistersRequest (com.ghgande.j2mod.modbus.msg.ReadInputRegistersRequest)3 ReadInputRegistersResponse (com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse)3 ModbusTCPTransaction (com.ghgande.j2mod.modbus.io.ModbusTCPTransaction)2 ModbusException (com.ghgande.j2mod.modbus.ModbusException)1 ModbusTransaction (com.ghgande.j2mod.modbus.io.ModbusTransaction)1 ModbusResponse (com.ghgande.j2mod.modbus.msg.ModbusResponse)1 OpenemsModbusException (io.openems.api.exception.OpenemsModbusException)1