当前位置: 首页 > news >正文

canopen 初体验

设置主站can0

$ sudo ip link set can0 type can restart-ms 100
$ sudo ip link set can0 type can bitrate 500000 sample-point 0.875
$ sudo ip link set can0 type can berr-reporting on
$ sudo ifconfig can0 txqueuelen 1000
$ sudo tc qdisc add dev can0 root handle 1: pfifo
$ sudo ifconfig can0 up

设置 CAN 接口的自动重启时间(100 毫秒)

$ sudo ip link set can0 type can restart-ms 100
  • 作用:设置 CAN 接口在总线关闭(bus-off)状态后,自动恢复的时间间隔。

  • restart-ms 100:表示 100 毫秒后自动尝试恢复通信。

  • 适用场景:适用于 CAN 总线短暂异常时自动恢复,避免程序中断。

设置 CAN 接口的比特率和采样点

$ sudo ip link set can0 type can bitrate 500000 sample-point 0.875
  • 作用:配置 CAN 总线的通信速率和采样点。

  • bitrate 500000:比特率为 500 kbit/s(CAN 总线通信速度)。

  • sample-point 0.875:采样点为总位时间的 87.5%,用于确定在位时间的哪个点采样信号。

  • 注意:这两个参数必须与总线上的其他节点一致,否则无法通信。

启用错误报告功能

$ sudo ip link set can0 type can berr-reporting on
  • 作用:启用 CAN 控制器的错误计数器报告功能。

  • 用途:可以监控 CAN 总线上的通信错误(如错误帧数量),用于调试通信问题。

设置 CAN 接口的发送队列长度

$ sudo ifconfig can0 txqueuelen 1000
  • 作用:设置 CAN 接口发送队列的长度为 1000 个数据包。

  • 默认值通常为 10,增大该值可提升高负载下数据包不丢包的能力。

  • 适用场景:适用于高频率 CAN 通信时防止发送缓冲区溢出。

添加排队规则(qdisc)为优先 FIFO 队列

$ sudo tc qdisc add dev can0 root handle 1: pfifo
  • 作用:为 CAN 接口添加一个 优先级 FIFO(先进先出)排队规则。

  • pfifo:表示使用优先级队列的 FIFO 队列规则。

  • 用途:用于控制 CAN 数据包的发送顺序,适用于实时性要求高的系统。

启动 CAN 接口

$ sudo ifconfig can0 up
  • 作用:启动 can0 接口,使其进入工作状态。

candump调试can0

$ sudo candump can0
can0  701   [1]  7F
can0  701   [1]  7F
can0  701   [1]  7F
can0  701   [1]  7F
can0  701   [1]  7F
can0  701   [1]  7F
can0  701   [1]  7F

这是一个 CANopen 心跳(Heartbeat)帧。

逐项解析:

  • can0: 接口
  • 701: 11 位标准标识符 0x701 = 0x700 + 0x01
    基址 0x700 表示功能码 0xE (NMT Error Control: Heartbeat / Node Guarding)
    节点 ID = 0x701 & 0x7F = 0x01
  • [1]: 数据长度 1 字节 (Heartbeat 固定 1 字节)
  • 数据 7F: 表示该节点当前 NMT 状态
    0x00 = Boot-up (只发一次)
    0x04 = Stopped
    0x05 = Operational
    0x7F = Pre-operational ← 当前值

结论: 节点 1 处于 Pre-operational 状态,并按其对象 0x1017(Producer Heartbeat Time) 周期发送心跳。

CANFestival

如下日志为CANFestival的输出,GCIO是读取DI的信息。

$ sudo ./master can0
Starting on can0 with node id = 100to node : 0
Send_NMT cs :: 129
Master starting on can0
Node 1 state is now  : Pre_operationalto node : 1
Send_NMT cs :: 1
Node 1 state is now  : Operational
GCIO: 0x1
GCIO: 0x1
GCIO: 0x1
GCIO: 0x1
GCIO: 0x0
GCIO: 0x0
GCIO: 0x0
GCIO: 0x0
GCIO: 0x1
http://www.dtcms.com/a/339352.html

相关文章:

  • 【qml-4】qml与c++交互(类型多例)
  • 配置nginx以支持http3
  • rabbitmq发送的延迟消息时间过长就立即消费了
  • Maven的三种项目打包方式——pom,jar,war的区别
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 股指本周想法
  • 区块链 + 域名Web3时代域名投资的新风口(下)
  • 使用 Docker 安装长安链管理平台 + 部署长安链
  • DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
  • Transformer实战(13)——微调Transformer语言模型用于文本分类
  • 操作系统:多线程、进程管理、内存分配、任务调度等
  • Gemini CLI 详细操作手册
  • ECC升级S4,AVL自定义GUI 状态无法显示全选和取消全选按钮
  • Matplotlib数据可视化实战:Matplotlib基础与实践-快速上手数据可视化
  • 学习嵌入式的第二十一天——数据结构——链表
  • 08.19总结
  • 豆包1.5轻量版 vs Gemini 2.5闪存版:生成5000字深度文章,哪个模型更合适?
  • 玳瑁的嵌入式日记D20-08019(数据结构)
  • audio接口的技术发展
  • Java技术总监的成长之路(技术干货分享)
  • 昆仑万维SkyWork AI技术发布周:多模态模型的全面突破
  • 记一次 .NET 某自动化智能制造软件 卡死分析
  • 一条 SQL 语句在 MySQL中的执行过程。
  • Python网络爬虫全栈教程 – 从基础到实战
  • 【INOUT端口】
  • HarmonyOS 中的 setInterval的基本使用
  • openssl生成自签名证书的方法
  • 飞算JavaAI颠覆传统:SpringBoot项目开发效率革命实录
  • 基于uni-app的成人继续教育教务管理系统设计与实现
  • 0.开篇简介