LOL.
Make sure they know that the numbering system of the data and addressing models are inconsistent, arbitrary, opaque, ridiculous, poorly-designed, etc. E.g. the prefix (4 in 40001) of the model address is only a loosely-held convention that has nothing whatsoever to do with the function code e.g. function code 3 reads holding registers 4xxxxx and function code 4 reads input registers 3xxxxx.
The main tricks to getting it to work are
- deducing the data and wire addressing models for each party, client and server, and
- never assuming there is any kind of a standard for anything except the bits on the wire.
In light if that second point, it might be worth the effort to put a USB-serial port (or a TCP server on port 502) on a laptop and write a simple Python script to accept a client request; once they see the bits and bytes, the light should come on and the rest is bookkeeping.
As much as mock Modbus, the website at modbus.org and the protocol specification documents are pretty good.
_