2个不稳定版本

0.2.0 2024年1月17日
0.1.0 2024年1月17日

#4 in #conn

MIT许可证

52KB
1.5K SLoC

canopeners

不完整的但易于使用的Rust中CANOpen标准的实现。

示例

所有示例都是阻塞的。使用conn.set_{read_write}_timeout设置超时。

发送单个消息

Conn::new("vcan0").map(|conn| {
    let nmt = Nmt::new(canopeners::NmtFunction::StartRemoteNode, 10);
    conn.send(&Message::Nmt(nmt)).unwrap();
})

向远程节点上的对象字典写入字节

Conn::new("vcan0").map(|mut conn| {
    conn.sdo_write(
    /* remote node id */ 0x10, 
    /* index */ 0x1000,
    /* sub index */ 1,
    /* data, can be any length */ &[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    .unwrap();
})

从远程节点上的对象字典中读取字节

Conn::new("vcan0").map(|mut conn| {
    let res = conn.sdo_read(
    /* remote node id */ 0x10, 
    /* index */ 0x1000,
    /* sub index */ 1)
    .unwrap();
    dbg!(res);
})

构建

nix develop
cargo build

如果您想使用系统cargo,只需执行cargo build即可

测试

setup_vcan.sh设置虚拟CAN总线。 tests/依赖于此

待办事项

  • 所有消息类型的枚举(不能将impl trait用作函数返回类型)
  • 发送/接收SDO
  • 通过vcan的状态无关示例
  • 分段SDO
  • 易于发送/接收SDO的陶瓷包装器
  • 完成用binrw替换手动位操作
  • package.nix
  • 将simple.rs示例转换为测试
  • 修复cargo警告
  • 修复clippy lint
  • 为所有消息类型添加send_acked
  • 节点根据同步消息发送TPDOs
  • 扩展ID支持

依赖项

~3.5MB
~73K SLoC