Skip to content

Commit 9429a13

Browse files
committed
ASCII.
1 parent 568b67f commit 9429a13

File tree

4 files changed

+15
-15
lines changed

4 files changed

+15
-15
lines changed

pymodbus/message/ascii.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,14 @@ def decode(self, data: bytes) -> tuple[int, int, int, bytes]:
4848
if not (used_len := data.find(self.END)):
4949
Log.debug("Incomplete frame: {} wait for more data", data, ":hex")
5050
return 0, 0, 0, self.EMPTY
51+
52+
dev_id = int(data[1:3], 16)
5153
lrc = int(data[used_len - 2: used_len], 16)
5254
msg = a2b_hex(data[1 : used_len - 2])
5355
if not self.check_LRC(msg, lrc):
5456
Log.debug("LRC wrong in frame: {} skipping", data, ":hex")
5557
return used_len+2, 0, 0, self.EMPTY
56-
57-
dev_id = int(data[1:3], 16)
58-
_fc = int(data[3:5], 16).to_bytes(1,'big')
59-
return used_len+2, 0, dev_id, msg
58+
return used_len+2, 0, dev_id, msg[1:]
6059

6160
def encode(self, data: bytes, device_id: int, _tid: int) -> bytes:
6261
"""Decode message."""

pymodbus/message/message.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ def callback_data(self, data: bytes, addr: tuple | None = None) -> int:
7979
tot_len = len(data)
8080
start = 0
8181
while True:
82-
used_len, tid, device_id, data = self.msg_handle.decode(data[start:])
83-
if data:
84-
self.callback_request_response(data, device_id, tid)
82+
used_len, tid, device_id, msg = self.msg_handle.decode(data[start:])
83+
if msg:
84+
self.callback_request_response(msg, device_id, tid)
8585
if not used_len:
8686
return start
8787
start += used_len

test/message/test_ascii.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,23 @@ def test_roundtrip_LRC(self):
4040
@pytest.mark.parametrize(
4141
("packet", "used_len", "id", "res"),
4242
[
43-
(b":010100010001FC\r\n", 17, 1, b'\x00\x01\x00\x00'),
43+
(b':010100010001FC\r\n', 17, 1, b'\x01\x00\x01\x00\x01'),
44+
(b':00010001000AF4\r\n', 17, 0, b'\x01\x00\x01\x00\x0a'),
45+
(b':01010001000AF3\r\n', 17, 1, b'\x01\x00\x01\x00\x0a'),
46+
(b':61620001000A32\r\n', 17, 97, b'\x62\x00\x01\x00\x0a'),
47+
(b':01270001000ACD\r\n', 17, 1, b'\x27\x00\x01\x00\x0a'),
4448
],
4549
)
4650
def test_decode(self, frame, packet, used_len, id, res):
4751
"""Test decode."""
48-
return
4952
res_len, tid, dev_id, data = frame.decode(packet)
50-
assert res_len == len(packet)
53+
assert res_len == used_len
54+
assert data == res
5155
assert not tid
5256
assert dev_id == id
53-
assert data == res
5457

5558

56-
# OK: b":010100010001FC\r\n"
57-
# OK: b':00010001000AF4\r\n'
58-
# OK: b':01010001000AF3\r\n'
5959
# NO: b':01270001000ACD\r\n'
60-
# OK: b':61620001000AF4\r\n'
6160
# remember:
6261
# -- split packet
6362
# -- double packet

test/message/test_message.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ async def test_message_callback(self, dummy_message, data, res_len, cx, rc):
4444
assert msg.callback_request_response.call_count == cx
4545
if cx:
4646
msg.callback_request_response.assert_called_with(b'12345', 0, 0)
47+
else:
48+
msg.callback_request_response.assert_not_called()
4749

4850
async def test_message_build_send(self, dummy_message):
4951
"""Test message type."""

0 commit comments

Comments
 (0)