基于LabVIEW的电池管理系统与充电机通信协议测试
2.2 软件实现
利用LabVIEW多线程编程以及生产者消费者结构实现J1939协议。分别为未拆分的发送报文、已拆分发送报文、未重组的接收报文、已重组的接收报文建立队列。创建已重组报文读取线程,已重组报文出队列用于应用层协议。创建接收报文处理线程,用于按多帧传输机制处理接收到的CAN 2.0数据帧,程序流程图如图3所示,经过目的地址过滤报文后,利用条件结构按照报文参数组编号进行分类处理,在计算参数组编号时要注意PDU1与PDU2格式的区别,主要分为以下几种情况:
数据小于7 B的正常数据报文:直接入已处理接收报文队列供应用层使用;请求发送帧TP.CM_RTS:由于两个节点之间同一时间最多只能有一个发送和一个接收的多帧传输链接,若这时已有一个接收链接,则需要发送放弃链接帧TP.ABORT告知发送者,若无接收链接,创建新的接收状态机并插入接收状态机数组。接收状态机为一个数据簇,包含了参数组编号、下一个接收数据包编号、数据包总数、当前已接收字节数、字节总数、以及已接收字节数组。之后应发送准备发送帧TP.CM_CTS 通知发送者发送数据包,同时应开始计时,若发送者响应时间超过规定时间,应发送放弃帧TP.ABORT;准备发送帧TP.CM_CTS:此报文为接收者对发送报文的应答,此次发送状态机已建立,搜索相应状态机,根据准备发送帧要求拆分数据创建数据包TP.DT;数据包TP.DT:搜索相应的接收状态机并核对是否与目前状态机相符,如果相符则对数据进行重组存入状态机的接收字节数组,若不符则发送该参数组编号的放弃链接帧,最后判断多帧传输是否结束,并根据是否为全局报文决定是否发送完成链接帧;完成链接帧TP.EndofMsgACK:表示相应的多帧发送链接已完成,删除相应的发送状态机。广播公告消息TP.
CM_BAM:收到全局消息的请求链接帧,只需建立相应的接收状态机,等待接收数据包,而不需要任何的应答。


2.3 J1939平台应用效果
定义电池管理系统BMS和LabVIEW的J1939协议地址分别为244和86.首先由BMS发送PGN为256的9 B报文给LabVIEW,CANoe监视到总线时序如图5所示。

由第一帧ID可以看出源地址为0xF4(244),目的地址为0×56(86),PGN为0xEC00,因此该帧为链接管理帧TP.CM,并且Data 域控制字节(第1 字节)为0×10,综上该帧为BMS 发送给LabVIEW 的请求发送帧,并由Data域可以看出此次报文共有0×09字节(第2,3字节),数据包共有0×02 包(第4 字节),PGN 为0×0100(第6,7,8 字节)。同理第二帧为LabVIEW发送的准备发送帧,通知BMS 从第0×01 包(第3 字节)开始发送0×02(第2 字节)包数据包。待接收到BMS发送的两帧TP.DT,LabVIEW发送TP.EndofMsgACK 代表此次多帧传输完成。Lab-VIEW接收重组后的数据如图6所示。

同理分析LabVIEW 作为发送节点的情况,总线时序图如图7所示,LabVIEW拆分前的发送数据如图8所示。综上分析,利用LabVIEW 开发平台很好地实现了J1939协议。


3 通信协议测试软件的开发
通信协议将整个通信分为多个阶段:充电握手阶段、充电参数配置阶段、充电阶段、充电结束阶段。每个通信阶段均涉及充电机与BMS 的信息交互,每次信息交互均有超时限制。为了实现对通信协议进行测试,不仅要模拟充电机与BMS 进行通信,还要实时监测通信的状态,判断通信过程是否出错并解析BMS 发送的信息。测试软件主要测试通信阶段出现的时序错乱以及信息交互超时这两种错误。
在已开发J1939协议基础上进行测试软件的开发,J1939协议提供了两个接口:需要发送报文直接入未处理发送报文队列、已处理接收报文出队列供应用层使用。通信阶段改变利用LabVIEW 状态机结构来实现。

通信相关文章:通信原理
评论