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.

[参考译文] LP-AM243:ModbusTCP Server 不会实时更新数据寄存器(线圈,离散输入)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1644061/lp-am243-modbustcp-server-does-not-update-the-data-registers-coils-discrete-inputs-in-real-time

器件型号: LP-AM243

大家好、我的 Industrial Modbus TCP Server 示例有问题。

我使用的是:

  • IND_COMMS_SDK_am243x_2025_00_08

  • MCU_PLUS_SDK_am243x_11_01_00_19

之前、我已经就此主题提出了一个相关问题:
LP-AM243:如何提高 Modbus TCP 服务器响应时间性能? -处理器论坛 — 处理器- TI E2E 支持论坛 

我已经通过添加以下内容尝试了建议的解决方法:

#define TCP_TMR_INTERVAL 10

lwipopts.h lwIP 库中的文件:

C:\ti\mcu_plus_sdk_am243x_11_01_00_19\source\networking\lwip

然后、我成功地重新编译了该库、并将其包含在工业通信 Modbus TCP Server 示例中。

然而,当我测试它时,结果仍然是相同的。

我测试了几个 Modbus 功能、例如:

  • 读取分立式输入 (FC 2)

  • 写入多个线圈 (FC 15)

我在计算机上使用了几个 Modbus TCP 客户端应用程序、并使用 Wireshark 监控流量。 我计算了请求数据包和响应数据包之间的时间差。

响应时间为:

  • FC 2:约 1 毫秒

  • FC 15:约 14 毫秒

但是、奇怪的是数据值不会同时更新。 数据仅在大约 200ms 后更新。

您能否帮助解释导致此延迟的原因、以及应该检查示例工程或栈的哪个部分?

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

    尊敬的 Bayu:

    我正在检查代码、如果需要、将重新分配给相应的专家。 请在 1-2 个工作日内回复。

    谢谢。此致、
    Teja。

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

    其他数据

    Wireshark 分接
    -仅使用 Qmodmaster 读取离散输入(作为 Modbus TCP 从属设备)

    结果:从请求到响应大约需要 1 毫秒

    -仅使用 Qmodmaster 写入多个线圈(作为 Modbus TCP 从属设备)

    结果:从请求到响应大约需要 14ms

    然后、我们尝试创建 python 程序来读取离散输入、然后直接写入多个线圈、但从读取离散输入到写入多个线圈的延迟需要超过 200ms、位于 python 代码下方

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

    嗨、 Teja Rowthu 是否有任何关于此问题的更新?

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

    您好、  

    您是否还能分享有关如何测量 200ms 的更多详细信息。  

    这是从“读取响应“到“下一次写入“的时间吗?  

    您可以共享 Wireshark 并指向帧吗?

    此致

    Christof

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

    你好 Christof
    如图所示、该测试通过向数字输入 (DI) 提供信号并检查数字输出 (DO) 需要多长时间来测量响应时间。 PLC 程序只是输入=输出、因此当 DI 打开时、DO 也会打开。 使用示波器来测量输入信号和输出信号之间的时间差。

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

    感谢您的澄清。

    您能分享测试中的 Wireshark 记录吗?

    此致

    Christof

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

    啊、对不起、我之前错过了、这里是
    e2e.ti.com/.../RespondTime_5F00_Test.txt

    对于文件.pcapng ,你可以访问这个驱动器,因为我无法在这里上传它
    https://drive.google.com/drive/folders/1VVYqLKZ5utNOvSiWGz1T7F_Vg71W_Hcj?usp=sharing

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

    您好、  

    感谢您的录音。 看起来延迟仍在 lwip 中。  

    我们在下一个版本中提供了解决方案、但我们的发布周期不会在 10 月之前实现。  

    那么另一个解决方法建议:

    1.添加到 lwipopts.h:#define LWIP_TCP_NOTELAY 1.    
      这将禁用 Nagle 算法。

    2.修改 tcp_out.c 中的函数 tcp_write在函数返回前添加“tcp_output (PCB);“。 这会强制发送、而无需等待更多数据。

    重新编译 lwip 库。  

    此致

    Christof

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

    Hai Christof,

    我们将尝试此权变措施。 这就是我重新编译 LWIP 库的方法。

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

    你好 Christof Vogt ,我的同事 Ayuf Basthomi ,已经重新测试了它,但结果仍然是相同的。 是否确定是 lwIP 库? 我尝试了 EtherNet/IP 协议、该协议也使用 lwIP、结果很好。 您能给我们发送测试过的.lib 文件吗?

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

    tcp_output 需要在 第 800 行“return ERR_OK;“之前放置一个以上位置

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

    好的。 我们会再试一次。

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

    您好 Christof Vogt 您能给我们发送您已编译的文件吗?

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

    抱歉、我无法提供库。  

    我们仅在常规版本中或为具有高级支持协议的客户提供代码修复。  

    到目前为止、我只能为您提供可行的解决方法。  

    如果您对优质支持感兴趣、可以联系您当地的 TI 销售代表

    此致

    Christof

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

    尊敬的 Christof:

    您能否查看显示我如何应用解决方法的图片? 我已经尝试了你建议的一切。

    我将附加我重新编译的库。 您能帮我检查一下吗?

    在我看来、这个问题不是由 LWIP 库引起的、因为我也在使用同一个以太网/IP 库、而且运行良好。

    我认为问题出在 Modbus 库中的某个位置。 我注意到、寄存器数据同步无法正常运行。 我们已经知道、读取分立式输入的响应时间约为 1ms、而写入单个线圈的响应时间约为 14ms。

    当 Modbus TCP 客户端读取离散输入时、I 传递数字输入值、当用户写入单线圈时、I 触发数字输出引脚。 但是、当我测量数字输入信号和数字输出信号之间的时序时、延迟约为 200ms。

    您对此问题的分析是什么?

    e2e.ti.com/.../lwip_2D00_freertos.am243x.r5f.ti_2D00_arm_2D00_clang.debug.libe2e.ti.com/.../lwip_2D00_freertos.am243x.r5f.ti_2D00_arm_2D00_clang.release.lib

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

    您好、 Christof Vogt 是否有关于此主题的任何更新?

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

    您好、 Christof Vogt 、您能解释更多有关高级支持的信息吗? 它提供什么样的支持? 它是否还包括为客户提供的培训材料或指导、并在开发过程中为客户提供帮助?

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

    尊敬的 Bayu:  

    很抱歉耽误你的时间。  

    高级的关键点是

    -立即修复错误(不等待下一个版本)

    -支持以更高的优先级处理,并保证反应时间。  

    -包括 40 小时直接支持(例如在线会话或解决客户特定问题)

    -附加功能(与 Modbus 无关)

    不包括培训材料。 这将是按需提供的附加服务。  

    此问题很可能已在升级版本中得到解决。 您认为问题不在 LWIP 中。 在此处建议的 LWIP 中进行更改只是一种解决方法、可以解决此问题。  

    此致

    Christof