工具与软件:
您好!
我在 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