Today is...
Thursday, September 19, 2019
Welcome to the Modbus Community, about
the world's leading automation protocol.
Are there headerless exception messages?
Should a Modbus TCP client expect exception messages that consist of only the PDU and have no MBAP header?

I am writing a Modbus TCP client program and use the Pymodslave simulator. Pymodslave uses unit id 01. If I send a message with a different unit id, for example FF, Pymodslave responds with an exception message that consists of the PDU only and has no MBAP header.

Raw request data:
00 00 00 00 00 06 FF 03 00 A0 00 01
Raw response data:
83 04

My question is: Should my client program handle such a PDU-only message with no MBAP header, or is this a quirk of Pymodslave? I cannot find any mentioning of transmitting only the PDU in
- Modbus_Application_Protocol_V1_1b3.pdf
- Modbus_Messaging_Implementation_Guide_V1_0b.pdf
or any other source I found so far.

Here is a little more context.

If the unit id is what Pymodslave expects then it always sends a full ADU. Here are two examples:

If I change the unit id byte in the request from FF to 01 then the messages are:
Request: 00 00 00 00 00 06 FF 03 00 A0 00 01
Response (success): 00 00 00 00 00 05 01 03 02 00 00

If I use the correct unit id and an invalid register number (FFFF) then the exception response has an MBAP header:
Request: 00 00 00 00 00 06 01 03 FF FF 00 01
Response (exception): 00 00 00 00 00 03 01 83 02