c-canopen对象字典中的存储参数(1010)可以写入到什么设备状态



我正试图弄清楚,通过写入CANopen对象字典中的存储索引1010.01,我可以在什么状态下存储当前配置。我试着在运转前的状态下做,但出现了这个错误

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库。

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

我建议始终在预操作状态下执行此操作,因为如果从操作状态执行(并且可能会发生SDO超时(,那么写入flash等可能会耗费时间并中断实时行为。


与问题无关,使用以下内容会更可读:

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

这也删除了当前代码中的endianes依赖项。

最新更新