1. 主动报错站点
2. 被动报错站点
3. 出错标识本身没有什么优先级的问题。
4. 对于通过竞争得到总线使用权的发送站点来说,它在一边发一边听,有可能出现以下几种情况:
(a) 它自己就发现错误,它就干脆哗啦哗啦,乱发一气(连续的发六个同性位)。就象你小时候在幼儿园练习写字,写错一个笔画你自己就不耐烦了,在纸上哗啦哗啦乱画一气。目的就是告诉别人(别的站点):出错了!
(b) 它自己没有发现错误,但作为主动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点就会立即哗啦哗啦往总线上乱发一气(连续的发六个显性位),就象你小时候在幼儿园练习写字,写错一个笔画你自己没发现,可老师(主动报错站点)发现了就不耐烦了,在你的纸上哗啦哗啦乱画一气。目的就是告诉你自己以及告诉别人(发送站点和别的站点):出错了!
(c) 它自己没有发现错误,但作为被动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点只能慢慢的等待,等待别的主动报错站点报错。如果别的主动报错站点没发现错误,那就继续等,一直等到该发ACK的时候不给发送站发这个显性的ACK信号,当然了其他站点可能会发这个ACK,那说明其他站点没有发生错误,没办法,别人能通信,你不能!然后积攒到一定的时候,你就脱离总线吧!再继续等待一段时间,脱胎换骨,重新回到总线上(这个时候错误记录都清0了,你肯定是主动报错站了)。就象你小时候在幼儿园练习写字,写错一个笔画你自己没发现,但被别的同学(被动报错站点)发现了,但他不能说,嘿嘿(乱说话,老师要打屁股的),他就只能等,等老师来发现你的错误(等待主动报错站点报错),或者老师没眼力,那就等到收作业的时候,不收你的(不发ACK),不过老师可能主动来收的(给你发ACK),那你可没办法,继续等吧,等到你也当老师了(脱胎换骨了)...
devicenet协议中关于CAN 的出错管理的规范
一、
CAN 提供了检测下列错误类型的机制:
l. 位错误
2. 应答错误
3. 填充错误
4. CRC 错误
5. 格式错误
二、节点错误状态
1. 错误主动(Error Active)
2. 错误被动 (Error Passive)
3. 离线 (Bus Off)
故障界定状态机制中所含过程简述如下:
1. 节点保持对发送和接收错误计数器的跟踪;
2. 节点在开始错误主动状态时错误计数器的值等于0。该状态下的节点假设所有检测到的错误非该节点所为;
3. 错误类型以及检出错误的结点被赋予不同的计数值,这些计数值将根据是发送还是接收错误进行累加。有效的接收及发送使这些计数器递减,直至最小值0;
4. 当这些计数器中的任何一个超出 CAN 定义的阈值时,该节点进入错误被动状态。在此状态下该节点将被认为是导致错误的原因;
5. 当发送错误计数值超出 CAN 定义的另一个阈值时,节点进入离线状态。本规范定义了从离线到错误主动之间的状态转换机制;
6. 当错误被动的节点的发送及接收错误计数器值都减小至CAN 定义的阈值以下时,节点重新进入错误主动状态。