Search in sources :

Example 1 with OpenemsModbusException

use of io.openems.api.exception.OpenemsModbusException in project openems by OpenEMS.

the class ModbusBridge method writeMultipleCoils.

private ModbusResponse writeMultipleCoils(int modbusUnitId, int address, boolean[] coils) throws OpenemsModbusException, ModbusException {
    ModbusTransaction trans = getTransaction();
    BitVector vec = new BitVector(coils.length);
    for (int i = 0; i < coils.length; i++) {
        vec.setBit(i, coils[i]);
    }
    WriteMultipleCoilsRequest req = new WriteMultipleCoilsRequest(address, vec);
    req.setUnitID(modbusUnitId);
    trans.setRequest(req);
    try {
        trans.execute();
    } catch (ModbusException e) {
        // try again with new connection
        closeModbusConnection();
        trans = getTransaction();
        req = new WriteMultipleCoilsRequest(address, vec);
        req.setUnitID(modbusUnitId);
        trans.setRequest(req);
        trans.execute();
    }
    return trans.getResponse();
}
Also used : BitVector(com.ghgande.j2mod.modbus.util.BitVector) WriteMultipleCoilsRequest(com.ghgande.j2mod.modbus.msg.WriteMultipleCoilsRequest) ModbusTransaction(com.ghgande.j2mod.modbus.io.ModbusTransaction) ModbusException(com.ghgande.j2mod.modbus.ModbusException) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException)

Example 2 with OpenemsModbusException

use of io.openems.api.exception.OpenemsModbusException 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());
    }
}
Also used : ReadMultipleRegistersRequest(com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException) ModbusResponse(com.ghgande.j2mod.modbus.msg.ModbusResponse) ModbusTransaction(com.ghgande.j2mod.modbus.io.ModbusTransaction) ReadMultipleRegistersResponse(com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse) ModbusException(com.ghgande.j2mod.modbus.ModbusException) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException)

Example 3 with OpenemsModbusException

use of io.openems.api.exception.OpenemsModbusException in project openems by OpenEMS.

the class ModbusBridge method write.

protected void write(int modbusUnitId, int address, Register... register) throws OpenemsModbusException {
    ModbusResponse res;
    try {
        if (register.length == 0) {
            return;
        } else if (register.length == 1) {
            res = writeSingleRegister(modbusUnitId, address, register[0]);
        } else {
            res = writeMultipleRegisters(modbusUnitId, address, register);
        }
    } catch (ModbusException | OpenemsModbusException e) {
        throw new OpenemsModbusException(// 
        "Error on modbus write. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Register [" + registersAsString(register) + "]: " + e.getMessage());
    }
    if (res instanceof ExceptionResponse) {
        throw new OpenemsModbusException(// 
        "Error on modbus write response. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Register [" + registersAsString(register) + "]: " + res.toString());
    }
    log.debug(// 
    "Successful write. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Register [" + registersAsString(register) + "]");
}
Also used : ExceptionResponse(com.ghgande.j2mod.modbus.msg.ExceptionResponse) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException) ModbusResponse(com.ghgande.j2mod.modbus.msg.ModbusResponse) ModbusException(com.ghgande.j2mod.modbus.ModbusException) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException)

Example 4 with OpenemsModbusException

use of io.openems.api.exception.OpenemsModbusException 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 5 with OpenemsModbusException

use of io.openems.api.exception.OpenemsModbusException in project openems by OpenEMS.

the class ModbusBridge method writeCoil.

protected void writeCoil(int modbusUnitId, int address, Boolean... values) throws OpenemsModbusException {
    boolean[] coils = new boolean[values.length];
    for (int i = 0; i < values.length; i++) {
        coils[i] = values[i];
    }
    ModbusResponse res;
    try {
        if (coils.length == 0) {
            return;
        } else if (coils.length == 1) {
            res = writeSingleCoil(modbusUnitId, address, coils[0]);
        } else {
            res = writeMultipleCoils(modbusUnitId, address, coils);
        }
    } catch (ModbusException | OpenemsModbusException e) {
        throw new OpenemsModbusException(// 
        "Error on modbus write. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Coil [" + coilsAsString(coils) + "]: " + e.getMessage());
    }
    if (res instanceof ExceptionResponse) {
        throw new OpenemsModbusException(// 
        "Error on modbus write response. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Coil [" + coilsAsString(coils) + "]: " + res.toString());
    }
    log.debug(// 
    "Successful write. " + "UnitId [" + modbusUnitId + "], Address [" + address + "/0x" + Integer.toHexString(address) + "], Coil [" + coilsAsString(coils) + "]");
}
Also used : ExceptionResponse(com.ghgande.j2mod.modbus.msg.ExceptionResponse) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException) ModbusResponse(com.ghgande.j2mod.modbus.msg.ModbusResponse) ModbusException(com.ghgande.j2mod.modbus.ModbusException) OpenemsModbusException(io.openems.api.exception.OpenemsModbusException)

Aggregations

OpenemsModbusException (io.openems.api.exception.OpenemsModbusException)11 ModbusException (com.ghgande.j2mod.modbus.ModbusException)9 ModbusTransaction (com.ghgande.j2mod.modbus.io.ModbusTransaction)7 ModbusResponse (com.ghgande.j2mod.modbus.msg.ModbusResponse)5 ExceptionResponse (com.ghgande.j2mod.modbus.msg.ExceptionResponse)2 ConfigException (io.openems.api.exception.ConfigException)2 ReadCoilsRequest (com.ghgande.j2mod.modbus.msg.ReadCoilsRequest)1 ReadCoilsResponse (com.ghgande.j2mod.modbus.msg.ReadCoilsResponse)1 ReadInputRegistersRequest (com.ghgande.j2mod.modbus.msg.ReadInputRegistersRequest)1 ReadInputRegistersResponse (com.ghgande.j2mod.modbus.msg.ReadInputRegistersResponse)1 ReadMultipleRegistersRequest (com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest)1 ReadMultipleRegistersResponse (com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse)1 WriteCoilRequest (com.ghgande.j2mod.modbus.msg.WriteCoilRequest)1 WriteMultipleCoilsRequest (com.ghgande.j2mod.modbus.msg.WriteMultipleCoilsRequest)1 WriteMultipleRegistersRequest (com.ghgande.j2mod.modbus.msg.WriteMultipleRegistersRequest)1 WriteSingleRegisterRequest (com.ghgande.j2mod.modbus.msg.WriteSingleRegisterRequest)1 SerialConnection (com.ghgande.j2mod.modbus.net.SerialConnection)1 TCPMasterConnection (com.ghgande.j2mod.modbus.net.TCPMasterConnection)1 BitVector (com.ghgande.j2mod.modbus.util.BitVector)1 SerialParameters (com.ghgande.j2mod.modbus.util.SerialParameters)1