Modbus 20(0x14)读取文件记录 - 文件有多长

时间:2014-10-21 18:37:45

标签: protocols modbus

我正在实现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个字节(记录长度)。这应该会导致错误,因为我请求更多字节然后在文件中。

  • 我会得到什么错误?
  • 如何确定文件的长度?

我希望我不必提出文件请求,如果有错误,请再次尝试使用较小的长度,直到我获得成功的响应。

1 个答案:

答案 0 :(得分:0)

这是旧的,但我会回答,因为我只是在实施Modbus奴隶,所以......

你很可能得到02.符合Modbus的标准只有在bytecount超出界限时才会返回03,小于7或大于245.标准对此命令非常模糊,而且它只是真正使得无论如何,感觉还有Modicon PLC。其他供应商要么不实施这些,要么“做他们想做的任何事情”。

我举例说明了我们的字符串寄存器。