【发布时间】:2021-03-12 16:32:17
【问题描述】:
我正在使用 Modscan64 轮询使用 TCP 的服务。我总是收到这条消息:
** MODBUS Message TIME-OUT **
-
我连接到环回 127.0.0.1。
-
我尝试过使用函数 3(保持寄存器)和函数 4(输入寄存器),使用长度 2 和地址 0001。
-
我的服务(使用 TCP 的twisted 在 Python 中编码)接收请求,正确解释字节,处理它并发送响应。
-
MODSCAN 接收到我发送的响应,并在“显示流量”模式下进行了验证。响应中的字节与我的服务发送的匹配。
超时真的是问题吗?
如何更改超时?我看不到 TCP 超时的设置。 (谷歌搜索解释了如何仅为 RTU 设置它。)
如果不是真的超时,那又是什么呢?
这是一个典型的请求/响应:
01 00 00 00 00 06 01 04 00 00 00 02 04 04 42 ca 00 00
请求(12 字节):
- 前两个字节01 00是一个计数器,每次请求都会递增。
- 前七个字节是 TCP 标头:01 00 00 00 00 06 01
- 接下来的五个字节是 MODBUS 请求:04 00 00 00 02
- 请求中04为读取输入寄存器的功能码
- 请求中接下来的两个字节00 00是要读取的地址
- 请求中最后两个字节为00 02,表示要读取的寄存器数量
响应(6 个字节):
- MODBUS 响应是最后六个字节:04 04 42 ca 00 00
- 响应与函数 04 相呼应,表示不是错误
- 然后响应具有 04 表示后面的字节数
- 然后响应具有 42 ca 00 00,这是 101.0 的单精度(正在测试的模拟温度值)
MODSCAN 是否期望响应中包含 TCP 信封?
我需要做些什么来指示字节顺序吗?
【问题讨论】:
标签: modbus-tcp