This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TM4C1292NCPDT:Modbus TCP ACK 数据包

Guru**** 2392905 points
Other Parts Discussed in Thread: TM4C1292NCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/687504/rtos-tm4c1292ncpdt-modbus-tcp-ack-packets

器件型号:TM4C1292NCPDT

工具/软件:TI-RTOS

您好!

我将第三方 Modbus TCP 堆栈与 TI RTOS 和 TI NDK 一起用于 Modbus 从设备。 它使用 TM4C1292NCPDT 控制器。 我在 Wireshark 中捕获了 Modbus 互操作、并在 Modbus TCP 查询和响应之间找到了 Always TCP ACK 数据包。 但 Modbus 事务之间通常不应存在 TCP ACK 数据包。  

请查找使用 Modbus 事务之间没有 ACK 包的其他内容设计的从属器件的日志。

查找以下捕获、了解使用 TI 产品在 Modbus 事务之间具有 ACK 包的从器件。

Modbus TCP 查询。

以前 Modbus TCP 查询序列号的 TCP ACK 数据包。

 

Modbus TCP 响应、带有之前 Modbus TCP 查询序列号的 ACK 数据包。


 

我想 知道为什么 在 Modbus TCP 事务之间从我的器件传输单独的 TCP ACK 数据包。 我想优化 Modbus 传输的速度、避免使用单独的 TCP Ack 数据包。 我们如何在 TI NDK 中实现这一点?

 

我已附上 Wireshark 日志的.pcap 和.csv 文件、以供您更好地了解。

e2e.ti.com/.../wireshar_5F00_log.zip

 

此致

巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、
    我不是 Modbus 专家、也不是 NDK 专家。 您说 Modbus 数据包之间有 ACK 数据包、您正在尝试避免 ACK 数据包。 是这样吗? 我想这些 ACK 数据包是由 MCU 生成的、对吧? 您是否知道 MCU ACK 数据包应答哪些服务器请求? 我认为这是您希望了解这些 ACK 数据包响应的第一部分? 如果 ACK 数据包响应网络上的某些请求、我认为您无法删除/避免这些请求。 在 NDK 用户指南第2.2.7.2节中、介绍了如何配置网络调度程序任务优先级。 也许您可以研究一下这一点、看看您是否可以提高 Modbus 任务相对于其他网络任务的优先级。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Charles Tsaaa">我不是 Modbus 专家、也不是 NDK 专家。 您说 Modbus 数据包之间有 ACK 数据包、您正在尝试避免 ACK 数据包。 是这样吗? [/报价]

    -是的

    [引用用户="Charles Tsaa"]我想这些 ACK 数据包是由 MCU 生成的,对吗?

    -是的

    [引用 USER="Charles Tsaaa">您是否知道 MCU ACK 数据包应答哪些服务器请求? 我认为这是您希望了解这些 ACK 数据包响应的第一部分? 如果 ACK 数据包响应网络上的某些请求、我认为您无法删除/避免这些请求。 [/报价]

    -实际上 Modbus 响应本身具有从 PC 发送的查询的 ACK 信息。 但是、这里 NDK 根据标准 TCP 协议响应查询的 ACK 数据包、Modbus TCP 应用程序也会插入 ACK 信息和响应。 因此、我认为可以删除或避免使用 TCP ACK 数据包、以利用处理器带宽进行 Modbus TCP 数据包处理。

    对于 Modbus TCP 协议、是否有任何方法可以在 NDK 堆栈中停止 ACK 数据包?

    [引用 USER="Charles Tsaaa"]在 NDK 用户指南第2.2.7.2节中,它讨论了配置网络调度程序任务优先级的问题。 也许您可以研究一下这一点、看看您是否可以提高 Modbus 任务相对于其他网络任务的优先级。

    -好的。 我将尝试更改任务的优先级并观察性能。

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    巴拉
    再说一次、我不是 NDK 专家。 但对我来说、NDK 只是一个 TCP/IP 堆栈。 它不知道上层应用想要发送或不发送 ACK 数据包。 我倾向于认为这是由应用层控制/指示的。 也许我弄错了。 我还建议您将问题发布到第三方 Modbus 堆栈供应商以获取建议。 另外,请尝试更改网络任务的优先级,并查看它们是否起作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    感谢您的更新。 我已经与 Modbus 从站堆栈供应商进行了检查、确认堆栈未处理任何 ACK 数据包、它将处理数据包并进行回复。 通常情况下、TCP 层正在处理 ACK 数据包、它应该只在 NDK 中。

    此致
    巴拉