Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 8 additions & 21 deletions pymodbus/datastore/remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ def __init__(self, client, unit=None):
"""
self._client = client
self.unit = unit
self.result = None
self.__build_mapping()
if not self.__set_callbacks:
_logger.error("Init went wrong.")

def reset(self):
"""Reset all the datastores to their default values."""
Expand All @@ -45,34 +48,18 @@ def validate(self, fc_as_hex, address, count=1):
"""
txt = f"validate[{fc_as_hex}] {address}:{count}"
_logger.debug(txt)
result = self.__get_callbacks[self.decode(fc_as_hex)](address, count)
return not result.isError()
self.result = self.__get_callbacks[self.decode(fc_as_hex)](address, count)
return not self.result.isError()

def getValues(self, fc_as_hex, address, count=1):
"""Get `count` values from datastore.

:param fc_as_hex: The function we are working with
:param address: The starting address
:param count: The number of values to retrieve
:returns: The requested values from a:a+c
"""
# TODO deal with deferreds # pylint: disable=fixme
txt = f"get values[{fc_as_hex}] {address}:{count}"
_logger.debug(txt)
result = self.__get_callbacks[self.decode(fc_as_hex)](address, count)
return self.__extract_result(self.decode(fc_as_hex), result)
"""Get values from real call in validate"""
return self.__extract_result(self.decode(fc_as_hex), self.result)

def setValues(self, fc_as_hex, address, values):
"""Set the datastore with the supplied values.

:param fc_as_hex: The function we are working with
:param address: The starting address
:param values: The new values to be set
Already done in validate
"""
# TODO deal with deferreds # pylint: disable=fixme
txt = f"set values[{fc_as_hex}] {address}:{len(values)}"
_logger.debug(txt)
self.__set_callbacks[self.decode(fc_as_hex)](address, values)

def __str__(self):
"""Return a string representation of the context.
Expand Down
3 changes: 3 additions & 0 deletions test/test_remote_datastore.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,15 @@ def test_remote_slave_get_values(self):
client.read_holding_registers = lambda a, b: ExceptionResponse(0x15)

context = RemoteSlaveContext(client)
context.validate(1, 0, 10)
result = context.getValues(1, 0, 10)
self.assertEqual(result, [1] * 10)

context.validate(4, 0, 10)
result = context.getValues(4, 0, 10)
self.assertEqual(result, [10] * 10)

context.validate(3, 0, 10)
result = context.getValues(3, 0, 10)
self.assertNotEqual(result, [10] * 10)

Expand Down