if (!isConnected()) {
return;
}
Register newValue = null;
synchronized (storage) {
newValue = (Register) ((InputRegister[])storage)[readRegister];
}
if (command instanceof IncreaseDecreaseType) {
if (command.equals(IncreaseDecreaseType.INCREASE))
newValue.setValue(newValue.getValue() + 1);
else if (command.equals(IncreaseDecreaseType.DECREASE))
newValue.setValue(newValue.getValue() - 1);
} else if (command instanceof UpDownType) {
if (command.equals(UpDownType.UP))
newValue.setValue(newValue.getValue() + 1);
else if (command.equals(UpDownType.DOWN))
newValue.setValue(newValue.getValue() - 1);
} else if (command instanceof DecimalType) {
newValue.setValue(((DecimalType)command).intValue());
} else if (command instanceof OnOffType) {
if (command.equals(OnOffType.ON))
newValue.setValue(1);
else if (command.equals(OnOffType.OFF))
newValue.setValue(0);
}
ModbusRequest request = null;
if (writeMultipleRegisters) {
Register [] regs = new Register[1];
regs[0] = newValue;
request = new WriteMultipleRegistersRequest(writeRegister, regs);
} else {
request = new WriteSingleRegisterRequest(writeRegister, newValue);
}
request.setUnitID(getId());
transaction.setRequest(request);
try {
logger.debug("ModbusSlave: FC" +request.getFunctionCode()+" ref=" + writeRegister + " value=" + newValue.getValue());
transaction.execute();
} catch (Exception e) {
logger.debug("ModbusSlave:" + e.getMessage());
return;
}