原创 虹科干货 | 读不懂CANopen报文?看完这篇文章你就知道了!

2022-8-12 15:24 1357 5 5 分类: 通信 文集: 虹科干货分享

 

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

 

一、CANopen报文格式

 

CANopen的报文格式为COB-ID+D0+D1+…..+D7 放入CAN帧的数据,低字节优先。例如数据0x01020304对应如下组织:COB-ID 04030201

COB-ID= Function Code+Node ID(或其他),如图所示。

Function Code(二进制):

EMCY0001

PDO0011, 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 0010B

11bit 0011 0000 010:前四位0011为功能码PDO,后四位为节点,10=2即节点为2.

 

二、CANopen报文测试

1.    Boot-up报文

CAN-ID=700+node_ID

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

2.    NMT报文

NMT状态机:1Power on上电 2)自动切换到预操作状态 36)网络管理切换到操作状态。47)网络管理切换到预操作状态。58)网络管理切换到停止状态。91011)网络管理切换到应用层复位状态。121314)网络管理切换到通讯复位状态。15)掉电或者硬件复位。

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

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

000 01 00

3.     心跳报文

Stare0=Boot-up  4=stopped  5=operational  7F=pre-operational

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

 

4.    Node guard

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

State0=初始化,1=断开连接,2=连接,3=准备,4=stopped5=operational6=pre-operational

5.    同步报文

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

测试过程:

1)令设备处于op状态

218001802transmission type设为3

6.    SDO

1) 快速SDO:用于读/写某个节点的对象字典,其数据内容不超过四个字节。例如601 22 00 62 01 FF 00 00 00601600+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 type1表示快速传输,无分段

s: data size indicator

SCS: 服务器端命令码 [2:读SDO初始化响应]

X: unused bits

SDO命令符

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

2) 分段SDO/块传输(用得比较少,了解即可):针对读写数据超过四个字节。报文以测试以分段传输为例。报文传输如下图所示,601 40 08 10 00 00 00 00表示读取1008索引10子索引。

41 01 10 00 0D 00 00 0060 00 00 00 00 00 00 0070 00 00 00 00 00 00 00该为确认报文信息

00 68 69 70 65 63 73 2D13 43 49 4F 31 30 32 00为具体内容,其中0013为命令码;其他通过查ASCII68: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有三种触发机制:事件触发、远程帧、同步

PDOCOB-ID组成

31

30

29

28 - 11

10 - 0

0/1

0/1

0

0

11-bit Identifier

0/1

0/1

1

29 bit identifier

 

Bit

Value

Meaning

31

0

PDO exist/is valid

1

PDO does not exist/is not valid

30

0

RTR allowed on this PDO

1

No RTR allowed on this PDO

29

0

11 bit ID (CAN 2.0A)

1

29 bit ID (CAN 2.0 B)

28-11

0

If bit29 = 0

X

For 29 bit COB-ID if bit29 = 1

10-0

X

Bit 10-0 of COB-ID

 

此处为什么要再提COB-ID呢?他与开头讲的COB-ID= Function Code+Node ID有什么区别?

(该处的COB-ID就是开头所讲的其他的情况)这一应用主要在修改PDO映射中。其中PDOCOB-ID主要有以下这些

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

 

 

作者: 虹科工业智能互联, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3988237.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条