我正在实现Modbus功能20(0x14)读取文件记录。
Modbus Spec - function 20 (0x14) Read File Record.
-------------------------------------------------------------------
Request:
| Name | Size | Example BYTES
*-------------------------------*-----------*----------------------
| Function code | 1 Byte | 0x14
| Byte Count | 1 Byte | 0x07 to 0xF5 bytes
| Sub-Req. x, Reference Type | 1 Byte | 06
| Sub-Req. x, File Number | 2 Bytes | 0x0001 to 0xFFFF
| Sub-Req. x, Record Number | 2 Bytes | 0x0000 to 0x270F
| Sub-Req. x, Record Length | 2 Bytes | N
Response:
| Name | Size | Example BYTES
*-------------------------------*-----------*----------------------
| Function code | 1 Byte | 0x14
| Resp. data Length | 1 Byte | 0x07 to 0xF5
| Sub-Req. x, File Resp. length | 1 Byte | 0x07 to 0xF5
| Sub-Req. x, Reference Type | 1 Byte | 6
| Sub-Req. x, Record Data | N*2 Bytes |
Error
| Name | Size | Example
*-------------------------------*-----------*----------------------
| Error code | 1 Byte | 0x94
| Exception code | 1 Byte | 01 ILLEGAL FUNCTION
02 ILLEGAL DATA ADDRESS
03 ILLEGAL DATA VALUE
04 SERVER DEVICE FAILURE
08 MEMORY PARITY ERROR
来源:http://www.modbus.org/specs.php
我请求的文件是100长。 我做了一个文件请求,其偏移量(记录号)为89,长度为20个字节(记录长度)。这应该会导致错误,因为我请求更多字节然后在文件中。
我希望我不必提出文件请求,如果有错误,请再次尝试使用较小的长度,直到我获得成功的响应。
答案 0 :(得分:0)
这是旧的,但我会回答,因为我只是在实施Modbus奴隶,所以......
你很可能得到02.符合Modbus的标准只有在bytecount超出界限时才会返回03,小于7或大于245.标准对此命令非常模糊,而且它只是真正使得无论如何,感觉还有Modicon PLC。其他供应商要么不实施这些,要么“做他们想做的任何事情”。
我举例说明了我们的字符串寄存器。