CAN协议设备内部多条指令的发送规则
通常CAN通讯协议只规范了多个设备在总线上同时发送指令时的竞争顺序,而对于单个设备内部产生的多条指令的发送顺序却很少涉及。
在纯主从模式下,设备内部产生多条指令的可能性并不大,相关问题很难暴露,而当系统发展演绎到全触发方式后情况就不同了,一个设备可能具有多个触发变量,它们可以是周期触发、变化触发、越界触发等等,而总线的发送速率是有限的,且同时还存在其他设备对总线的竞争,因此在同一设备中就有可能积累多条指令等待发送。
通常设备会默认以“先生优势”规则处理这些指令,即先产生的指令优先发送,这样处理的最大好处是指令动作先后逻辑规范,这对那些具有先后关联的系列指令尤为重要,但事物总是两方面的,这种“先生优势”规则,会延迟和阻碍后产生的高优先级指令的发送,如:告警指令,尤其是当总线上存在竞争时,情况尤为严重,如:当设备指令发送端口被一条先生成的低优先级指令占据时,其在总线上的竞争处于劣势,从而使该设备中后产生的告警指令无法参与竞争而被推迟发送,这种延迟有时可能是致命的。因此我们需要重新规范设备内部多条指令的发送规则,最粗暴简单的方法就是对这多条指令进行优先级排队,将ID字小的指令排在前面,每当设备产生一条新指令时都要重新进行一次指令排序(注意:这种重新排序应当包括那条已经处在发送端口的未发指令),这样设备便具有了最优的发送竞争力,但同时可能会破坏前面所说的某些指令的先后逻辑关联,可能使系统运转出现偏差。
为此TTCANopen应用层协议做出如下规范,当一设备同时具有多条指令等待发送时:
1)优先级位为0的指令优先于优先级位为1的指令发送;
2)优先级位相同的指令按其产生的先后顺序发送。
虽然只有短短的两条规定,但它却完成了其它应用层协议很难规范完成的内容,而这对于TTCANopen协议来说却是自然天成的,它的第一条规定确保了低优先级(1)的指令不能阻碍高优先级(0)指令的发送,使设备中诸如告警指令得以顺利抢先通过总线发送;第二条规定保障了具有先后逻辑关系的系列指令的顺利完成,因为我们一般不会将这些相关指令定义在不同的优先级位上。
注:请参考《TTCNAopen应用层协议CAN标识符的分配方法》