【问题标题】:CANOPEN SYNC timeout after enable Operation启用操作后 CANOPEN SYNC 超时
【发布时间】:2021-04-27 16:09:43
【问题描述】:

我是 CANOPEN 的新手。我写了一个程序,通过 PDO1 读取实际位置(默认是状态字 + 实际位置)。

void canopen_init() {
// code1 setup PDO mapping
nmtPreOperation();
disablePDO(PDO_TX1_CONFIG_COMM);
setTransmissionTypePDO(PDO_TX1_CONFIG_COMM, 1);
setInhibitTimePDO(PDO_TX1_CONFIG_COMM, 0);
setEventTimePDO(PDO_TX1_CONFIG_COMM, 0);
enablePDO(PDO_TX1_CONFIG_COMM);

setCyclePeriod(1000);
setSyncWindow(100);

//code 2: enable OPeration
readyToSwitchOn();
switchOn();
enableOperation();    
motionStart();

// code 3
nmtActiveNode();
}


int main (void) {
  canopen_init();   
  while {
    delay_ms(1);
    send_sync();
  }
} 

如果我删除“代码 2”(伺服处于 Switch_on_disable 状态),我可以在每次同步发送时读取位置。但如果我使用“代码 2”,驱动程序会出现错误“同步帧超时”。我不知道驱动程序有问题或我的代码有问题。我的代码有问题吗?谢谢!

【问题讨论】:

  • 这都是属于某个CANopen协议栈的高层API,所以有点难说。它是哪个堆栈? CANopen 的同步机制主要用于让 PDO 在收到同步消息后做出响应,或者在获得同步后的指定时间内做出响应。或者在实时系统中,您可以简单地将其用作简单的系统时钟,并在获得同步的位置激活输出。无论如何,我想您应该检查这些“1000”和“100”值的含义。 CANopen OD 与单位不一致 - 有时表示毫秒,有时表示其他时间单位。
  • 我阅读了制造商的文件。它说设置传输类型为1-240并发送同步。如文档所述,同步周期和同步窗口时间都以微秒为单位

标签: c embedded can-bus canopen


【解决方案1】:

我不知道这是什么协议栈或它是如何工作的,但是这些:

setCyclePeriod(1000);
setSyncWindow(100);

可能对应于这些 OD 条目:

  • 对象 1006h:通信周期 (CiA 301 7.5.2.6)
  • 对象 1007h:同步窗口长度 (CiA 301 7.5.2.7)

它们分别为同步 PDO 设置 SYNC 间隔和时间窗口。后者被标准描述为:

如果同步窗口长度到期,所有同步的TPDO都可以被丢弃,并且可以发送EMCY消息;在接收到下一个 SYNC 消息之前,所有同步 RPDO 都可能被丢弃。同步 RPDO 处理通过下一个 SYNC 消息恢复。

现在,如果您将此同步时间窗口设置为 100 微秒,但有一个草率的忙等待延迟 delay_ms(1),那么这不会累加。如果将零写入对象 1007h,则禁用同步窗口功能。我想setSyncWindow(0); 可能会这样做。您可以尝试这样做以查看是否是问题所在。如果是这样,您必须放弃忙碌等待,转而使用适当的硬件计时器,一个用于 SYNC 周期,一个用于 PDO 超时(如果您必须使用该功能)。

【讨论】:

  • 我使用 CANOPEN 402,因为我在 SYNC 之后立即发送 PDO,所以我认为 100us 就足够了。我试过 setSyncWindow(0) 和 setSyncWindow(1000) ;但同样,SYNC 超时仍然发生。结果如下:在驱动程序显示警报“同步帧超时”之前,同步发送了 160 次,TX PDO 发送回了 112 次​​span>
  • @HoanTV 所以问题可能不在于 SYNC 生产者,而在于其他节点?
  • 设置syncWindow(100)后,发送900次同步时txpdo更新800次。我正在尝试寻找其他伺服器进行测试。
【解决方案2】:

问题已解决。由于伺服器产生的大量 EMI,使我的控制器无法正常工作。隔离后,效果很好:)!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2016-11-08
    • 2013-07-14
    相关资源
    最近更新 更多