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 中的 I&M save 存在问题

Guru**** 2462530 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1479876/am2432-problem-with-i-m-save-in-profinet

器件型号:AM2432

工具与软件:

您好!

我在 Profinet 中保存 I&M 数据时遇到问题。
我已声明回调 PN_APP_IOD_cbStoreRemaMem 如下所示:

uint32_t PN_APP_IOD_cbStoreRemaMem(PN_API_IOD_Handle_t *const pnHandle, PN_API_IOD_RemaDataType_t type, const uint32_t instance, const uint32_t memSize, uint8_t *const srcMem)
{

    switch(type) {

    [...]

    case PN_API_IOD_RemaDataIm1:
        DebugP_log("Save remanent memory indicated. Type: IM1, instance: %u\r\n", instance);

        memset((void *) &myParameters.profinetIM1[instance], ' ', sizeof(profinetIM1_t));
        memcpy((void *) &myParameters.profinetIM1[instance], srcMem, memSize);

        SaveParametersToFlash(); //Function to write my parameters in flash
        PN_API_IOD_dataStoreComplete(pnHandle, sizeof(myParameters));

        break;

    case PN_API_IOD_RemaDataIm2:
        DebugP_log("Save remanent memory indicated. Type: IM2, instance: %u\r\n", instance);

        memset((void *) &myParameters.profinetIM2[instance], ' ', sizeof(profinetIM2_t));
        memcpy((void *) &myParameters.profinetIM2[instance], srcMem, memSize);

        SaveParametersToFlash(); //Function to write my parameters in flash
        PN_API_IOD_dataStoreComplete(pnHandle, sizeof(myParameters));

        break;
        
    case PN_API_IOD_RemaDataIm3:
        DebugP_log("Save remanent memory indicated. Type: IM3, instance: %u\r\n", instance);

        memset((void *) &myParameters.profinetIM3[instance], ' ', sizeof(profinetIM3_t));
        memcpy((void *) &myParameters.profinetIM3[instance], srcMem, memSize);

        SaveParametersToFlash(); //Function to write my parameters in flash
        PN_API_IOD_dataStoreComplete(pnHandle, sizeof(myParameters));

        break;

    case PN_API_IOD_RemaDataIm4:
        DebugP_log("Save remanent memory indicated. Type: IM4, instance: %u\r\n", instance);

        memset((void *) &myParameters.profinetIM4[instance], ' ', sizeof(profinetIM4_t));
        memcpy((void *) &myParameters.profinetIM4[instance], srcMem, memSize);

        SaveParametersToFlash(); //Function to write my parameters in flash
        PN_API_IOD_dataStoreComplete(pnHandle, sizeof(myParameters));

        break;
        
    [...]
    
    }

    return PN_API_OK;
}

但是、如果我尝试编辑 I&M 信息(例如、使用 Proneta 工具)、我可以从调试输出中看到、回调已被调用、我可以正确保存 I&M1、但根本不会调用保存 I&M2和 I&M3的回调。 然后 Proneta 不再显示 I&M 信息、我需要重新启动设备才能看到这些信息。 重新启动时、我看到只有 I&M1保存在闪存中、而其他 I&Ms 实际上没有保存在闪存中。
但是、如果我尝试使用演示、I&M 管理工作正常。
我可能会做错什么?

谢谢!

此致、

Andrea

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

    安德烈、您好!

    您是否可以 尝试仅存储 IM2数据、然后继续重新启动 DUT 并检查是否已保存。 您可以对其他 IM 数据执行相同的过程 、并检查是否保存至少一个 I&M 信息。
    此外、由于 PROFINET 堆栈专家目前不在办公室、敬请期待对进一步问题的答复延迟。

    此致、
    Laxman

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

    尊敬的 Laxman:

    即使是写入其他 I&M 数据、行为也是相同的。 但是,我后来通过创建一个任务来完成异步闪存写入,就像在演示中那样,所以这可能是我的函数 SaveParametersToFlash ();这需要太多的时间。

    此致、

    Andrea