云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > CAN与CANopen总结 - 图文

CAN与CANopen总结 - 图文

  • 62 次阅读
  • 3 次下载
  • 2026/1/10 0:18:22

4. If an TRANSMITTER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the TRANSMIT ERROR COUNT is increased by 8.

5. If an RECEIVER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the RECEIVE ERROR COUNT is increased by 8.

6. Any node tolerates up to 7 consecutive ’dominant’ bits after sending an ACTIVE ERROR FLAG, PASSIVE ERROR FLAG or OVERLOAD FLAG. After detecting the 14th consecutive ’dominant’ bit (in case of an ACTIVE ERROR FLAG or an OVERLOAD FLAG) or after detecting the 8th consecutive ’dominant’ bit following a PASSIVE ERROR FLAG, and after each sequence of additional eight consecutive ’dominant’ bits every TRANSMITTER increases its TRANSMIT ERROR COUNT by 8 and every RECEIVER increases its RECEIVE ERROR COUNT by 8.

7. After the successful transmission of a message (getting ACK and no error until END OF is finished) the TRANSMIT ERROR COUNT is decreased by 1 unless it was already 0.

8. After the successful reception of a message (reception without error up to the ACK SLOT and the successful sending of the ACK bit), the RECEIVE ERROR COUNT is decreased by 1, if it was between 1 and 127. If the RECEIVE ERROR COUNT was 0, it stays 0, and if it was greater than 127, then it will be set to a value between 119 and 127.

9. A node is ’error passive’ when the TRANSMIT ERROR COUNT equals or exceeds 128, or when the RECEIVE ERROR COUNT equals or exceeds 128. An error condition letting a node become ’error passive’ causes the node to send an ACTIVE ERROR FLAG.

10. A node is ’bus off’ when the TRANSMIT ERROR COUNT is greater than or equal to 256.

11. An ’error passive’ node becomes ’error active’ again when both the TRANSMIT ERROR COUNT and the RECEIVE ERROR COUNT are less than or equal to 127.

12. An node which is ’bus off’ is permitted to become ’error active’ (no longer ’bus off’) with its error counters both set to 0 after 128 occurrances of 11 consecutive ’recessive’ bits have been monitored on the bus. Note:

An error count value greater than about 96 indicates a heavily disturbed bus. It may be of advantage to provide means to test for this condition.

1.5 CAN笔记四

其中要重点理解的就是数据帧和远程帧以及组成帧的重要部分。所以初学者首先把这两种帧格式掌握了,学习CAN总线应

该就可以入门了。

了解CAN总线的人都知道,CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧的ID是否和本节点相吻合,如果与本节点吻合,那么总线上的数据就被存入总线控制器的相应寄存器里,否则就抛弃该数据,从而也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID通过待接收节点的验收滤波后是吻合的,是可以被接收的。 CAN總線本來就是廣播的方式,一個發送,所有的都可以接收,至於具體的點對點,對等,主從等方式,只不過是上層協

議的定義罷了。

那么,总线控制器是如何进行验收滤波的呢?验收滤波分单滤波和双滤波。标准帧和扩展帧由于ID长度不同,它们的两种滤波也有所区别。这里我只重点举一个例子,因为只要理解了一种滤波方式,其它的滤波方式都是类似的,也很容易就理解了。

这里就说扩展帧的双滤波方式。所谓双滤波,就是有两次的滤波,但并非两次滤波都需要通过才双通过,两次滤波只要有一次滤波成功那么就默认滤波通过,可以接收数据了。 ACR0 AMR0 ID.28-ID.21 ACR1 AMR1 ID.20-ID.13 ACR2 AMR2 ID.28-ID.21 ACR3 AMR3 ID.20-ID.13 如上表所示,ACR寄存器是接收代码寄存器,AMR是接收屏蔽寄存器。ACR一般是需要与对应的ID相吻合的,但是如果

AMR的相应位上设置为1的时候,ID的那一位数据可以不和AMR的相应位一样,也就是起到屏蔽的作用。

举个例子。如果ACR0=11101111,AMR0=00000000,那么要想通过验收滤波,必须ID.28-ID.21=ACR0=11101111。如果AMR0=00010000,那么ID.28-ID.21=11111111时,也可以通过验收滤波,因为此时AMR0的第五位为1,也就是屏蔽了ACR0的第五位。所以ID的相应位可以不合ACR0一致。

在扩展帧的双滤波方式下,ACR0\\ACR1分别对应ID.28-ID.13 ,ACR2\\ACR3分别也对应ID.28-ID.13,这就达到了两次滤波的效果。

另外要说明的一点是:通过验收滤波后符合节点要求的数据就存储到节点的相应寄存器里,其它的帧信息并不做存储。

2 CANopen协议

2.1 当前情况

1 CAN & CANopen技术讨论区 能不能推荐一个好的公司,能够提供开发板,最好是我们国内用的人比较多的核心芯片的,并且是有利于我们最后移植CANopen源代码的开发板。最后还能购买CANopen源代码的公司?

國內自己擁有自主知識產權的開發套件目前應該還沒有,或是在國內做這種產品賺不到錢,單片機實驗室和博控應該都是代理國外的產品,技術支持的速度自然就比較慢,而且效果也不是很好。

2开发CANopen协议的公司主要有:

IXXAT(我们公司采用)

SYS SEC(德国思泰),北京博控代理,从站7万RMB,主从站要10万多

3因为CAN定义的时候,并没有定义应用层,都是开发者自己定义的,如果你采用国际标准的应用层,如CANOPEN,或是DeviceNet,则这些协议都由国际组织开发维护,协议本身是要付费的,如果有公司开发出这些应用层协议的代码,也是要付费的。我记得是IXXAT公司的,如果你想直接向国外买,也可以直接与IXXAT公司联系。 我最初评估CANopen开发的时候,也想买这套代码,不过觉得人格太贵了,我当初问的价格,从站7万RMB,主从站要10万多吧。

4 I would not recommend to have more then one master (Client) within one network based on CANopen. That is because you will run into collisions with two identicall IDs if two different master nodes address the same slave at the same time.

(我想点对点带应答(SDO)的这种通讯方式是要受控的,要想办法保证只有一个client去请求server。)

5 Profibus大部分用在工业自动化场合,而CANopen主要用于运动控制场合,不过欧洲一些公司却又把CANopen

运用于医疗设备,航海等其它领域,相对来讲CANopen的应用场合会更普遍一些,不过其特色的场合应是运动控制。(CANopen与DeviceNet严格来说,其应用领域是不一样的,DeviceNet是专门针对中大型工业自动化及过程自动化系统而开发的,

虽然厂商一直在强调DeviceNet是多么的快,不过一旦与位置控制,运动控制扯上关系,就目前DeviceNet的性能及实时性来说,是远不够的。但CANopen协议一开始制定就是为了运动控制,伺服控制等需要高速,高实时性要求的系统而设计的,所以其数据传输的实时性很高,当然,实时性与数据容量是成反比的,实时性要高,自然数据传输量就要少,这样也会限制网络的大小。 所以,如果你的设备主要是一些仪表,传感器,IO等,包括变频器,我建议你开发DeviceNet或是Profibus-DP,如果你是开发伺服驱动,位置控制单元,建议你可以考虑CANopen。)

iCAN是周立功公司开发的高层协议,目前是免费的,有点类似MODBUS协议。(一个主站+若干个从站)

6 CANopen认证:单片机实验室并不是CiA中国理事会(虽然他们自己宣称是,但问问CiA就知道了),所有会员对CiA来说是平等

的.测试目前只能送去德国,国内没人有资格认证.

7广州智维电子科技有限公司的有多款瑞典Kvaser公司的USB CAN总线分析仪,记录仪,可以很方便的实现PC与CAN的通讯,最便宜的一款只要人民币1000多一点,而且有免费的分析软件赠送。

8主站如何产生RTR?

9 主站如何配置要监控心跳信号的从站?

10 IXXAT的Canopen协议栈中多个SDO Client访问同一个SDO Server?

斑竹,我用的是IXXAT 的CANopen协议栈,实现了SDO与同步PDO,但我还做了这样一个试验,描述如下:我原先有一个节点2通过SDO访问节点1的数据字典,通过ZLGCANTest检测到CAN总线上数据如下:

节点2发送:

帧ID:601,40 00 31 00 00 00 00 00, 然后节点1响应:

帧ID:581,4b 00 31 00 01 00 00 00, 所有的通信一切正常。

当我在总线上加入另一个节点3,通过SDO访问节点1的数据字典,就发现一旦总线加入节点3访问节点1,则节点2与节点3访问节点1都会出现错误。

请问是不是与如下原因有关:

1)节点3访问节点1也是用的与节点2访问节点1相同的COB_ID , 然而CAN总线的非破坏性仲裁机制不允许两个(多个)相同ID

的CAN帧存在同一网络,而且我看到国外有篇文章指出:“I would not recommend to have more then one master (Client) within one network based on CANopen. That is because you will run into collisions with two identicall IDs if two different master nodes address the same slave at the same time.”

2)我看了前面大概第7页关于”SDO询问”的帖子,我试了,发现IXXAT协议栈节点1对象字典1200~127F设置好像没有影响,我想问:是不是点对点带应答(SDO)的这种通讯方式是要受控的,要想办法保证同时只有一个client去请求server?节点2通过SDO访问节点1,但还没有获得响应的时候,是不是不允许另一个节点3发起同样DOB_ID 的访问?

2.3 CANopen协议阅读

1 Slave完成本身的初始化后,向Master发送bootup报文。

Bootup报文的COB_ID是和Error Control Protocol一样的,即COB_ID=1792(0x700)+Node_ID, 之后发送一个数据字节0x00

关于Error Control Protocol和Bootup报文的COB_ID,可以参见CiA301DSV4_0_2.pdf/69~71页。

2 Master接收到Bootup报文后,发送NMT Module Control Message,该报文Slave不需应答。 NMT Module Control Message的结构可以参见CiA301DSV4_0_2.pdf/66~68页,其COB_ID=0。 从ZLG-P8图3-3,NMT Master至少要发送两个NMT Module Control Message,使Slave进入Pre-operational和Operational。

问题:Pre-operational和Operational对于PDX究竟意味着什么?

3从上叙述可知,Bootup报文的COB_ID和Error Control Protocol是一样的,Error Control Protocol包括Node Guarding和Heartbeat,两者同时只能激活一个。

4 Node Guarding Event (OD的100C和100D) Node Guarding Event基于Master/Slave模式.

Master发送远程帧(无数据),COB_ID=0x700+Node_ID,Slave发送报文应答,COB_ID=0x700+Node_ID,之后跟一个字节的数据:bit7 toggle,bit0~6:状态。Toggle位在每次节点保护应答后必须交替置0或1,在第一次节点保护时为0。节点状态可以为4:Stopped,5:Operational或127:Pre-Operational;处于Initialising的节点是不会应答Error Control Protocol报文的。

NMT Master对Slave进行轮询,对于单个Slave,每两次轮询之间的时间是regular的,对于不同的Slave,

这个regular interval也许是不一样的.Slave对于Master的轮询要给予应答.

图41中的Node Life Time=Guard Time * Life Time factor,各个Slave的Node Life Time也许都不一样.在Node Life Time期间如果未收到Master的轮询Message,这时就会发生remote Node Error,此错误由Life Guarding Event指示出来.

Remote Node Error也可以由Node Guarding Event指示出来,其前提条件为:Master发出的轮询报文在Node Life Time期间没有得到应答;Slave应答报文中的状态信息和期望不匹配.

也就是说Slave没有收到Master的request,处理的是Life Guarding Event. Master没有收到Slave的Reponse或Reponse不对,处理的是Node Guard Event.

以上描述说明,所谓的Node Guarding和Life Guarding只不过是同一过程的两个方面, Node Guarding是Master是否收到Slave的应答,Life Guarding是Slave是否收到Master的request.

如果以上的错误已消除,那么通过Node Guarding Event和Life Guarding Event可以指示出错误已消除. OD的100C和100D用于设置Guard Timer和Life Time Factor,如果两者有一个为0,那么Remote Node Error就不会发生了.

5 Heartbeat Protocol(OD的1016和1017)

Heartbeat Protocol基于Producer/Consumer模式.

Heartbeat Producer定时产生Heaartbeat报文, 生产者和消费者通过OD确立对应关系,如果在Heartbeat Consumer Time期间Consumer没有收到Heartbeat报文,那么就会发生Heartbeat Event.

当Heartbeat Producer time设置好后,Heartbeat Protocol立刻开始运行.

如果此时,producer正好从Initialising向pre-Operational转变,那么Bootup报文就会被认为是第一个Heartbeat报文.

OD的1016和1017用于设置和Heartbeat有关的参数.1016为32bit,bit0~15用于设置Consumer Time,由于它是用来监视heartbeat message的producer,所以它的时间应大于Producer产生Heartbeat message的时间.

bit16-23定义了所要监视的站的Node-ID,这样就知道要监视哪一个站了。(USR_as_GeneralDeviceObj数组中存放的是1000~1018H的Index,需要注意的是1003和1016这两个Index是独立存放的不包括在这个数组中。如果NMM_k_MAX_NODES不等于0,则本节点支持1016监控产生Heartbeat的节点,而NMM_k_MAX_NODES 就是能够监控的最大的Heartbeat producer数目,1016也在协议栈内生成了)

如果对于同一个Node-ID,设置多次Consumer heartbeat Time,那么该Node就会返回错误码06040043. 同理1017放置的是Producer Heartbeat Time,它不包括Node-ID.

问题:对于初始化时,所有的PDX地址都为0x40,那么所有的PDX的Bootup报文都为1792+0x40,Master怎么处理?

主站與從站之間有Heartbeat或是node guarding機制來互相監視對方的狀態,一旦超時,就知道對方斷線了。

6 SYNC(OD的1005,1006,1007.)

SYNC属于Producer/Consumer模式,OD中和SYNC相关的是1005,1006,1007. 1005的bit30决定了该Node是否产生SYNC,SYNC Producer产生SYNC报文时使用的COB-ID(一般为0x80),1006定义了相邻两次SYNC之间的Interval,这里是以us为单位的,在1005的bit30置位后的一个interval之内,第一个SYNC报文被发出.如果中途interval被改变,那么在改变后的一个新interval时间内SYNC报文被发出.1007定义了SYNC Window Length,这里也是以us为单位,即接收到SYNC之后,在这个Window Length之内将PDO报文发送出去.

对于SYNC Prodcer,其1005一般为40000080,表示产生COB-ID为80的SYNC报文, 而本节点的0x1006对象就是产生同步周期值了;而Consumer的1005一般为00000080,表示不产生SYNC,但接收COB-ID=0x80的报文,该节点0x1006一般置0,没什么用处了.

CANopen协议中SYNC功能和使用

SYNC是CANopen管理各节点同步数据收发的一种方法,相当于网络节拍,基于同步的PDO按照这个网络节拍来执行实时数据的收发。SYNC属于生产/消费型通讯方式,网络中有且只有一个SYNC生产者,一般有多个消费者,其网络标识符优先级很高,一般设置为0x80,基本上除了NMT优先级最高。SYNC生产者按照固定频率发送SYNC报文,需要SYNC的节点(消费者)将其接收并计数,当计数值达到节点相应TPDO要求时,该TPDO映射的数据被发送(根据PDO传输类型也可能是映射数据更新),此过程中SYNC生产者提供网络节拍,各消费者以节拍周期的倍数执行数据传输功能。 在CANopen网络中应用SYNC要注意以下几点:

1). SYNC并不是主节点必须的功能,不一定要和NMT放在同一节点上,实际网络应用中可以在网络中找一个任务较少、实时性好的节点来作为SYNC生产者,SYNC消费者可以有多个,但是生产者同时只能有一个存在。 2). SYNC是不带数据的,以使报文尽可能短,目的是为了加快其传输,减少网络占用。

3). SYNC发出后,需要发送数据的PDO要在规定时间段内发送数据,这个时间段叫做时间窗口(对象1006H指定),要小于SYNC节拍周期,以便每个周期留一定时间来进行其他类型的网络通讯。

搜索更多关于: CAN与CANopen总结 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

4. If an TRANSMITTER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the TRANSMIT ERROR COUNT is increased by 8. 5. If an RECEIVER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the RECEIVE ERROR COUNT is increased by 8. 6. Any node tolerates up to 7 consecutive ’dominant’ bits after sending an ACTIVE ERROR FLAG, PASS

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com