Skip to content

Commit 5f2cf59

Browse files
708 Implement ReadFileRecordRequest.get_response_pdu_size() to ensure complete record (#709)
* Add get_response_pdu_size() to ensure complete file records are received correctly Co-authored-by: jan Iversen <jancasacondor@gmail.com>
1 parent f074f65 commit 5f2cf59

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

pymodbus/file_message.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def __init__(self, records=None, **kwargs):
9191
"""
9292
ModbusRequest.__init__(self, **kwargs)
9393
self.records = records or []
94+
self.count = 0
9495

9596
def encode(self):
9697
"""Encode the request packet.
@@ -137,6 +138,19 @@ def execute(self, context): # NOSONAR pylint: disable=unused-argument,no-self-u
137138
files = []
138139
return ReadFileRecordResponse(files)
139140

141+
def get_response_pdu_size(self):
142+
"""Get response pdu size.
143+
144+
Func_code (1 byte) + Response Byte Count(1 byte) +
145+
N * (File Response Byte Count (1 byte) + Reference Type (1 byte) + 2 * registers to read for file record)
146+
where N = record sub-request count.
147+
"""
148+
self.count = 0
149+
for record in self.records:
150+
self.count += record.record_length * 2 + 2 if record.record_length else 0
151+
152+
return 2 + self.count
153+
140154

141155
class ReadFileRecordResponse(ModbusResponse):
142156
"""Read file record response.

0 commit comments

Comments
 (0)