从 OSI 的 7 层网络模型的角度来看同,CAN(Controller Area Network)现场总线仅仅 定义了第 1 层(物理层,见
ISO11898-2 标准)、第 2 层(数据链路层,见 ISO11898-1 标准); 而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件(Software) 或固件(Firmware),只要了解如何调用相关的接口和寄存器,即可完成对 CAN 的控制。
基本每个行业的 CAN 应用,都需要一个高层协议来定义 CAN 报文中的 11/29 位标识符、8 字节数据的使用。但在 CAN 总线的工业自动化应用中,由于设备的互通互联 的需求越来越多,所以需要一个开放的、标准化的高层协议:这个协议支持各种 CAN 厂商 设备的互用性、互换性,能够实现在 CAN 网络中提供标准的、统一的系统通讯模式,提供 设备功能描述方式,执行网络管理功能。
CANopen 对象字典(OD: Object Dictionary)是 CANopen 协议最为核心的概念。所谓的 对象字典就是一个有序的对象组,描述了对应 CANopen 节点的所有参数,包括通讯数据的
存放位置也列入其索引,这个表变成可以传递形式就叫做 EDS 文件(电子数据文档 Electronic Data Sheet)。
每个对象采用一个 16 位的索引值来寻址,这个索引值通常被称为索引,其范围在 0x0000 到 0xFFFF 之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个 8 位 的索引值,这个索引值通常被称为子索引,其范围是 0x00 到 0xFF 之间。
它负责CAN 网络上的初始化、配置和故障处理。节点控制:
节点上线报文:任何一个 CANopen 从站上线后,为了提示主站它已经加入网络(便于热插拔),或者
避免与其他从站 Node-ID 冲突。这个从站必须发出节点上线报文(boot-up),如图 6.3 所示, 节点上线报文的 ID 为 700h+Node-ID,数据为 1 个字节 0。生产者为 CANopen 从站。
PDO 分为 TPDO(发送 PDO)和(接收 RPDO),发送和接收是以
CANopen 节点自身 为参考(如果 CAN 主站或者其他从站就相反)。TPDO
和 RPDO 分别有 4 个数据对象,每
种数据对象就是 1 条 CAN 报文封装。
PDO 通信参数,定义了该设备所使用的 COB-ID、传输类型、定时周期等。RPDO 通讯 参数位于对象字典索引的 1400h to 15FFh,TPDO 通讯参数位于对象字典索引的
1800h to 19FFh。每条索引代表一个 PDO 的通信参数集,其中的子索引分别指向具体的各种参数。
SDO 主要用于 CANopen 主站对从节点的参数配置。服务确认是 SDO 的最大的特点, 为每个消息都生成一个应答,确保数据传输的准确性。
紧急事件对象(Emergency),是当设备内部发生错误,触发该对象,发送设备内部错误
代码,提示 NMT 主站。紧急报文属于诊断性报文,一般不会影响 CANopen 通讯,其 CAN-ID 存储在 1014h的索引中,一般会定义为 080h +node-ID,数据包含 8 个字节。
时间标记对象(Time Stamp),NMT 主机发送自身的时钟,为网络各个节点提供公共 的时间参考,即网络对时。时间戳协议采用广播方式,无需节点应答,CAN-ID
为 100h,数据长度为 6,数据为当 前时刻与 1984 年 1 月 1 日 0 时的时间差
硬件原理图:
使用开发板与can分析仪连接,进行数据帧分析:
下载源码:
Canoepn源码:
编译源码,生成可执行文件,并拖入开发板中,添加可执行权限,运行:
由于当前只接了can分析仪,没有其他的can设备,因此会出现NMT错误。查看can分析仪数据:
更多回帖