Skip to content

Commit 2b63ddb

Browse files
authored
Solve problem with remote datastore. (#988)
1 parent dfc4bd8 commit 2b63ddb

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed

pymodbus/datastore/remote.py

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ def __init__(self, client, unit=None):
2929
"""
3030
self._client = client
3131
self.unit = unit
32+
self.result = None
3233
self.__build_mapping()
34+
if not self.__set_callbacks:
35+
_logger.error("Init went wrong.")
3336

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

5154
def getValues(self, fc_as_hex, address, count=1):
52-
"""Get `count` values from datastore.
53-
54-
:param fc_as_hex: The function we are working with
55-
:param address: The starting address
56-
:param count: The number of values to retrieve
57-
:returns: The requested values from a:a+c
58-
"""
59-
# TODO deal with deferreds # pylint: disable=fixme
60-
txt = f"get values[{fc_as_hex}] {address}:{count}"
61-
_logger.debug(txt)
62-
result = self.__get_callbacks[self.decode(fc_as_hex)](address, count)
63-
return self.__extract_result(self.decode(fc_as_hex), result)
55+
"""Get values from real call in validate"""
56+
return self.__extract_result(self.decode(fc_as_hex), self.result)
6457

6558
def setValues(self, fc_as_hex, address, values):
6659
"""Set the datastore with the supplied values.
6760
68-
:param fc_as_hex: The function we are working with
69-
:param address: The starting address
70-
:param values: The new values to be set
61+
Already done in validate
7162
"""
72-
# TODO deal with deferreds # pylint: disable=fixme
73-
txt = f"set values[{fc_as_hex}] {address}:{len(values)}"
74-
_logger.debug(txt)
75-
self.__set_callbacks[self.decode(fc_as_hex)](address, values)
7663

7764
def __str__(self):
7865
"""Return a string representation of the context.

test/test_remote_datastore.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ def test_remote_slave_get_values(self):
4040
client.read_holding_registers = lambda a, b: ExceptionResponse(0x15)
4141

4242
context = RemoteSlaveContext(client)
43+
context.validate(1, 0, 10)
4344
result = context.getValues(1, 0, 10)
4445
self.assertEqual(result, [1] * 10)
4546

47+
context.validate(4, 0, 10)
4648
result = context.getValues(4, 0, 10)
4749
self.assertEqual(result, [10] * 10)
4850

51+
context.validate(3, 0, 10)
4952
result = context.getValues(3, 0, 10)
5053
self.assertNotEqual(result, [10] * 10)
5154

0 commit comments

Comments
 (0)