- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虹科干货 | 读不懂CANopen 报文?看完这篇文章你就知道了!
作者:虹科智能自动化团队
CANopen 是位于CAN 总线之上的应用层协议。CAN 报文由7 个不同的位域组成,CANopen 主要是规定
了其中的仲裁域和数据域的使用情况。
一、CANopen 报文格式
CANopen 的报文格式为COB-ID+D0+D 1+ …..+D7, 放入CAN 帧的数据,低字节优先。例如数据
0对应如下组织:COB-ID。
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.
二、CANopen 报文测试
1. Boot-up 报文
CAN-ID=700+node_ID
当某个节点在initializing 模式之后,进入pre-operational 模式将发送boot-up 报文,例如CIO 102 在上电之
后会收到报文如下。这个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
如果要对整个网络所有节点同时进行控制,则D 1 为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
1)快速SDO:用于读/写某个节点的对象字典,其数据内容不超过四个字节。例如601 22 00 62 01 FF 00
00 00 :601 (600+Node_ID );22 (不对传输数据的字节数做区分)=0010 0010 (如下图)001 表示写,
0 表示没有用到的字节数,00
文档评论(0)