You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
build_userdata_followup_request: parameter block differs from the real engineering tool and the native Snap7 client #948
S7Protocol.build_userdata_followup_request builds the follow-up request for multi-packet USER_DATA responses (SZL, list blocks of type) with an 8-byte parameter block and method 0x11. Every independent source I can find sends a 12-byte block with method 0x12 instead.
Reproduction (python-snap7 3.0.0 and 3.2.1, same bytes):
The same twelve-byte, method-0x12 form is what the real tool sends for SZL follow-ups in the other public S7-300 captures (s7comm_reading_plc_status: all 5 follow-ups), and it is what the official native Snap7 client sends. I ran the pinned native client (davenardella/snap7 at 30f37da) against a recording stub peer that answers one fragment announcing more data; its follow-ups are 00 01 12 08 12 44 01 7b 00 00 00 00 for SZL and 00 01 12 08 12 43 02 7b 00 00 00 00 for list-blocks-of-type (parameter length 12, data 0a 00 00 00). The native source agrees (opListBlocksOfType sets Uk = 0x12 and a 12-byte parameter length for every follow-up).
The data section (0a 00 00 00) is identical on both sides; only the parameter block differs. I have not tested whether a real controller tolerates the shorter 0x11 form, so this may work today; it is a deviation from the real tool rather than a confirmed failure.
Fixed on master by #942: build_userdata_followup_request now emits the 12-byte, method 0x12 parameter block (00 01 12 08 12 <0x40|group> <subfunction> <sequence> 00 00 00 00), and your reproduction gives 320700000006000c00040001120812430201000000000a000000. It will be in the next release.
Activity
gijzelaerr commentedon Oct 19, 2026
Fixed on master by #942:
build_userdata_followup_requestnow emits the 12-byte, method0x12parameter block (00 01 12 08 12 <0x40|group> <subfunction> <sequence> 00 00 00 00), and your reproduction gives320700000006000c00040001120812430201000000000a000000. It will be in the next release.