Class ModbusConnectionSupport

java.lang.Object
net.solarnetwork.node.io.modbus.support.AbstractModbusConnection
net.solarnetwork.node.io.modbus.support.ModbusConnectionSupport
All Implemented Interfaces:
Closeable, AutoCloseable, ModbusConnection
Direct Known Subclasses:
StaticDataMapReadonlyModbusConnection

public class ModbusConnectionSupport extends AbstractModbusConnection implements ModbusConnection
Supporting class for ModbusConnection implementations to extend.

This class has been created to help with Modbus testing. All write methods throw an UnsupportedOperationException and all read methods return null. The open() and close() methods do nothing.

Version:
3.0
Author:
matt
  • Constructor Details

    • ModbusConnectionSupport

      public ModbusConnectionSupport()
      Constructor.
  • Method Details

    • open

      public void open() throws IOException, net.solarnetwork.node.service.LockTimeoutException
      Description copied from interface: ModbusConnection
      Open the connection, if it is not already open. The connection must be opened before calling any of the other methods in this API.
      Specified by:
      open in interface ModbusConnection
      Throws:
      IOException - if the connection cannot be opened
      net.solarnetwork.node.service.LockTimeoutException - if a lock is required to open the connection and it could not be obtained within a configured maximum amount of time
    • close

      public void close()
      Description copied from interface: ModbusConnection
      Close the connection, if it is open.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface ModbusConnection
    • writeWords

      public void writeWords(ModbusWriteFunction function, int address, int[] values)
      Description copied from interface: ModbusConnection
      Write unsigned 16-bit word values to 16-bit Modbus registers.

      All the elements in values will be truncated to 16-bits and then stored in Modbus registers.

      Specified by:
      writeWords in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start writing to
      values - the unsigned 16-bit values to write
    • writeString

      public void writeString(ModbusWriteFunction function, int address, String value, Charset charset)
      Description copied from interface: ModbusConnection
      Write a string as raw byte values to registers.
      Specified by:
      writeString in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start writing to
      value - the string value to write
      charset - the character set to interpret the bytes as
    • writeWords

      public void writeWords(ModbusWriteFunction function, int address, short[] values)
      Description copied from interface: ModbusConnection
      Write 16-bit word values to 16-bit Modbus registers.
      Specified by:
      writeWords in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start writing to
      values - the 16-bit values to write
    • writeBytes

      public void writeBytes(ModbusWriteFunction function, int address, byte[] values)
      Description copied from interface: ModbusConnection
      Write raw byte values to registers.
      Specified by:
      writeBytes in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start writing to; values.length * 2 16-bit registers will be written
      values - the byte values to write
    • readWordsUnsigned

      public int[] readWordsUnsigned(ModbusReadFunction function, int address, int count)
      Description copied from interface: ModbusConnection
      Get the values of specific 16-bit Modbus registers as an array of unsigned 16-bit words.

      Note that the raw int values can be treated as signed shorts by casting them to shorts, like short signed = (short)s. Thus the values returned by this method are technically the same as those returned by ModbusConnection.readWords(ModbusReadFunction, int, int), having been cast to ints.

      Specified by:
      readWordsUnsigned in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start reading from
      count - the number of 16-bit Modbus registers to read
      Returns:
      array of register values; the result will have a length equal to count
    • readString

      public String readString(ModbusReadFunction function, int address, int count, boolean trim, Charset charset)
      Description copied from interface: ModbusConnection
      Read a set of registers as bytes and interpret as a string.
      Specified by:
      readString in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start reading from
      count - the number of Modbus 16-bit registers to read
      trim - if true then remove leading/trailing whitespace from the resulting string
      charset - the character set to interpret the bytes as
      Returns:
      String from interpreting raw bytes as a string
      See Also:
    • readWords

      public short[] readWords(ModbusReadFunction function, int address, int count)
      Description copied from interface: ModbusConnection
      Get the values of specific 16-bit Modbus registers as an array of 16-bit words.

      Note that the raw short values can be treated as unsigned shorts by converting them to integers, like int unsigned = ((int)s) && 0xFFFF, or by calling Short.toUnsignedInt(short). Thus the values returned by this method are technically the same as those returned by ModbusConnection.readWordsUnsigned(ModbusReadFunction, int, int), without having been cast to ints.

      Specified by:
      readWords in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start reading from
      count - the number of Modbus 16-bit registers to read
      Returns:
      array of register values; the result will have a length equal to count
    • writeDiscreetValues

      public void writeDiscreetValues(int[] addresses, BitSet bits)
      Description copied from interface: ModbusConnection
      Write values of a set of "coil" type registers, via a BitSet.

      This uses a Modbus function code 5 request, once for each address in addresses. Each address at index i corresponds to the value of bit at index i. Thus bits 0 to addresses.length - 1 are used.

      This method is required but deprecated to preserve backwards compatibility.

      Specified by:
      writeDiscreetValues in interface ModbusConnection
      Parameters:
      addresses - the Modbus register addresses to start writing to
      bits - the bits to write, each index corresponding to an index in addresses
    • readInputDiscreteValues

      public BitSet readInputDiscreteValues(int address, int count)
      Description copied from interface: ModbusConnection
      Get the values of a set of "input discrete" type registers, as a BitSet.

      This uses a Modbus function code 2 request. The returned bitset will have count values set, from 0 to count - 1.

      Specified by:
      readInputDiscreteValues in interface ModbusConnection
      Parameters:
      address - the Modbus register addresses to start reading from
      count - the count of registers to read
      Returns:
      BitSet, with each 0 to count indexes
    • readDiscreetValues

      public BitSet readDiscreetValues(int address, int count)
      Description copied from interface: ModbusConnection
      Get the values of a set of "coil" type registers, as a BitSet.

      This uses a Modbus function code 1 request.

      This method is required but deprecated to preserve backwards compatibility.

      Specified by:
      readDiscreetValues in interface ModbusConnection
      Parameters:
      address - the 0-based Modbus register address to read
      count - the count of discreet registers to read
      Returns:
      BitSet, with indexes set from 0 to a count - 1
    • readDiscreetValues

      public BitSet readDiscreetValues(int[] addresses, int count)
      Description copied from interface: ModbusConnection
      Get the values of a set of "coil" type registers, as a BitSet.

      This uses a Modbus function code 1 request. The returned set will have a size equal to addresses.length * count.

      This method is required but deprecated to preserve backwards compatibility.

      Specified by:
      readDiscreetValues in interface ModbusConnection
      Parameters:
      addresses - the 0-based Modbus register addresses to read
      count - the count of coils to read with each address
      Returns:
      BitSet, with each count indexes for each index in the addresses parameter
    • readBytes

      public byte[] readBytes(ModbusReadFunction function, int address, int count)
      Description copied from interface: ModbusConnection
      Get the raw bytes of specific registers.

      Each 16-bit modbus register value will be decomposed into two output bytes, so that the returned result will have a length equal to count * 2.

      Specified by:
      readBytes in interface ModbusConnection
      Parameters:
      function - the Modbus function code to use
      address - the 0-based Modbus register address to start reading from
      count - the number of Modbus 16-bit registers to read
      Returns:
      register words as an array of bytes