CANOpen的几种操作以及数据

其实3年前在21ic就准备做这篇文章了,那时,CANOpen也只是刚刚在国内推广,所以几乎没有项目用到。现在有了实际的项目,完全确认了以前移植和测试的代码,所以列举一些CANOpen的底层操作以及数据。当然,列举的都是一些简单的基本的CANOpen通信,不包括其他CANOpen应用协议中的内容。

1.心跳
CANOpen节点会以一个固定的频率发送心跳报文。用于告诉主机,偶还活着。。。心跳报文的格式很简单,COB-ID为0x700+Node_ID,数据为一字节的状态数据:

图中,ID为706,表示06号节点的心跳,状态是0x7F,表示Pre-Operational状态(节点初始化完成后,进入Pre-Operational状态)。查看时间,每个心跳报文时间间隔大概1秒。

2.NMT
NMT是管理报文,用于实现一些管理操作,比如,节点重启、进入Operational状态等等。NMT报文格式很简单,ID为000,数据为一字节命令+一节节点号(0表示广播)。

 

第2号报文就是让06号节点,进入Operational状态,运行完成后,节点心跳报文中的节点状态也变为Operational状态

 

同上,发送stop remote node命令,进入Stopped状态,当然,心跳还是有的,只是节点不干活了

这个是reset node命令,用于让节点复位。复位之后,会首先进入Initializing状态(对于于心跳报文中的0x00),初始化完成后,进入Pre-Operational状态(对应心跳报文中的0x7F)。

3.SDO
SDO 主要用来访问节点的对象字典(OD),CANOpen的节点至少需要支持SDO_Server。对象字典是CANOpen节点的数据组织形式,包含了 CANOpen节点的各个参数和数据,比如,心跳报文的发送频率、系统启动次数、节点的通信参数等等等等。可以说,SDO是用来设置CANOpen节点的各个运行参数的。

 

图中,1号报文0606: 40 17 10 00 00 00 00 00就是一个SDO_Read报文,告诉节点,要读取的OD索引和子索引,包括数据长度。然后节点会发送对应的数据(后面的那个8字节报文)。第一个字节是一些命令的设定包括参数的设定,后2个字节是OD的索引,再后面一个字节是OD的子索引,最后4个字节是数据。上图中,主机发送的是一个读取OD中 1017:00位置的数据命令,这个位置存放的是心跳频率,读取的结果是0x03EB(1000ms)。

9号报文就是SDO_Write,写OD中1017:00位置的数据,也就是修改心跳频率。收到完成应答后,心跳频率就变了(查看时间)。

4.PDO
PDO 是用来发送(TPDO)或者接收(RPDO)数据的,有几种不同的触发方式,比如:事件触发、同步触发等等。数据内容一般有CANOpen的各个应用协议规定,比如401文档中的AI(Analog Input)数据等。PDO的数据内容是通过映射的方式在定义在OD中的,一个节点可以有多个PDO通道。PDO的通信参数也可以通过SDO访问OD的方式来修改。

5.应急报文
应急报文用于返回一个节点上的错误,可以是CANOpen命令解析错误,等等。

待续。。。。。。
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CANopen是一种基于CAN总线的高层协议,它提供了一种标准化的方式来配置、控制和监测CAN总线上的设备。CANopen协议定义了一组标准化的对象字典,这些对象字典描述了设备的配置和状态信息。CANopen协议还定义了一组标准化的通信对象,这些通信对象用于在设备之间进行数据交换。 CANopen协议的主要特点包括: 1. 灵活性:CANopen协议可以适应不同的应用场景和设备类型,通过对象字典和通信对象的定义,可以灵活地配置和控制设备。 2. 实时性:CANopen协议支持实时通信,可以满足实时控制和监测的需求。 3. 可扩展性:CANopen协议支持在现有系统上进行扩展,可以添加新的对象字典和通信对象。 4. 标准化:CANopen协议是一种标准化的协议,可以保证设备之间的互操作性。 CANopen协议的基本通信机制是基于数据帧的。数据帧包含了设备的地址信息、数据类型、数据长度和数据内容。CANopen协议定义了几种不同类型的数据帧,包括SDO数据帧、PDO数据帧和NMT数据帧等。 SDO数据帧用于设备之间的点对点通信,可以进行设备配置和状态监测等操作。PDO数据帧用于设备之间的广播通信,可以用于实时数据交换。NMT数据帧用于设备之间的网络管理和控制,可以实现设备的上电、下电、复位等操作。 除了基本通信机制之外,CANopen协议还定义了一些高级功能,包括心跳监测、同步机制、时间戳等。这些高级功能可以进一步提高系统的性能和可靠性。 总之,CANopen协议是一种灵活、实时、可扩展、标准化的协议,可以满足不同应用场景和设备类型的需求。它已经广泛应用于工业自动化、汽车电子、医疗设备等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值