package mods.eln.sixnode.modbusrtu; import mods.eln.misc.Utils; import mods.eln.sim.nbt.NbtElectricalGateInputOutput; import mods.eln.sim.nbt.NbtElectricalGateOutputProcess; public class modbusAnalogIoSlot extends ModbusSlot { NbtElectricalGateInputOutput gate; NbtElectricalGateOutputProcess gateProcess; short getHoldingRegister_2; short getInputRegister_2; short setHoldingRegister_1; public modbusAnalogIoSlot(int offset, int range, NbtElectricalGateInputOutput gate, NbtElectricalGateOutputProcess gateProcess) { super(offset, range); this.gate = gate; this.gateProcess = gateProcess; } @Override public boolean getCoil(int id) { switch (id) { case 0: return gateProcess.isHighImpedance(); case 1: return gateProcess.getOutputOnOff(); } return false; } @Override public short getHoldingRegister(int id) { switch (id) { case 1: double f = gateProcess.getOutputNormalized(); getHoldingRegister_2 = Utils.modbusToShort(f, 1); return Utils.modbusToShort(f, 0); case 2: return getHoldingRegister_2; case 3: return (short) (65535.0 * gateProcess.getOutputNormalized()); } return 0; } @Override public boolean getInput(int id) { switch (id) { case 1: return gate.isInputHigh(); } return false; } @Override public short getInputRegister(int id) { switch (id) { case 1: double f = gate.getInputNormalized(); getInputRegister_2 = Utils.modbusToShort(f, 1); return Utils.modbusToShort(f, 0); case 2: return getInputRegister_2; case 3: return (short) (65535.0 * gate.getInputNormalized()); } return 0; } @Override public void setCoil(int id, boolean value) { switch (id) { case 0: gateProcess.setHighImpedance(value); break; case 1: gateProcess.state(value); break; } } @Override public void setHoldingRegister(int id, short value) { switch (id) { case 1: setHoldingRegister_1 = value; break; case 2: gateProcess.setOutputNormalized(Utils.modbusToFloat(setHoldingRegister_1, value)); break; case 3: gateProcess.setOutputNormalized((double) ((int) value & 0xFFFF) / 65535.0); break; } } @Override public void setInput(int id, boolean value) { } @Override public void setInputRegister(int id, short value) { } }