目前,CANopen通讯协议已经在工业领域得到了广泛的使用,由于其面向对象的设计思路,CANopen协议已成为欧洲等国家的自动化公司标配的通讯接口之一。在本系列文章中,我们将介绍CANopen协议的基础内容,包括对象字典、服务、SDO、PDO和主/从站节点等。
1.1 CANopen框架
为了理解CANopen通信,有必要对CANopen的CAN报文进行分解。如下图,11位的CAN ID被称为通信对象标识符(COB-ID),它被分成两部分。前4位相当于功能代码,接下来的7位包含节点ID。
为了理解COB-ID的工作原理,需要从简单的CANopen网络中如何使用标识符的预定义分配开始。
如上图,COB-ID(381、581等)与通信服务(传输PDO 3、传输SDO等)相关联,因此,COB-ID详细说明了哪个节点正在发送/接收数据,以及使用了什么服务。如下图的例子,一个节点ID为5的CANopen设备将通过11位的CAN ID 585传输SDO,这对应于二进制功能代码1011,节点ID 5(在二进制中为0000101)。
1.2 CANopen通信协议/服务
接下来,我们将简要介绍CANopen的7种服务类型,以及它们如何利用8个CAN帧数据字节。
1.2.1 网络管理(NMT)
NMT服务用于通过NMT命令(如:启动、停止、复位)来控制CANopen设备的状态(如:预运行、运行、停止)。
为了改变状态,NMT主机发送一个带有 CAN ID 0的2字节消息(即功能代码0和节点ID 0)。所有从站节点都处理这个报文。第一个CAN数据字节包含请求的状态,而第二个CAN数据字节包含目标节点的节点ID。节点ID 0表示广播命令。
可能的命令包括转换到运行(状态01)、停止(状态02)、预运行(状态80)以及重置应用程序(81)和重置通信(82)。例如:将节点0x06设置为运行模式: 000 01 06
1.2.2 同步(SYNC)
SYNC报文用于同步几个CANopen设备的输入和响应--通常由应用主站触发。应用主机将SYNC消息(COB-ID 080)发送到CANopen网络(带或不带SYNC计数器)。多个从节点可以配置为对SYNC做出反应,并通过传输同时捕获的输入数据或通过与参与同步操作的节点同时设置输出来响应。使用SYNC计数器可以配置几组同步操作的设备。
1.2.3 紧急情况 (EMCY)
紧急服务用于设备出现致命错误(如传感器故障)时,允许它向网络的其他部分指示这一点。受影响的节点以高优先级向网络发送单个EMCY消息(例如,节点5的COB-ID 085)。数据字节包含有关错误的信息,可以查找详细信息。
1.2.4 时间戳(TIME) [PDO]
通过这种通信服务,可以分配全球网络时间。时间服务包含一个6字节的日期和时间信息。应用主机发送 CAN ID 为100的TIME消息,其中最初的4个数据字节包含以毫秒为单位的午夜之后的时间,接下来的2个字节包含自1984年1月1日以来的天数。
1.2.5 过程数据对象 [PDO]
PDO服务用于在设备之间传输实时数据,例如位置等测量数据或扭矩请求等命令数据。在这方面,它类似于J1939中的广播数据参数。关于PDO服务,我们将在下文中进行详细介绍。
1.2.6 服务数据对象 [SDO]
SDO服务用于访问/改变CANopen设备的对象字典中的值。例如,当应用主站需要改变CANopen设备的某些配置时,可以通过SDO服务来实现。
1.2.7 节点监控(心跳)[SDO]
心跳服务有两个目的:提供一个"活动"的消息和确认NMT命令。NMT从设备周期性地(例如每100毫秒)发送心跳消息(例如节点5的CAN ID为705),在第一个数据字节中包含节点的"状态"。如果在特定时间限制内没有收到任何消息,心跳消息的"消费者"(例如 NMT 主设备和可选的任何其他设备)就会做出反应。例如:节点5处于预运行模式,周期性发送:705 7F
在下一篇文章中,我们将继续讲解CANopen通信的相关知识,包括对象字典、SDO、PDO等,欢迎关注我们以便第一时间获取更新的内容。虹科在CAN、CANopen等领域深耕多年,有着深厚的技术实力,目前已面向国内市场推出了CANopen开发源代码、CANopen数据记录仪,和支持CANopen协议的网关、板卡、IO等产品。