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**** 2459650 points
Other Parts Discussed in Thread: AM2432, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1413851/am2432-problem-with-acyclic-data-in-profinet

器件型号:AM2432
主题中讨论的其他器件: SysConfigDP83869

工具与软件:

您好!


我在 Profinet 中有非循环数据问题。
我将 SDK ind_comms_sdk_am243x_09_02_00_09与 AM2432配合使用。

我创建了一个使用 Profinet 堆栈的应用。 循环数据可以正常工作、但非循环数据存在此问题。 当插入长度较长的子模块(在我的测试中、是一个输入为56字节的子模块)并且通信启动时、循环数据会正常工作、但是如果我发送非循环数据读取请求、我通常不会得到响应。 该行为不是恒定的、有时我收到状态为 NCA_SERVER_TOO_BUSY 的数据包作为响应、有时我完全没有响应。 在这种情况下、根本不会调用 Pn_APP_IOD_cbRecordRead 或 Pn_APP_IOD_cbRecordWrite 回调。 相反、当插入长度较短的子模块(在我的测试中、具有18字节输入的子模块)时、循环和非循环数据工作正常、并调用回调。

此问题可能是由什么原因造成的?

此致、

Andrea

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

    安德烈、您好!

    感谢您提出问题。  我们需要一些额外的信息来全面了解问题。 您能否为我们回答以下问题、以便更清楚地了解此问题的原因?

    1.在哪个插槽/子插槽中插入了子模块?
    2.记录索引是什么? 您是否还可以共享显示未响应的读取请求的 Wireshark 日志
    3.能否分享设备的整体配置?

    此致、
    Laxman

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

    尊敬的 Laxman:


    感谢您的答复。


    子模块插入子插槽1的插槽2中、但在其他插槽中插入模块时、行为不会改变(而子插槽固定为1)。
    读取请求来自时隙0、子时隙1、并且我用作测试的记录索引为0x2004、但使用其他记录索引值时、该行为不会改变。 我预计、当我发送非循环读取请求时、堆栈至少会像在演示中一样调用 PN_APP_IOD_cbRecordRead 回调、但没有发生这种情况。
    同样、使用长度较小的子模块并将其移动到不同的时隙和子时隙或使用不同的索引记录不会改变行为、并且异步请求始终有效。

    我附上了一个 Wireshark 日志示例(当请求未被答复时)以及一个使用较短长度的模块回答请求时的示例。 回答 NCA_SERVER_TOO_BUSY 时的情况比较少见、我目前无法重现它。

    我还连接通过 Profinet 运行应用的 R5FS0-0内核的 SysConfig 中使用的器件配置。

    e2e.ti.com/.../1663.example.syscfg.txt

    如果您需要任何其他信息、请告诉我。

    此致、
    Andrea

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

    安德烈、您好!

     请预计响应会延迟、因为 PROFINET 协议栈专家目前不在办公室、两周后还会回来。 我们将调查您提供的详细信息、并通过对此问题的初步分析与您联系。

    此致、
    Laxman  

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

    大家好、有更新吗?

    我试着分析了代码、在我没有响应的执行期间、似乎在发送非循环读取请求时不会调用堆栈函数 pnpb_process_service_requests (因此还包括函数 pnpb_rec_read_write 和 pnio_CBF_rec_READ)。

    此外、我注意到、发送非循环写入请求(和仅限写入请求)总是有响应、无论使用的子模块长度如何。

    此外、如果我首先发送没有响应的非循环读取请求、然后发送非循环写入请求、则会返回状态冲突响应、后跟三条警报消息、然后关闭连接(没有调用我的回调)。 我已经附上了本例的 Wireshark 日志。 同样、此问题仅在我插入了长长度的子模块时发生、而当我插入长度较小的子模块时、我可以发送非循环读写请求而不会出现问题。

    此致、
    Andrea

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

    安德烈、您好!

    感谢您提供更多日志来帮助我们 加快调试过程。

    对于延迟深表歉意、 PROFINET 堆栈专家仍在休假一周。 我们计划在下周开始时调查此问题、并检查日志以找出问题的根本原因。

    此致、
    Laxman

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

    安德烈、您好!

    我会尝试在我这边重现这个问题。
    您在使用哪种 PLC? 您能分享 PLC 程序吗?

    此致、
    Kamil

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

    尊敬的 Kamil:


    感谢您的答复。

    我正在使用工具 Profinet 主仿真器

    此致、

    Andrea

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

    大家好、有更新吗?

    我从与演示非常相似的旧版项目创建了测试版本、并删除了与 Profinet 操作无关的所有内容。
    我修改了工程的 SysConfig、将 Profinet、PRU、ETHPHY 和 ICSS-EMAC 设置恢复到演示中使用的设置、而定制 PHY 则实际用于工程中。 我无法直接测试它、但我使用定制 PHY 测试了一个版本、出现了问题。
    当只有模块0x30被插入插槽1 (固定)且没有使用其他模块时、可以发出异步读写请求、而不会在所有的执行中出现问题。
    当另一个长度较大的模块也插入插槽2时,例如56字节的模块0x32 (甚至通过插入几个长度接近56字节的较小模块),对异步请求的响应通常会给出我之前的答复中描述的问题。 该行为无法修复、尽管插入了模块0x32、前2-3次执行通常会正常运行、但后续执行会失败。
    我已 在此处上传了项目 (我还包含了用于测试的 GSDML)、希望问题可以更容易重现和纠正。

    此致、

    Andrea

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

    大家好、有更新吗?

    此致、

    Andrea

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

    安德烈、您好!

    很抱歉耽误您的时间。 有一个非常高优先级的问题出现了、我们仍在努力解决这个问题。 您将在几天内获得机票的全面支持。

    感谢您的理解。

    Kamil  

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

    您好、感谢您的答复。

    我针对发现的另一个问题添加了另一个问题。 Profinet 协议栈是否需要特定的 SysConfig 配置(尤其是对于链接器和 MPU)? 我注意到、当在链接器中使用存储器区域0x82800000 (但我通过反复试发现)时、Profinet 栈会在 PRU 初始化之前卡在 PN_API_IOD_STARTUP 位置(在屏幕截图中、红线指示它不工作时的停止区域)。 如果我更正此问题、堆栈在一块板上可以正常工作、但使用另一块板(可能具有不同的版本)时仍然不工作、为了使其正常工作、我必须复制 MPU 和链接器的演示配置。 有必要知道在链接器和 MPU 中是否专门保留了存储器区域、以便我们可以在使用自定义配置的情况下适应这些限制。

    此致、

    Andrea

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

    感谢您的反馈、我们下周再见。

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

    安德烈、您好!

    让我们从下到上开始、我们首先处理该问题。 请分享以下内容:
    1. linker.cmd 和 syscfg 文件、用于使 Profinet 堆栈正常工作。
    2. linker.cmd & syscfg 文件引起问题。

    在本地调试/重新生成问题需要这些文件。

    谢谢。
    此致、
    Kamil

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

    感谢您发送编修。

    我附上了一个 zip 文件、其中包含 PROFINET 遇到困难以及何时正常工作时的链接器和 SysConfig 文件。

    此致、

    Andrea

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

    安德烈、您好!

    我正在尝试复制您的案例、以便我能够在我这边重现问题。 似乎您正在使用自己的链接器脚本、该脚本与我们项目中生成的脚本有些不同。 您能否共享文件 "SharedSectionLinker.h"和"ParametersBootLinker.h" ?

    在本例中、我们不使用地址0x82800000。  您是否还会向我发送两个 MAP 文件(正在工作和未在工作)?

    Thahnks。
    此致、
    Kamil

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

    尊敬的 Kamil:

    我认为这两个文件是不必要的、它们仅包含与内核1共享的部分内存、但添加或删除它们不会改变内核0上的 Profinet 的问题。 存储器地址0x82800000是一个地址示例、我第一次尝试解决问题时遇到错误、但第二次解决问题(我没有使用该地址、但问题仍然存在)。引起问题的地址不同、随附的示例解决了第二种情况。
    现在、我已在这里附加了所有可能的有用文件。

    此致、

    Andrea
    e2e.ti.com/.../5141.Profinet.zip

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

    安德烈、您好!

    我曾尝试在我这边使用  "不工作"的链接器脚本和 SysConfig 文件重现问题。 我必须对它们进行一些修改、以便适应我的系统(请找到随附的文件)。 我在这里看不到任何问题、Profinet 堆栈似乎可以正常工作。
    您的 SysConfig 与我的 SysConfig 之间的区别:
    -我不使用 IPC 模块
    -我使用的是 ICSSG1而不是 ICSSG0
    -我使用 AM243_EVM 默认的 DP83869 PHY 而不是您使用的 PHY
    -我禁用以太网相关 GPIO 引脚  
    -我添加了 EEPROM 模块,以适应我在这里使用的堆栈版本中的可选需求(在您的情况下不需要)
    -我添加了一些 LED 实例,以适应我在这里使用的堆栈版本中的可选需求(在您的情况下不需要)

    通过查看此结果、我怀疑在以太网级别有问题。 您能否将默认 PHY 与 ICSSG1一起使用、然后告诉我会发生什么情况?

    谢谢。
    此致、
    Kamile2e.ti.com/.../config_5F00_v1.zip

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

    尊敬的 Kamil:

    感谢您的答复。
    在我的模块中、必须使用自定义物理驱动程序和 ICSSG0。
    我自己使用了 AM64x EVM、我的代码在该器件上运行良好、无论 SysConfig 的链接器和 MPU 配置如何(甚至使用 ICSSG0和自定义驱动程序、它只是执行 MAP 部分、然后在 PRU_PHY_DETECT 上给出错误、但至少它会执行该部分代码、而且它以前不会卡住)。
    但是、我注意到在我的模块中、 输出部分"正在初始化 PRU 实例..." 不打印,因此也不调用 app_pruInit()函数。 是否有什么东西会阻止在库中的 Profinet 任务上调用该函数? 此外、这种行为非常奇怪、因为在我的模块上、第一次执行总是有效、从下一个开始、这种问题就会出现、要再次正确运行、您必须等待几分钟、然后只有第一次执行正确重新启动。
    还有什么其他方法有助于确定问题吗?

    我还有一个问题、在查看 Profinet 示例项目时、SysConfig MPU 区域似乎与链接器中使用的区域不匹配。 例如、DDR_PERIF、RxTx、堆区域在 SysConfig 中从0x80600000开始定义、但随后在链接器中不使用它们。 在 SysConfig 中、DDR_BSS 区域在0x80300000处定义、持续1MB、但链接器中的.bss 器件分配给0x8040000处的 DATA_MEM。 为什么这两个文件之间存在所有这些差异?

    此致、

    Andrea

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

    安德烈、您好!

    我目前正在 准备一个二进制文件,您可以使用它来向我们提供一些日志信息。 同时、您是否可以向我发送为您的以太网接口分配的 MAC 地址?

    谢谢。
    此致、
    Kamil

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

    尊敬的 Kamil:

    感谢您的答复。 我通常使用 MAC 地址 AC:D3:64:00:00:00、但使用另一个应该不会有问题。

    此致、

    Andrea

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

    安德烈、您好!

    请通过以下电子邮件地址与我联系:k-alkhouri@ti.com。 我想与您分享一个二进制文件。

    谢谢。
    此致、
    Kamil

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

    尊敬的 Kamil:

    我给您发送了一封电子邮件。

    谢谢!

    Andrea

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

    尊敬的 Kamil:

    感谢您的支持、我发现最后一个错误似乎已在9.02.15版中修复。
    但是、非循环数据上的错误仍然存在。 我注意到、当通过插入多个子模块指定传递到 PN_API_IOD_startup()的初始子模块配置时、会出现此问题、而如果仅传递插槽0的子模块、则不会发生此问题。
    在我的案例中,我必须在 PN_API_IOD_STARTUP ()调用时立即占用所有9个插槽,否则我会遇到另一个错误,如果此时插槽未填充,那么在第一个连接时输出数据始终保持不变,需要关闭连接并重新打开它以获取实际的输出数据。 我在演示中也遇到了最后一个错误、因此它应该可以轻松重现。
    这些是已知错误吗? 如果需要更多详细信息、请告诉我。

    谢谢。
    此致、
    Andrea

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

    尊敬的 Kamil:

    我再添加两个问题。
    第一个问题是、我注意到、在 pn_app_iod_cfg.h 文件中、可以修改更改 SNMP 行为的宏。 我曾尝试修改过一些值(例如 PN_API_IOD_SNMP_Port1_NAME PN_API_IOD_SNMP_INTERFACE_NAME)、但使用外部工具查询器件时、这些值似乎是固定常量、而实际并未使用这些宏。 这是否正常?
    第二、我们的团队使用 Nessus 工具执行了网络安全扫描、发现了屏幕上的两个问题。 我能否采取行动解决这些问题? 或者这些问题是否只能通过在堆栈中纠正来解决?

    谢谢。
    此致、
    Andrea

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

    安德烈、您好!

    建议您为每个问题打开一个 TT。 请您在上次询问时这样做吗?

    关于非循环数据问题、因为这是您的第一个问题、所以我们将继续在这里进行研究。 但首先我想整理最后的问题描述、如果我出了什么问题、我需要您的输入:

    1.只有在插槽0以外的插槽上插入子模块时才会出现问题。
    2.仅当子模块长度为56字节或以上、或者同一插槽中多个较小子模块的总长度为56字节或以上时、才会出现问题
    3.问题仅发生在非循环记录读取请求中

    您上传项目的链接不起作用。 升级 SDK 后、请向我发送有关初始子模块配置、GSDML 文件以及问题 Wireshark 跟踪的信息。

    谢谢!
    此致、
    Kamil

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

    尊敬的 Kamil:
    感谢您的答复。 我将针对另一个问题打开另一个主题。


    关于非循环数据的问题,我总结了我发现的一切:
    -我现在将 SDK 9.02.15与 AM243x 配合使用
    -我使用工具 Profinet Master Simulator
    -在调用 PN_API_IOD_STARTUP ()时,我总共传递了12个子模块(插槽0中4个子模块,插槽1-8的子插槽1中剩余的8个子模块)。 如果在此步骤中仅传递插槽0中的4个子模块、则永远不会出现问题。 我不想现在填充所有插槽、只需将子模块传递到插槽0即可、但如果我不将它们全部插入此步骤、那么在与主器件的第一次连接时、空的插槽根本不响应任何数据
    -在 Profinet 主模拟器方面,我现在使用我的 GSDML 文件,并在插槽2子插槽1中插入长度为56字节的子模块(但 如果我将其插入其他插槽,也会发生同样的情况)。 如果在此步骤中、我插入一个较小长度的子模块(例如18个字节)、那么问题永远不会发生。 循环通信 在所有情况下都能正常工作
    -现在我做了一个非循环读取请求(但与写入请求相同),请求在 Wireshark 中被正确拦截,但有时响应不会发送,工具返回错误,因为它超过了超时,有时 NCA_SERVER_TOO_BUSY 响应被发送。

    因此、第1点和第2点是正确的。 第3点部分正确、因为非循环记录写入请求也会产生问题。

    我正在附加源文件、现在使用的 GSDML 和 Wireshark 跟踪。

    谢谢!

    此致、

    Andrea

    e2e.ti.com/.../4377.Profinet.zip

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

    您好!

    我还使用 SDK 09.02.00.18进行了测试、但问题仍然存在。 我附上了我们项目的一个版本、其中只有 Profinet 部分存在、但问题仍然存在。 您只需更正 SysConfig 中的 ETH PHY 和 Profinet 设置、因为我无法使用默认选项进行测试。 其中包含 GSDML 文件。

    为了轻松重现问题、如果仅插入了固定在插槽1上的命令模块0x30、非循环读写工作、并且可以通过调试消息看到。 如果除命令模块外、器件状态模块0x32 (56字节)被插入时隙2、那么无论是读取还是写入、都不会接收到更多的非循环响应。

    如果需要更多信息、请告诉我。

    谢谢!

    此致、

    Andrea

    e2e.ti.com/.../Titan_5F00_Profinet_5F00_TI.zip

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

    安德烈、您好!

    根据我们的调试会议、我认为可以肯定的是、只有在使用 Profinet 主模拟器时才会出现问题、而在真正的 PLC 中则看不到该问题、因此、我现在将关闭此票证。 如果您有其他问题、请随时联系我们。

    谢谢你。
    此致、
    Kamil