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.

[参考译文] AM243X-AM243X:MCU-PLUS-SDK LaunchPad - EtherNet/IP 适配器通用器件 MII

Guru**** 2455560 points
Other Parts Discussed in Thread: DP83826E, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1438978/mcu-plus-sdk-am243x-am243x-launchpad---ethernet-ip-adapter-generic-device-mii

器件型号:MCU-PLUS-SDK AM243X
主题中讨论的其他器件:DP83826EDP83869SysConfig

工具与软件:

大家好!

我从几周开始致力于 EtherNet/IP 协议、并尝试运行和研究 SDK 9.02.15示例文件夹中包含的名为"EtherNetIP_adapter_demo"的示例。

在 AM243x LaunchPad (用作从设备)上加载示例后、我已尝试在专用本地网络中使用 PC 上的软件连接到用作主设备的从设备。

例如、如果我选择"Input Only"命令从从从器件读取属性、则会看到主器件和从器件之间的通信持续了8次。

之后、主器件停止发送任何内容、但从器件继续发送其他8条消息。

然后、Slave 关闭 TCP 连接。

为什么通信仅对前8条消息有意义、之后从器件在没有主器件请求的情况下继续发送消息?  

您可以看到 Wireshark 记录的日志作为附件。

谢谢你。

此致、

Stefano

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

    Stefano、您好!

    我无法访问您共享的 Wireshark 日志。 请您再次分享一下、以便我们进行分析吗?

    此致
    归档开发

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

    您好、我上传了 Wireshark 日志作为电子邮件的答案、因为在这里我无法上传、我不知道原因

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

    Stefano、您好!

    如果可能、您能否在此处压缩 Wireshark 日志并共享 zip 文件?  

    此致
    归档开发

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

    e2e.ti.com/.../demo_5F00_ti.zip

    嗨、Archit Dev、

    在这里、您可以找到 Wireshark 日志的 zip 文件。

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

    Stefano、您好!

    原因是、由于会话是在 ForwardOpen 请求中构建的、因此主设备已将连接超时乘法器设置为8、这意味着、如果设备在此时间段后没有从主设备接收消息、它将得出超时并关闭连接的结论。

    此致
    Pourya  

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

    好的、谢谢。  

    在您看来、此选项可以在 eds 文件中或通过其他方式进行修改?

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

    以便主器件和从器件之间持续进行交换

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

    Stefano、您好!

    它取决于您正在使用的工具、例如、如果您正在使用 PLC、它应该可以轻松地进行配置。
    重要的问题是、为什么您的主器件停止发送 I/O 数据来保持通信活动? 我可以问您使用的是哪种工具吗?
    此外、我看到的另一个问题是、主设备不使用端口2222 来 传输 CIP I/O 数据、但它实际上应该根据规范。

    此致
    Pourya

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

    您好!

    我正在 我的 PC 上使用此软件:www.bihl-wiedemann.de/.../simulatore-master-ethernetip。

    但从我这边看、似乎是从器件对 CIP I/O 使用了错误的端口  

    例如、在第一个应答中、从属方的 src 端口不是2222。

    谢谢你

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

    Stefano、您好!
    很抱歉、您在 Wireshark 中回答正确。设备使用的是动态范围源端口 ID。设备的 IP 地址为192.168.1.10、对吗? 但该问题已在 SDK 09_02_00_15中得到解决。 您能否确认您使用的是 SDK 09.02.00.15?
    关于该工具、我尚未使用该工具、因此无法提供有关其停止通信的原因的输入。 您可以咨询软件提供商。
    您也可以使用 Hilscher EtherNet/IP 工具 进行评估、请注意版权声明。

    此致
    Pourya

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

    您好!  

    是的、我使用的是 SDK  09.02.00.15、IP 地址为192.168.1.10

    作为附件、您可以找到编译日志以及终端在执行期间打印的内容

    e2e.ti.com/.../8512.log.zip

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

    Stefano、您好!

    我仔细检查了、与源端口号相关的修复用于下一个版本、很抱歉混淆。 不过、这不会带来太多麻烦、除非您使用的软件严格期待来自端口2222的 CIP I/O 数据。
    您是否尝试过使用其他工具?

    此致
    Pourya

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

    您好!  

    是的、使用另一个工具它就可以工作了!

    谢谢!

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

    您好!

    我还有一个问题。

    你能给我一个例子、说明在循环交换期间数据变化时、回调函数的使用情况吗?

    特别是、我认为、当我更改实例的属性值时、回调函数由堆栈触发。

    可以帮助我解决这个问题吗? 始终参考 GENERIC_DEVICE 示例

    例如、如您在此屏幕中所见、我创建了类、实例和属性、但当我更改属性回调的值时、不会触发。

    我看到、无论是使用 EI_API_CIP_getattr_dint 函数的调试器还是使用 Hilsher EtherNet/IP 工具读取属性、该属性都会改变其值。

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

    尊敬的 Pourya:

    让我说一下、我是否必须打开另一个线程、或者您是否可以回答我在该线程中提出的最后一个问题。

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

    Stefano、您好!

    当从远程访问属性(例如通过 EtherNet/IP 工具)时、应触发回调。
    但是、当您使用内部函数(如  EI_API_CIP_getattr_dint)访问同一属性时、不会触发回调。  
    简而言之、回调仅在从远程端触发时使用。
    这是您正在经历的过程吗?

    此致
    Pourya  

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

    是的、但不会发生这种情况、同样如果 在运行循环中注释 EI_API_CIP_getattr_dint 函数也是如此。

    例如、当我以这种方式访问时、会触发回调。

    我能做错什么吗?

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

    尊敬的 Pourya:

    具体而言、我的问题是关于我在循环交换中发送的消息、我的预期是如果我在循环交换期间发送字节、则可以触发一次回调。

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

    Stefano、您好!  

    在您的代码中、仍然需要多进行一次调用才能注册您的回叫: EI_API_CIP_setInstanceAttrFunc。  
    如果您希望在循环 I/O 交换中进行回调、则应 考虑使用  EI_API_CIP_addAssemblyMemberCustomMaped  创建与属性关联的装配体时。  
    创建"正常"程序集在访问 链接属性时不会触发回调。

    请告诉我它是否回答了您的问题。

    此致
    Pourya

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

    尊敬的  Pourya:

    是的、它能够正常工作、非常感谢。

    还有一个问题。 为了支持32位标头运行/空闲模式、是否有特定设置、或者我必须增加4字节汇编的大小?

     

    再见

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

    Stefano、您好!

    是的、在 SDK 9.02.15中、为了支持32位标头运行/空闲、您应该增加汇编文件的大小(4个字节)。
    在下一个版本中、将引入另一个用于装配体的 API、通过该 API、您可以将装配体 格式设置为无模型(默认)或32位标头。  

    此致
    Pourya

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

    好的、谢谢!

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

    尊敬的  Pourya:

    您能举个例子来说明如何使用吗  EI_API_CIP_setInstanceAttrFunc  是否连接了 get/set 属性的回调函数? 因为示例和文档的功能原型不同?

    我对 GET_CALLBACK 的预期是后续内容:

    void attr_get_callback (EI_API_CIP_NODE_T * pCipNode_p、uint16_t classId_p、uint16_t instanceId_p、uint16_t attrId_p、uint16_t * len_p、 空* pvValue_p)

    uint16_t x = 0x0100;
    memcpy (pvValue_p、&x、2);
    * len_p = 2;

    }

    我能做错什么吗? 会触发回调、但值不获取、而 Wireshark 日志属性值无效

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

    Stefano、您好!

    文档中也提供了正确的函数原型、例如 Get 回调:

    API 文档中给出的示例具有误导性、我们将纠正在未来版本中、回调函数(GET 和 SET)应返回 uint32_t 类型值、0表示成功。  
     更多详细信息、请参阅 EI_API_CIP_SAttr_t 结构。

    除此之外、您的代码似乎没问题、(对于 Get、您应该更新长度和值、不要忘记在成功时返回0)。

    此致
    Pourya

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

    尊敬的  Pourya:

    我可以举一个有关使用 DHCP 的例子吗? 因为我将 DHCP 设置为 CONFIGURATION_METHOD、但似乎没有获得有效的 IP

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

    尊敬的 Pourya:

    我看到该模块通过 DHCP 获得有效的 IP 地址、并且在 Hilsher 工具上的 IP 是正确的、但在调试中仍保留旧的 IP 地址。

    为什么会出现这种行为? 我是否必须在某种结构中设置参数?

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

    Stefano、您好!

    有一个出厂默认设置、您可以根据需要进行配置、可以在 appRst.c 中找到该设置:

    如果收到复位请求类型1、器件将复位为此出厂默认设置。

    您能否详细说明一下、"在调试过程中仍保留旧 IP 地址"的含义是什么?

    此致
    Pourya

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

    尊敬的  Pourya:

    是的、但是如果我将 DHCP 设置为配置方法、我会看到:

    -  

    192.168.1.3是 DHCP 服务器的 IP 地址、而192.168.1.4是 EtherNet/IP 模块的 IP 地址

    在 Hilsher Tool 上、我采用了这种配置、效果不错

    但在调试中、例如使用此函数 ipaddr 为0

    要使用 DHCP、我已通过这种方式修改了示例:

    EI_APP_RST_adapterFactoryDefaultValues2等于您的映像

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

    尊敬的  Pourya:

    另在示例中、如果我在 Launchpad 上启用 DHCP、会看到 IP 为192.168.1.5 (与官方板子的 MAC 地址不同)

    但此变量始终等于192.168.1.10 (默认 IP 地址)

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

    Stefano、您好!

    当您更改 IP 设置并执行正常复位/下电上电时、将使用最后的更改、而不是"出厂默认值"、仅当您通过复位服务(类型1)执行出厂复位或包含最新更改的非易失性存储器已损坏时、才会使用默认设置、因此应应用出厂默认值。

    关于 EI_API_ADP_getIpAddr 函数在使用 DHCP 时不返回有效值的问题、您是正确的、我们将跟踪此问题。

    此致
    Pourya

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

    尊敬的 Pourya:

    关于  EI_API_ADP_getIpAddr 函数的问题、您能告诉我问题何时会得到解决吗? 因为我要开发一个新模块、这个函数非常重要。

    谢谢你

    此致。

    Stefano

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

    Stefano、您好!

    很抱歉耽误您的响应。 该问题位于我们的跟踪列表中 、很可能会在下一个版本中得到解决。
    但是、我无法提供下一个发布的日期。
     
    此致、
    Pourya

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

    尊敬的  Pourya:

    好的、谢谢。

    只是一个问题。  在 for (;;)周期或回调中使用 EI_API_CIP_setattr_word (如上一个循环数据交换问题所述)之间有何差异? 除了使用回调之外、您必须构建缓冲区、以便使实例和属性处于正确的位置。

    此致、

    Stefano

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

    Stefano、您好!

    当您可以快速提供负载而不会在回调中阻止(快速/同步响应)时、更适合使用回调方法。 使用  EI_API_CIP_setattr_xxx API 更适合对循环数据进行异步更改、例如在多任务场景中。
    请注意、使用回调方法时、请勿在回调中运行繁重的代码、这会阻止堆栈的运行时间并导致不稳定。

    此致、
    Pourya

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

    尊敬的  Pourya:

    关于 在从主器件到从器件的循环交换期间发送的数据、我们是否必须使用它  EI_API_CIP_addAssemblyMemberCustomMaped  获取数据、还是有其他方法?

    此致、

    Stefano

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

    Stefano、您好!

    反电动势波形  EI_API_CIP_addAssemblyMemberCustomMaped 仅在回调方法中。 如果要使用"轮询"方法、可以使用  EI_API_CIP_setattr_xxx 和 EI_API_CIP_getattr_xxx API。 请注意、在"轮询"方法中、您应使用正常方法  EI_API_CIP_addAssemblyMember API  将程序集链接到您的属性。
    使用轮询方法时、循环数据交换会自动读取/写入链接的属性、您只需通过  EI_API_CIP_getattr_xxx 和 EI_API_CIP_setattr_xxx   API 来收集/更新它们。
    使用回调方法时、应直接提供/使用数据。

    此致、
    Pourya

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

    尊敬的  Pourya:

    关于带有属性回调的非循环集/获取、是否有办法在不创建类和实例的情况下通过回调获取/设置属性? 因为我的数据集很大、并且在创建类和实例时会出现 EI_API_CIP_eERR_DIRECT_FULL 错误。  

    我可以创建的类和实例是否有限制?

    此致

    Stefano

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

    Stefano、您好!

    属性属于类或类的实例、它不能作为独立实体存在。 不过,您可以在 app.c 的初始化阶段增加词典大小,在 main 函数中,您可以看到以下行:

    默认情况下、字典大小为256、只要有足够的 RAM、就可以根据需要增加字典大小。 请注意、大约70个 CIP 对象是由堆栈在内部创建和使用的。 因此、 maxInstanceNum - 70是可供您使用的实际对象数。

    此致、
    Pourya

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

    尊敬的  Pourya:

    关于冗余(PRP/HSR)、您是否可以建议我实现此功能的 TI 栈的一些详细信息?

    特别是关于 DLR。

    此致

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

    您是否在寻找 AM243x 上的 EtherNet/IP 解决方案支持的冗余协议? 如果是、我们的示例中已经支持设备级环网(DLR)协议。

    有关该设计的更多详细信息可在此处的 ICSS DLR 设计文档中找到: https://software-dl.ti.com/processor-industrial-sw/esd/ind_comms_sdk/am243x/09_02_00_15/docs/api_guide_am243x/ICSS_DLR_DESIGN.html  

    如果您有任何其他问题、敬请告知。

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

    您好!

    非常感谢。  

    现在、我遇到了从另一个端口到达 EtherNet/IP 设备的问题。  

    在我的器件上有两个 PHY:  

    - DP83826E (RJ45)

    - TJ1100 (100 Base T1)

    如果我尝试使用  DP83826E 通过 RJ45端口到达电路板 、它可以正常工作、而如果我尝试从 TJ1100到达模块、模块没有应答。

    两个 PHY 均从堆栈中检测到(如所示)、并且都正常运行、但我无法通过其他端口到达模块:



    你有什么建议吗?

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

    Stefano、您好!

    您要尝试执行的测试是什么? 是否为 Ping/EIP 显式消息? TJ1100 PHY 上配置了什么速度和双工设置?

    下面是 ICSS 调试指南的链接、该指南 涵盖了使用 ICSS-EMAC 时遇到的最明显的用例和调试场景: https://software-dl.ti.com/processor-industrial-sw/esd/ind_comms_sdk/am243x/09_02_00_15/docs/api_guide_am243x/ICSS_EMAC_DEBUG_GUIDE.html 

    您能否使用本指南来检查链路状态/接收/发送(按此顺序)是否在该 PHY 上按预期工作? 这可以帮助我们指出问题在哪一级存在?  

    此致
    归档开发

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

    您好!

    似乎未检测到来自 TJ1100 PHY 的模块流量、例如 ping 或 EIP 消息。  

    第一件事我可以看到、如果我单独读取 DP83826的寄存器、则会调用 PRU_PHY_Command 函数、而使用 TJ1100时则不会发生。  

    现在、我将尝试采纳您的建议。

    此致

    Stefano

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

    Stefano、您好!

    感谢您的更新。  

    请告知我们您的调查结果。

    此致
    归档开发

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

    您好!

    作为您分享的第一个指导要点、我遇到了这个问题:

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

    Stefano、您好!

    您可以尝试以下操作吗?

    "可能是链路中断配置错误或 MDIO 没有触发中断。 在这种情况下、用户需要在 ISR 中放置一个断点 ICSS_EMAC_linkISR 、并且断开或连接任一端口上的线缆。 断点应该会被命中、如果不是这样、那么中断配置就会有一些问题。"

    此致
    归档开发

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

    您好!

    好的、这个中断似乎没有被触发、将断点置为反汇编。

    此致。

    Stefano

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

    Stefano、您好!

    这表明 MDIO 配置中存在潜在问题。

    是否使用 MDIO 手动模式?

    此致
    归档开发

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

    Stefano、您好!

    接下来的问题是、您能否告诉我您正在使用的 ICSSG 实例?

    此致
    归档开发

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

    您好!

    我使用的是 ICCS0和 MDIO 手动模式。