Models API

.. py:module:: modscanner.models

Core data models used by ModScanner.

.. py:class:: DataType(*values) :module: modscanner.models

Bases: :py:class:~enum.StrEnum

supported Modbus register interpretations.

.. py:attribute:: DataType.UINT16 :module: modscanner.models :value: ‘uint16’

.. py:attribute:: DataType.INT16 :module: modscanner.models :value: ‘int16’

.. py:attribute:: DataType.UINT32 :module: modscanner.models :value: ‘uint32’

.. py:attribute:: DataType.INT32 :module: modscanner.models :value: ‘int32’

.. py:attribute:: DataType.FLOAT32 :module: modscanner.models :value: ‘float32’

.. py:class:: WordOrder(*values) :module: modscanner.models

Bases: :py:class:~enum.StrEnum

word order for multi-register values.

.. py:attribute:: WordOrder.BIG :module: modscanner.models :value: ‘big’

.. py:attribute:: WordOrder.LITTLE :module: modscanner.models :value: ‘little’

.. py:class:: RegisterArea(*values) :module: modscanner.models

Bases: :py:class:~enum.StrEnum

supported Modbus data areas

.. py:attribute:: RegisterArea.COIL :module: modscanner.models :value: ‘coil’

.. py:attribute:: RegisterArea.DISCRETE_INPUT :module: modscanner.models :value: ‘discrete_input’

.. py:attribute:: RegisterArea.INPUT_REGISTER :module: modscanner.models :value: ‘input_register’

.. py:attribute:: RegisterArea.HOLDING_REGISTER :module: modscanner.models :value: ‘holding_register’

.. py:class:: ResultStatus(*values) :module: modscanner.models

Bases: :py:class:~enum.StrEnum

outcome of reading an individual Modbus address

.. py:attribute:: ResultStatus.OK :module: modscanner.models :value: ‘ok’

.. py:attribute:: ResultStatus.PROTOCOL_ERROR :module: modscanner.models :value: ‘protocol_error’

.. py:attribute:: ResultStatus.TRANSPORT_ERROR :module: modscanner.models :value: ‘transport_error’

.. py:attribute:: ResultStatus.INVALID_RESPONSE :module: modscanner.models :value: ‘invalid_response’

.. py:class:: TcpTarget(host, port=502, device_id=1, timeout=3.0) :module: modscanner.models

Bases: :py:class:object

connection information for a Modbus TCP device

.. py:attribute:: TcpTarget.host :module: modscanner.models :type: str

.. py:attribute:: TcpTarget.port :module: modscanner.models :type: int

.. py:attribute:: TcpTarget.device_id :module: modscanner.models :type: int

.. py:attribute:: TcpTarget.timeout :module: modscanner.models :type: float

.. py:class:: ScanPlan(start, count, block_size=125, area=RegisterArea.HOLDING_REGISTER) :module: modscanner.models

Bases: :py:class:object

description of a contiguous Modbus data-area scan

.. py:attribute:: ScanPlan.start :module: modscanner.models :type: int

.. py:attribute:: ScanPlan.count :module: modscanner.models :type: int

.. py:attribute:: ScanPlan.block_size :module: modscanner.models :type: int

.. py:attribute:: ScanPlan.area :module: modscanner.models :type: ~modscanner.models.RegisterArea

.. py:class:: RegisterResult(address, area, status, value=None, error=None) :module: modscanner.models

Bases: :py:class:object

result for one scanned Modbus register

.. py:attribute:: RegisterResult.address :module: modscanner.models :type: int

.. py:attribute:: RegisterResult.area :module: modscanner.models :type: ~modscanner.models.RegisterArea

.. py:attribute:: RegisterResult.status :module: modscanner.models :type: ~modscanner.models.ResultStatus

.. py:attribute:: RegisterResult.value :module: modscanner.models :type: int | None

.. py:attribute:: RegisterResult.error :module: modscanner.models :type: str | None

.. py:class:: ScanReport(target, plan, results) :module: modscanner.models

Bases: :py:class:object

complete result of a Modbus register scan

.. py:attribute:: ScanReport.target :module: modscanner.models :type: ~modscanner.models.TcpTarget

.. py:attribute:: ScanReport.plan :module: modscanner.models :type: ~modscanner.models.ScanPlan

.. py:attribute:: ScanReport.results :module: modscanner.models :type: tuple[~modscanner.models.RegisterResult, …]

.. py:property:: ScanReport.successful_count :module: modscanner.models :type: int

  return the number of successfully read registers

.. py:property:: ScanReport.failed_count :module: modscanner.models :type: int

  return the number of registers that could not be read