0

我试图弄清楚,我可以通过写入1010.01CANopen 对象字典中的存储索引来存储当前配置的状态。我尝试在运行前状态下执行此操作,但出现此错误

Time:    2914.034 SDO slave:1 index:1010.01 error:08000022 Data cannot be transferred or stored to the application because of the present device state
uint32_t store_password =  0x65766173;
ret = ec_SDOwrite(slave, 0x1010, 0x01, FALSE, sizeof(store_password), &store_password, EC_TIMEOUTTXM);

值得注意的是,我将 CANopen over EtherCAT 与 SOEM 库一起使用。

4

1 回答 1

0

这听起来像是不合规的行为。据我所知,CANopen 没有指定写入 1010h 时必须处于哪种状态。

我建议始终在运行前状态下执行此操作,因为如果从运行状态执行(并且可能发生 SDO 超时),写入闪存等可能会很耗时并且会中断实时行为。


与问题无关,使用它会更具可读性:

const char store_password [4] = "save"; // null termination purposely ignored
... sizeof(store_password), store_password, ...

这也消除了当前代码中的字节序依赖性。

于 2020-08-10T13:28:15.447 回答