器件型号: AM2434
尊敬的专家:
我们观察到 EtherCAT 应用程序出现了一些意外的回调行为。
我们正在使用 Ind Comms SDK 11.00.00.13 在 LP-am243x LaunchPad 上进行开发。
应用环境
在我们的应用中、我们设置了一个 FreeRTOS 任务、以使用当前 2ms 的任务延迟定期调用 EtherCAT 主循环。 task 函数如下所示:
for(;;)
{
EC_API_SLV_mainLoopCyclic();
vTaskDelay(2);
}
此任务的优先级设置较低、为 PDI/同步任务。
我们实现了主应用程序逻辑,在另一个函数中读取/写入 PDO 数据,我们通过 EC_API_SLV_cbRegisterUserApplicationRun() 注册到堆栈。
该器件连接到运行 TwinCAT 的 Beckhoff PLC。 主 EtherCAT 任务在 1ms 周期时间内运行、并设置为 SM 或 DC 同步模式。
预期的行为
根据您的文档和类似的其他 E2E 帖子 (https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1417335/am6442-ethercat-subdevice-stack-specify-trigger-of-application-function)、在 SM 和 DC SYNC 模式下、我们预计在 1ms 的周期内调用应用程序运行回调。
在 SM SYNC 上、我们期望从 PDI 任务调用它、在 DC SYNC 上、我们期望从 sync0 任务调用它。 无论哪种方式、它都应独立于主循环周期时间。
观察到的行为
使用 DC SYNC(仅启用 sync0)时、我们可以观察到预期的行为:由于任务延迟、主循环以 2ms 的周期运行、并且在 1ms 的周期内调用应用程序运行回调。
但是、切换到 SM-SYNC 模式时该行为会变得很奇怪:
在这里、应用程序回调仅每 2ms 调用一次。
我们曾尝试更改 EtherCAT 周期时间以及更改主循环任务延迟时间、似乎在 SM 同步模式下调用应用回调的速度无法快于主循环运行的速度。
当更改 EtherCAT 周期时间比主环路周期时间慢时、SM 和 DC SYNC 之间没有预期的差异。
下面汇总了结果:
| 同步模式\设置 | 主循环延迟:1ms EtherCAT 周期时间:1ms |
主循环延时:2ms EtherCAT 周期时间:1ms |
主循环延时:2ms EtherCAT 周期时间:4ms |
| 直流同步 | 回调周期:1ms | 回调周期:1ms | 回调周期:4ms |
| SM 同步 | 回调周期:1ms |
回调周期:2ms | 回调周期:4ms |
在 SM-SYNC 中应用运行回调是否以某种方式依赖于主循环执行、这 是预期的行为吗?
很高兴听到您对此的见解!
此致
Stefan