首页 理论教育现场总线CAN通信程序设计

现场总线CAN通信程序设计

【摘要】:CAN通信程序的设计需要充分利用双CAN构建的环形通信网络,实现正常情况下的高效、快速的数据通信,以及实现故障情况下的及时、准确的故障性质确定和故障定位。CAN通信数据包的分帧情况见表11-7。

控制卡与测控板卡间的通信通过CAN总线进行,通信内容包括将上位机发送的板卡及通道配置信息下发到测控板卡、将上位机发送的输出命令或控制算法运算后需执行的输出命令下发到测控板卡、将上位机发送的累积型通道的计数值清零命令下发到测控板卡、周期性向测控板卡索要采样数据等。此外,CAN通信网络还肩负着主从控制卡间控制算法同步信号的传输任务。

CAN通信程序的设计需要充分利用双CAN构建的环形通信网络,实现正常情况下的高效、快速的数据通信,以及实现故障情况下的及时、准确的故障性质确定和故障定位。

STM32F407ZG中的CAN模块具有一个CAN 2.0B的内核,既支持11位标识符的标准格式帧,也支持29位标志符的扩展格式帧。控制卡的设计中采用的是11位的标准格式帧。

1.CAN数据帧的过滤机制

主控制卡向测控板卡发送索要采样数据的命令,主控制卡会依次向各个测控板卡发送该命令,不存在主控制卡同时向多个测控板卡发送索要采样数据命令的情况。测控板卡向主控制卡回送数据时,只希望主控制卡和从控制卡可以接收该数据,不希望其他的测控板卡接收该数据,或者说目前的系统功能下其他的测控板卡不需要该数据。主控制卡向从控制卡发送控制算法同步运算命令时,也只希望从控制卡接收该命令,不希望测控板卡接收该命令。

由于CAN通信网络共用通信线,所以从硬件层次上讲,任何一个板卡发送的数据,连接在CAN总线上的其他板卡都可以接收到。如果让非目标板卡在接收到该数据包后,通过对数据包中的目标ID或数据信息进行分析来判断是否是发送给自己的数据包,这种方式虽然可行,但是会让板卡接收到大量无关数据,而且还会浪费程序的数据处理时间。通过使用STM32F407ZG中的CAN接收过滤器可有效解决这一问题,过滤器可在数据链路层有效拦截无关数据包,使无关数据包无法到达应用层

STM32F407ZG中的CAN标识符过滤机制支持两种模式的标识符过滤:列表模式和屏蔽位模式。在列表模式下,只有CAN报文中的标识符与过滤器设定的标识符完全匹配时报文才会被接收。在屏蔽位模式下,可以设置必须匹配位与不关心位,只要CAN报文中的标识符与过滤器设定的标识符中的必须匹配位是一致的,该报文就会被接收。因此,列表模式适用于特定某一报文的接收,而屏蔽位模式适用于标识符在一段范围内的一组报文的接收。当然,通过设置所有的标识符位为必须匹配位后,屏蔽位模式就变成了列表模式。

2.CAN数据的打包与解包

每个CAN数据帧中的数据场最多容纳8个字节的数据,而在控制卡的CAN通信过程中,有些命令的长度远不止8个字节。所以,当要发送的数据字节数超出单个CAN数据帧所能容纳的8个字节时,就需要将数据打包,拆解为多个数据包,并使用多个CAN数据帧将数据发送出去。在接收端也要对接收到的数据进行解包,将多个CAN数据帧中的有效数据提取出来并重新组合为一个完整的数据包,以恢复数据包的原有形式。

为了实现程序的模块化、层次化设计,控制卡与测控板卡间传输的命令或数据具有统一的格式,只是命令码或携带的数据多少不同。控制卡CAN通信数据包格式见表11-6。

表11-6 控制卡CAN通信数据包的格式

978-7-111-55649-7-Chapter11-21.jpg(www.chuimin.cn)

通信命令中的目的节点ID可以放到CAN数据帧的标识符中,其余信息则只能放到CAN数据帧的数据场中。当命令携带的附加数据较多,超出一个CAN数据帧所能容纳的范围时,就需要将命令分为多帧进行发送。当然,也存在只需一帧就能容纳的命令。为了对命令进行统一处理,在程序中将所有的命令按多帧情况进行发送,只不过对于只需一帧就可以发送完的命令,将其第一帧标注为最后一帧即可。

将命令分为多帧进行发送时,需要对命令做打包处理,并需要包含必要的包头信息:目的节点ID、源节点ID、帧序号和帧标志。其中,帧序号用于计算信息在命令中的存放位置,帧标志用于标志此帧是否是多帧命令中的最后一帧。目的节点ID和帧标志可以放到标识符中,源节点ID和帧序号只能放到数据场中。CAN通信数据包的分帧情况见表11-7。该表显示了带有10个附加数据的命令的分帧情况。

表11-7 CAN通信数据包的分帧情况

978-7-111-55649-7-Chapter11-22.jpg

在组建具体的CAN数据帧时,除了上述标识符和数据场外,还要对RTR(帧类型)、IDE(标识符类型)和DLC(数据场中的字节数)做好填充。

3.双CAN环路通信工作机制

在只有一个CAN收发器的情况下,当通信线出现断线时,便失去了与断线处后方测控板卡的联系。但两个CAN收发器组建的环形通信网络可以在通信线断线情况下保持与断线处后方测控板卡的通信。

在使用两个CAN收发器组建的环形通信网络的环境中,当通信线出现断线时,CAN1只能与断线处前方测控板卡进行通信,失去与断线处后方测控板卡的联系;而此时,CAN2仍然保持与断线处后方测控板卡的连接,仍然可以通过CAN2实现与断线处后方测控板卡的通信。从而消除了通信线断线造成的影响,提高了通信的可靠性

4.CAN通信中的数据收发任务

在应用嵌入式操作系统μC/OS-Ⅱ的软件设计中,应用程序将以任务的形式体现。

控制卡共有4个任务和2个接收中断完成CAN通信功能,它们分别为TaskCardUpload、TaskPIClear、TaskAODOOut、TaskCANReceive、IRQ CAN1 RX和IRQ CAN2 RX。