CAN报文的接收与发送相同,由CAN控制器自动完成,接收程序只需从接收缓存器中读取所接收的数据,再进行相应处理。其方法与发送程序基本一致,这里不再赘述。
6 关键技术设计分析
6.1 冗余设计
工业控制现场状况复杂,因外力所致的电缆接触故障率远远高于节点的故障率,一旦电缆发生故障,总线就会失去通信能力,并导致系统瘫痪,对工控系统的健壮性构成威胁。解决这一故障最简单、有效的办法是对故障率较高的物理介质进行冗余设计。即使用2条总线电缆、2个CAN总线收发器,但只用1个总线控制器。仲裁电路自动监测总线状态,并自适应选择正常的电缆完成通信任务。发生电缆故障时,设备自动报警,提醒工作人员进行检修。检修过程中,设备使用备用电缆继续工作。电缆冗余设计可实现与通常的CAN总线通讯系统代码级兼容。仲裁电路设置于总线控制器与2个总线收发器之间,监测CAN总线电缆状态,实现自适应切换和报警。设备向其他节点发送报文时,总线控制器向2条总线同时发送相同的报文;而接收报文时,仲裁电路在无电缆故障时,一直使用总线1(主总线)进行报文接收。如果总线2(从总线)出现故障,故障监测电路就向主控计算机发出中断信号报故障,同时处于正常状态的总线1仍承担正常通讯任务;如果总线1出现故障,故障监测电路在向主控计算机发出中断信号的同时,自动切换成总线2,以保证设备正常工作。总线切换动作只会出现在正在使用的电缆发生故障时,这样可提高通讯的稳定性,降低应答失败的几率。
6.2 接收数据时ID不滤波的实现
在CAN总线的接收过程中,一般实现的都是发送ID和接收ID相匹配的方式,也就是说在接收方要进行接收,而ID滤波,而本设计实现任意接收方式,只要有数据就开始接收不进行ID号的滤波,这样可更好进行测试,例如某个设备所携带的ID号,由于各种原因与接收方所接收的ID不匹配,这样就可判断出所发设备可能收到干扰,或者所发设备自身出现了问题。这种ID号不过滤的方法主要通过对接收设备的命令请求寄存器、消息掩码寄存器、仲裁寄存器、消息控制寄存器和命令掩码寄存器的设置来实现。其实现程序如下:
7 结论
本文提出一种CAN总线隔离器的实现方案。利用具有CAN总线控制器的C8051F系列单片机实现了CAN智能节点,增加CAN节点的冗余设计,提高通讯的稳定性,降低应答失败的几率;实现不滤波的CAN数据接收,可更好测试系统的可靠性和监测功能,当接收到不是已知设备发来的消息时,能够准确定位设备故障的位置。此方案实现的CAN总线隔离器已成功应用于某型号飞行器的地面测试台中,经测试和调试后,系统工作稳定,达到设计要求。并且由于采用内嵌的CAN总线控制器,可为以后的系统升级预留大量空间。