CAN报文由7个不同的位域组成,CANopen主要是规定了其中的仲裁域和数据域的使用情况。本篇文章将对CANopen报文进行解析,包括报文格式、报文测试相关内容,并具体说明NMT报文、心跳报文、同步报文、SDO、PDO等

CANopen是位于CAN总线之上的应用层协议。CAN报文由7个不同的位域组成,CANopen主要是规定了其中的仲裁域和数据域的使用情况。

1. CANopen报文格式

CANopen的报文格式为COB-ID+D0+D1+…..+D7, 放入CAN帧的数据,低字节优先。例如数据0x01020304对应如下组织:COB-ID 04030201。COB-ID= Function Code+Node ID(或其他),如图所示:

  • Function Code(二进制):
  • EMCY:0001;
  • PDO:0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010;
  • SDOrx : 1011;
  • SDOtx : 1100;
  • NMT error control : 1110;
  • NMT : 0000;
  • SYNC : 0001;
  • TIME STAMP : 0010;
  • 例子:182H=0001 1000 0010(B)
  • 11bit为 0011 0000 010:前四位0011为功能码PDO,后四位为节点,10=2即节点为2.

2. CANopen报文测试

1)Boot-up报文

Boot-up报文为CAN-ID=700+node_ID。当某个节点在initializing模式之后,进入pre-operational模式将发送boot-up报文,例如CIO102在上电之后会收到报文如下图。这个boot-up报文其实也是第一个心跳报文。

2)NMT报文

NMT状态机:1)Power on上电 2)自动切换到预操作状态3)6)网络管理切换到操作状态。4)7)网络管理切换到预操作状态。5)8)网络管理切换到停止状态。9)10)11)网络管理切换到应用层复位状态。12)13)14)网络管理切换到通讯复位状态。15)掉电或者硬件复位。

NMT协议:11-bit的CAN报文ID中只携带高4-bit的功能码,CANID均为000h,具备最高的 CAN 优先级。数据为Node-ID放在数据域的D1处;具体的NMT命令编码放在数据域的D0处!例:将节点1设置为operational状态:000 01 01

如果要对整个网络所有节点同时进行控制,则D1为0即可。例:将所有节点设置为operational状态000 01 00

3)心跳报文

Stare:0=Boot-up  4=stopped  5=operational 7F=pre-operational

CAN-ID为700+Node-ID数据为一个字节。如图,设备上电后处于pre-op状态,通过SDO写入心跳周期5s,每隔5s自动发送一次设备的状态,通过000 01 01将设备的状态切换为op。报文:601 2B 17 10 00 88 13 00 00:601为CAN-ID(600+NODE_ID),2B代表写两个字节,17 10 表示索引(根据报文格式低位在前,此处代表对象1017h),00表示子索引,88 13 00 00代表数据内容(低位在前则该数据为00 00 13 88=5000).

4)Node guard

主站发送一帧远程帧,节点应答700+Node_ID state

State:0=初始化,1=断开连接,2=连接,3=准备,4=stopped,5=operational,6=pre-operational

5)同步报文

同步窗口时间索引:1007 h约束了同步帧发送后从节点发送PDO的时效即在这个时间内发送的PDO才有效超过时间的PDO将被丢弃;通讯循环周期:索引 1006 h 规定了同步帧的循环周期。

测试过程:

  1. 令设备处于op状态
  2. 1800,1802的transmission type设为3

6)SDO

快速SDO

用于读/写某个节点的对象字典,其数据内容不超过四个字节。例如601 22 00 62 01 FF 00 00 00:601(600+Node_ID);22(不对传输数据的字节数做区分)=0010 0010(如下图)001表示写,0表示没有用到的字节数,00表示剩下的字节数,1表示快速传输,0表示data区没有字节数指示;01表示子索引;FF 00 00 00 表示数据区的内容。

SDO写

  • CCS: 客户端的命令码 [1:写入初始化请求]
  • X: unused bits
  • n: 字节数 (n表示后面4个字节数据剩余的数量)
  • e: transfer expedited (快速传输,无分段)
  • s: data区是否为字节数指示:0表示data区无,1表示data区的数值为要写入的数据
  • SCS: 服务器命令码 [3:写入初始化响应]

SDO读

  • CCS: 客户端命令码 [2:读SDO初始化请求]
  • n: 当快速模式时,表示data区内空余的字节数
  • e: transfer type:1表示快速传输,无分段
  • s: data size indicator
  • SCS: 服务器端命令码 [2:读SDO初始化响应]
  • X: unused bits

SDO命令符

下图为SDO测试的过程,包括读6200 01和6200 02的读写操作。

分段SDO/块传输

针对读写数据超过四个字节的情况,报文测试进行分段传输。报文传输如下图所示,601 40 08 10 00 00 00 00表示读取1008索引10子索引。41 01 10 00 0D 00 00 00;60 00 00 00 00 00 00 00;70 00 00 00 00 00 00 00该为确认报文信息。00 68 69 70 65 63 73 2D;13 43 49 4F 31 30 32 00为具体内容,其中00和13为命令码;其他通过查ASCII表68:h;69:i;70:p;65:e;63:c;73:s;2D:-;43:C;49:I;4F:O;31:1;30:0;32:2;00:NULL;即内容为:hipecs-CIO02。

7)PDO

PDO有三种触发机制:事件触发、远程帧、同步。

PDO的COB-ID组成如下方的表格所示:

此处的COB-ID就是文章开头所说的其他的情况,这一应用主要在修改PDO映射中。其中PDO的COB-ID主要有以下这些:

PDO通讯中有两个重要的概念,通讯参数与映射参数(CiA301中规定了他们的对象),通讯参数中定义了该设备所使用的COB-ID、传输类型、禁止时间、事件定时器触发时间、同步起始值。

虹科在CAN、CANopen等工业总线通讯领域深耕多年,有着深厚的技术实力,目前已面向国内市场推出了CANopen开发源代码、CANopen数据记录仪,和支持CANopen协议的网关、板卡、IO等产品。此外,针对客户在CANopen方面的培训需求,虹科还推出了相关的课程培训服务,欢迎拨打400-999-3848到虹科了解详情。

关于虹科

虹科是一家在工业自动化领域,特别是工业总线通讯行业经验超过15年的高科技公司。虹科智能自动化事业部与欧洲和美国的世界知名工业自动化、能源管理与楼宇自动化专家展开深度合作,提供业内顶尖水平的通信协议的软硬件解决方案,通信技术类型涉及工业自动化通讯协议【CAN、CANopen、EtherCAT、PROFINET、EtherNet/IP、IO-Link、OPC UA、MQTT、TSN】等,能源管理与楼宇自动化通讯协议【ASCII、BACnet、KNX、Modbus】等,解决方案包含:代码、芯片/模块、板卡、网关、IO、工控机、继电器、测试方案、培训和开发服务等。因此,虹科是国内为数极少的在OT领域深耕多年并技术经验全面的供应商。

虹科智能自动化事业部以客户需求为导向,以技术能力为基础,为国内企业提供最适合的产品和最满意的服务。作为链条最全、方案最丰富、且兼备技术服务落地的通信技术资源整合商,虹科服务的客户已经超过1000家,虹科工程师们一直在万物互联的潮流中扮演着如高速公路般的连接作用,这是我们的使命也是我们的自豪。

关闭菜单