【问题标题】:Modscan64 gives Timeout Errors for all responsesModscan64 为所有响应提供超时错误
【发布时间】: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


    【解决方案1】:

    有一个 MODBUS 规范和一个 MODBUS 实施指南。第一个不太详细,是我使用的。第二个有更多细节,包括关键信息:

    MODBUS 响应需要有一个 MBAP 标头,就像请求一样。

    参见第 3.1.2 节:https://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-01
      • 2020-10-10
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多