一文详述CAN及CANopen协议,万字内容,目录清晰,需耐心阅读

 关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”,即可获得canoe入门到精通电子书和INCA软件安装包(不带授权码)下载地址。

目录

1 CAN概述

1.1 什么是CAN

1.2 CAN的历史

1.3 CiA组织

1.4 CAN的OSI模型

1.5 CAN的特性

1.6 CAN的拓扑结构

1.7 CAN的数据帧

1.8 常见的CAN应用层协议

2 CANopen概述

2.1 什么是CANopen

2.2 CANopen网络模型

2.3 CANopen常见规范

2.4 CANopen对象字典

2.5 CANopen通讯标识符

3 CANopen协议概述

3.1 常用术语

3.2 通讯状态机

3.3 通讯报文

4 CANopen管理报文

4.1 NMT模块控制报文

4.2 NMT节点保护报文

4.3 心跳报文

4.4 NMT BOOT-UP启动报文

5 CANopen紧急报文

6 SDO(服务数据对象)通讯

6.1 SDO功能

6.2 SDO的通讯对象标识符(COB_ID)

6.3 SDO读报文

6.4 SDO读报文示例

6.5 SDO 写报文

6.6 SDO写报文示例

6.7 SDO通讯失败报文

7 PDO(过程数据对象)通讯

7.1 PDO功能

7.2 PDO通讯参数

7.3 PDO通讯对象标识符(COB_ID)

7.4 PDO的传输类型

7.5 PDO映射

7.6 PDO报文

7.7 PDO和SDO总结

9 同步报文

9.1 同步报文的功能

9.2 同步报文的数据帧

9.3 同步报文的传输类型

9.4 同步循环周期与窗口时间

9.5 伺服周期性同步位置模式(CSP)原理

9.6 同步周期对运动控制性能的影响

10 电子数据表格(EDS)


正文

1 CAN概述

1.1 什么是CAN

Controller Area Network,控制器局域网,是国际上应用最广泛的现场总线之一。

20世纪80年代初德国Bosch公司为解决现代汽车中众多控制单元、测试仪器之间的实时数据交换而开发的一种串行通信协议。

1.2 CAN的历史

  • 1983年,Bosch开始研究车上网络技术。
  • 1986年,Bosch在SAE(美国汽车工程师学会)大会公布CAN协议。
  • 1987年,Intel和Philips先后推出CAN控制器芯片。
  • 1991年,Bosch颁布CAN 2.0技术规范,CAN2.0包括A和B两个部分。
  • 1991年,CAN总线最先在Benz S系列轿车上实现。
  • 1993年,ISO颁布CAN国际标准ISO-11898。
  • 1994年,SAE颁布基于CAN的J1939标准。
  • 2003年,Maybach发布带76个ECU的新车型(CAN,LIN,MOST)。
  • 2003年,VW发布带35个ECU的新型Golf。

1.3 CiA组织

1992年,一些公司创建了非盈利性组织CAN in Automation(CiA),以提供与CAN相关的技术、产品和市场营销方面的信息。此举旨在提升CAN的形象,并且为CAN协议未来的发展铺平道路。到2020年年初,已有670家公司加入CiA组织。

1.4 CAN的OSI模型

七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。

从OSI网络模型的角度来看同,现场总线网络一般只实现了第1层(物理层)、第2层(数据链路层)、第7层(应用层)。因为现场总线通常只包括一个网段,因此不需要第3层(传输层)和第4层(网络层),也不需要第5层(会话层)第6层(描述层)的作用。

CAN只定义物理层和数据链路层,没有规定应用层。

数据链路层:包括介质访问控制(MAC)层和逻辑链路控制(LLC)层,关键是形成数据帧。

物理层:有时也称物理接口,是实现物理连接的功能描述和执行连接的规程,提供用于建立、保持和断开物理连接的机械、电气、功能和规程的条件,物理层有四个重要特性:

  • 机械特性——连接器、引脚数、引脚排列。
  • 电气特性——信号电平高低、阻抗和阻抗匹配、传输速度和距离。
  • 功能特性——信号线(数据、控制、地线)的功能分配和确切定义。
  • 规程特性——各信号线的工作规则和时序。

1.5 CAN的特性

采用双线差分信号,两根线构成总线,CAN High与CAN Low,这两根线之间的电位差可以对应两个不同的逻辑状态进行编码。

静态时均是2.5V左右,此时状态表示为逻辑1,也可以叫做隐性位,用CAN_H比CAN_L高表示逻辑0,称为显性位,此时通常电压值为CAN_H=3.5V和CAN_L=1.5V,竞争时显位优先。

使用双绞线作为总线介质时,总线长度≤40米, 传输速率可达1Mbps。

协议本身对节点的数量没有限制,实际应用中节点数目受网络硬件的电气特性所限制,总线上节点的数量可以动态改变,广播发送报文,报文可以被所有节点同时接收。

  • CAN是多主站结构。
  • 每个报文的内容通过标识符识别,标识符在网络中是唯一的:
  • 标识符描述了数据的含义;
  • 某些特定的应用对标识符的分配进行了标准化。
  • 根据需要可进行相关性报文过滤。

03-19
### CANopen Protocol Overview CANopen 是一种基于 Controller Area Network (CAN) 的高层通信协议和设备配置文件规范,广泛应用于嵌入式系统中的实时数据传输。它由 CiA (CAN in Automation) 组织定义并维护,适用于工业自动化、医疗设备、汽车电子等领域[^1]。 #### 协议结构 CANopen 提供了一种标准化的方法来实现网络节点之间的互操作性。它的核心组件包括对象典(Object Dictionary),用于存储参数和服务;服务数据对象(SDOs),允许访问远程节点的对象典;过程数据对象(PDOs),支持快速周期性的数据交换;以及同步报文(Sync Message) 和时间戳(Time Stamp)。 #### 主要特点 - **简单性和灵活性**: CANopen 使用有限数量的消息类型完成复杂的功能求。 - **强大的错误处理机制**: 它内置多种错误检测方法以提高系统的可靠性。 - **广泛的行业标准支持**: 许多领域都有特定的应用层扩展或补充说明文档可用[^2]。 ### Applications of CANopen 由于其高效的数据管理和良好的兼容性表现,CANopen 被成功部署于多个实际应用场景当中: 1. **Industrial Machinery** 工厂内的各种机械设备常采用此技术来进行状态监控与控制命令下发等工作流程管理. 2. **Medical Equipment** 高精度医疗器械内部各模块间通过 CANopen 实现精确协调运作. 3. **Automotive Systems** 尽管现代车辆更多倾向于 FlexRay 或 Ethernet 技术路线,但在某些子系统里仍然可见到 CANopen 的身影,比如电动车窗控制系统等相对独立的小型化单元设计之中[^3]. ```python import canopen network = canopen.Network() network.connect(bustype='socketcan', channel='vcan0') node_id = 5 node = network.add_node(node_id, 'path/to/eds/file.eds') node.nmt.state = 'OPERATIONAL' # Example SDO read/write operation value = node.sdo['Some Object'][subindex].raw print(f"The value is {value}") new_value = 42 node.sdo['Another Object'][subindex].raw = new_value ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值