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.

[参考译文] AM2432:Profinet 非循环数据支持的最大大小

Guru**** 2873850 points

Other Parts Discussed in Thread: AM2432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1618177/am2432-maximum-supported-size-for-profinet-acyclic-data

器件型号: AM2432

您好、  

我将 AM2432 与工业 SDK 11.00.00.08 配合使用、

我们的项目涉及大小高达 2000 字节的非循环响应。 我检查了堆栈、应该支持它、因为有定义 PN_API_IOD_MAX_RECOV_LEN (2U * 1024U)。
在我的代码中、我看到我正确地在末尾填充响应缓冲区、但我得到的响应始终在 1300 字节处被截断、其余的用零填充。 我将此图像作为示例,在左侧的回复,在右侧的缓冲区之前被发送。

immagine.png

即使在 Wireshark 中、长度似乎始终是 1384。

immagine.png
这是已知问题吗? 我在做什么?

谢谢您、  

此致、

Andrea

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

    您好、Andrea、

    感谢您的查询。

    这是 以太网帧的标准大小限制。 如果考虑 ETH、IP、UDP 和 DCE/RPC 数据、则有 1384 个字节、读取响应标头分为 84 个字节、记录数据分为 1300 个字节。 尽管如此、 堆栈仍然支持 碎片化  可能在 Wireshark 跟踪中可见的大型记录(请删除 Wireshark 筛选器以查看它们)。

    此致、
    Kamil

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

    您好 Kamil、  

    感谢您的答复。

    我删除了 Wireshark 筛选器 、但找不到任何其他有用的数据包。

    我已经附加了完整的 Wireshark 跟踪信息。 您能告诉我我应该期待什么其他数据包吗?

    谢谢您、

    此致、

    Andrea

    e2e.ti.com/.../1854.profinet.zip

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

    您好、Andrea、

    对于碎片、基本上应该期望通过 2 条连续消息发送响应。 第一个包含前 1384 个字节的数据、第二个包含其余字节。 我在您的 Wireshark 跟踪中没有看到这一点、但我想知道:

    1.为什么要发送两次读取请求?
    2.请说明您的拓扑结构吗?
    3.水龙头位于哪里?  
    4.如果您使用的是 TIA 门户网站,请分享该项目吗?

    谢谢。
    此致、
    Kamil

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

    尊敬的 Kamil:  

    感谢您的答复。

    我测试了 PLC 的问题,我注意到,在这个设置中,响应不会被截断为 1300 字节。 我 认为这是我们用于发出请求的工具(而不是 PLC)的问题、 因此 Profinet 堆栈侧不会出现问题。

    谢谢您、  

    此致、

    Andrea

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

    尊敬的 Kamil:

    我还有一个问题。 在 pn_app_iod_cfg.h 中、我找到以下宏:

    #ifndef PND_EDDP_MEM_OPTIMIZATION
    #define PN_API_IOD_MAX_RECORD_LEN (8U * 1024U)
    #else
    #define PN_API_IOD_MAX_RECORD_LEN (2U * 1024U)
    #endif

    应考虑两个分支中的哪一个? 我有这种疑问、因为 pN_app_IOD_cbRecordRead 回调函数似乎传递了 bufLen 为 2048(即使请求超过 2048 个字节)。 是这样吗?

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    正确!

    堆栈库现在以较小的缓冲区大小 (2048) 进行编译、但我们将在下一个版本(4 月)中更改此大小。 它可以是 8*1024、也可以由用户动态配置。

    此致、
    Kamil