3. CAN帧结构与无人矿卡报文分类

在无人矿卡的CAN总线诊断中,第一步永远不是“读数据”,而是“看懂这一帧是什么”。同样一串十六进制字节,如果不知道它是标准帧还是扩展帧、ID代表哪个系统、优先级如何,解析结果就毫无意义。本节围绕帧格式、仲裁机制和报文分类方法展开,目标是让读者拿到一帧原始报文后,能快速判断它的身份与归属。

一、标准帧与扩展帧的格式差异

CAN 2.0B协议定义了两种帧格式。标准帧使用11位标识符(ID),扩展帧使用29位标识符(由11位基本ID和18位扩展ID组成)。两者在帧结构上的关键区别在于:标准帧在仲裁场之后直接进入控制场;扩展帧则在基本ID后插入SRR位(替代远程请求位)和IDE位(标识符扩展位),再发送18位扩展ID,最后才是RTR位与控制场。数据场长度均为0~8字节,CRC场、应答场和帧结束场结构一致。

对无人矿卡而言,动力、电池、液压等传统底盘系统多沿用商用车J1939体系,使用29位扩展帧,其ID中编码了优先级(P)、数据页(DP)、PDU格式(PF)、PDU特定(PS)和源地址(SA)。而部分感知传感器、辅助控制器或后期加装的设备,为降低成本常采用11位标准帧。因此诊断工具必须同时支持两种格式,且解析规则要分开配置。

标准帧与扩展帧结构对比 标准帧(11位ID) SOF 仲裁场 11位ID + RTR 控制场 IDE=0, DLC 数据场 0~8B CRC ACK EOF 扩展帧(29位ID) SOF 基本ID 11位 SRR IDE=1 扩展ID 18位 控制场 数据场 0~8B CRC ACK EOF 关键点:扩展帧在基本ID后插入SRR与IDE位,再发送18位扩展ID;标准帧无此段。 J1939体系使用29位ID,其中P(3位)决定优先级,PF/PS/SA共同确定报文语义与来源。 诊断时先看IDE位判断帧类型,再按对应规则拆解ID,避免用标准帧规则误读扩展帧。

二、仲裁场与优先级:谁先说话

CAN总线是广播式多主结构,多个节点同时发送时依靠仲裁场逐位比较:显性位(0)优先于隐性位(1),ID数值越小优先级越高。标准帧仲裁场就是11位ID加RTR位;扩展帧仲裁场包含11位基本ID、SRR、IDE和18位扩展ID。由于标准帧的IDE位为显性0,扩展帧为隐性1,当标准帧与扩展帧ID前11位相同时,标准帧会赢得仲裁。

在J1939扩展帧中,29位ID的最高3位是优先级P(0~7,0最高)。无人矿卡的报文优先级设计通常遵循安全相关优先原则:例如电机故障、电池热失控报警、液压压力异常等安全关键报文使用P=3或更高优先级;而温度、SOC、车速等周期性状态报文使用P=6;诊断请求与响应使用P=6或P=7。实际配置时,同一功能域内应避免多个高优先级报文集中占用总线,否则会造成低优先级报文延迟甚至丢帧。

一个实用的判断方法是:抓取总线负载较高时段的报文,统计各ID的实际发送间隔与理论周期偏差。若某低优先级报文周期从100ms漂移到150ms以上,说明总线仲裁竞争激烈,需要复核优先级分配或降低高频报文发送率。

三、无人矿卡报文分类方法

矿卡报文分类不能只按“谁发的”来分,而应按“功能域+数据语义+安全等级”三个维度综合归类。常用做法是先按系统划分功能域,再在每个域内按PGN(参数组编号)或自定义ID段建立映射表。

动力系统:包括发动机/电机控制器、变速箱、油门踏板等。典型报文如电机转速、扭矩指令、实际扭矩、挡位状态。此类报文多为扩展帧,周期10~50ms,优先级较高。

电池系统:包括BMS主控与从控,报文涵盖总电压、总电流、SOC、单体最高/最低温度、绝缘电阻、继电器状态。安全相关报文(如热失控预警)应单独分配高优先级ID段。

液压系统:包括举升油缸压力、转向液压压力、油温、泵状态。矿卡举升与转向直接关系安全,压力异常报文优先级应高于一般状态量。

感知系统:包括激光雷达、毫米波雷达、摄像头控制器的状态与目标信息。感知数据量大,常通过CAN FD或以太网传输,传统CAN上多传输状态心跳、故障码和时间同步报文,周期相对宽松。

建立分类表时,建议字段包括:功能域、报文名称、帧类型、ID(十六进制)、优先级、周期、数据长度、关键信号及字节位置、安全等级。这张表既是解析配置的依据,也是诊断时快速定位问题的索引。

实操建议:初次接触某型矿卡时,可先按ID范围粗分——例如0x18FFxxxx段多为J1939广播报文,0x18FExxxx段多为诊断响应,0x0Cxxxxxx段多为标准帧传感器数据。粗分后再逐条核对DBC或厂家协议文档,避免凭经验误判。

四、从原始帧到系统归属的判断流程

拿到一帧数据,例如 18 FF 50 12 34 56 78 90 12,先看IDE位确认是扩展帧,再将29位ID拆为优先级、PF、PS、SA。假设解析出PF=0xFF、PS=0x50、SA=0x12,则可根据PGN映射表判断其属于哪个参数组、由哪个源地址发出。随后对照分类表确认功能域,最后按字节位置提取信号值。整个过程依赖前期的分类表质量,表越完整,诊断越快。

需要强调的是,不同厂家对同一功能可能使用自定义ID段而非标准J1939 PGN,因此分类表必须以实际车型的协议文档为准。教学中给出的ID段和周期均为示例性假设,实际项目应通过抓包与文档交叉验证后固化。