纯电动客车CAN通信上位机设计研究

时间:2022-06-24 10:59:31

纯电动客车CAN通信上位机设计研究

摘要:介绍开发CAN通信上位机时对报文自动解析的四种逻辑设计方法,并根据上位机前面板显示需求特点的不同,采用中断法和多任务法进行CAN上位机的编程及进行应用举例。

关键词:纯电动客车;上位机;CAN

通信CAN总线是汽车领域目前应用最广泛的现场总线之一[1],也是纯电动客车各电气件最主要的通信方式。其通信协议是连接CAN报文与各电气件物理参数的纽带,一般由各车厂根据实际需求制定。人工直接解析CAN报文是一项费事又耗力的工作,而通过上位机软件解析则极大程度上解决了此问题,提高了工作效率,缩短了工程时间。基于此,本文采用一种根据CAN协议自动解析报文并保存数据的方法,为纯电动客车开发上位机软件[2-3]。

1上位机解析CAN报文的设计方法

1.1软件程序的设计流程本上位机设计是基于QtCreator4.3.1的接口库函数ControlCAN.lib和NILabVIEW2018的接口库函数ControlCAN.dll二次开发而成[4-5]。接口库函数的基本处理流程如图1所示,该处理流程的底层函数结构如图2所示。软件设计过程中的基本处理流程应依次为打开设备→检测有无设备打开信息异常→清空缓冲区→复位CAN→读取CAN缓冲区帧数→读取CAN内容→关闭设备[6]。在软件系统内,根据接口库函数二次开发的设计要求,结合纯电动客车CAN总线数据量大的特点,为了尽可能不使上位机丢帧,程序内部应将读取CAN报文程序[7]设为中断程序,即当收到CAN报文后,程序立即响应中断,读取CAN报文并呈递给程序设定参数,然后将报文解析出来,这样才能最大几率保证接收的CAN报文不丢失[8]。1.2对报文自动解析的逻辑设计方法报文的自动解析过程是程序设计最重要的一环。根据CAN报文SAEJ1939的规定[9],在纯电动客车上,从CAN总线接收到的报文数据帧为8个字节,分别记为BYTE1……BYTE7、BYTE8,该数据均为十六进制数。根据CAN通信协议[10],找到相应ID的报文,然后由协议中的比例和偏置解析出相应的物理数据。本上位机的数据解析设计使用以下几种方式。1.2.1对报文的直接处理协议规定,需要解析的字节BYTE。若比例为x、偏置为y,则解析出的结果z为(1)假设上位机收到BMS的报文[11]数据为{01,02,03,04,05,06,07,08},协议约定第2个字节为驾驶员制动踏板值,比例为0.4%,偏置为0,则当前驾驶员制动踏板值解析为(0x02)×0.4%+0=0.8%(2)1.2.2高低字节并行处理某ID的报文BYTE2和BYTE1对应电机控制器直流电压的高字节与低字节,且比例都为x、偏置为y,则在程序中电机控制器直流电压解析的公式为z=(BYTE2×16×16+BYTE1)×x+y(3)假如此ID接收到的数据为{01,3F,03,04,05,06,07,08},协议约定BYTE1为低字节,BYTE2为高字节,比例为0.1V/bit,偏置为-1000V,则电机控制器直流侧电压值通过十六进制转换解析为(0x3F×16×16+0x01)×0.1-1000=612.9V(4)1.2.3单个位判断处理根据通信协议,对报文的解析并不都是对数据的处理,还有对报文某位的判断。例如报文中某字节的某位为1代表纯电动客车后舱门打开,为0代表后舱门关闭,则此时需要先采用布尔运算,然后再判断。对某字节中单个位的判断逻辑:将某字节与需要判断的位为1、其他位为0的单字节数进行与运算。若与运算后的数据与该单字节数相同,则表示该位为1,反之为0。设某报文为{x1,x2,x3,x4,x5,x6,x7,x8},假设需要将报文BYTE8转换为二进制数后的最高位(第7位)进行判断。根据上段判断规则,应在程序设计中首先应该将BYTE8与0x80(第7位为1的二进制1000000的十六进制)进行与运算,如果运算结果为0x80,则说明BYTE8最高位bit7为1;反之为0,伪代码如式(5)所示:if((x8&0x80)==0x80){BYTE8最高位为1;}elseif((x8&0x80)==0x00){BYTE8最高位为0;}(5)例如,某字节的BYTE3bit0位代表车辆当前状态为前进挡,1有效,0无效。若收到该帧报文为{01,02,03,04,05,06,07,08},首先应将BYTE3与0x01作与运算,判断bit0位,(0x03)&(0x01)=0x01,此时可以得出BYTE3的bit0为1,所以应将车辆前进挡的状态发送给上位机,伪代码如式(6)所示:if((BYTE3&0x01)==0x01){上位机显示车辆为前进挡;}elseif((BYTE3&0x01)==0x00){上位机显示车辆为非前进挡;}(6)综上所述,对字节中单个位的判断即与所对应字节的位置1的字节数相与,当得到相同的十六进制数,即可说明当前位为1,反之为0,然后在程序中使用判断语句达到相应的效果。1.2.4对多个位判断处理多个位联合判断的处理方式与单个位处理方式类似,但多了对多位进行与运算的处理。例如某ID的BYTE5,bit7~4表示整车高压电池电芯类型,0001表示磷酸铁锂电芯,0010表示锰酸锂电芯,0011表示钴酸锂电池,1111表示其他。由于是对bit7~4位的逻辑判断,则应当对相应位作逻辑与运算处理,伪代码如式(7)所示:

2上位机物理数据显示的设计

在CAN通信上位机中对数据逻辑解析后,再将数据显示到前面板上同样也是一项重要的工作[12]。工程应用中,由于需要处理的CAN报文数据量巨大,纯电动客车CAN总线在波特率为250kbps的情况下,一般能达到200~600帧/s的数据量。因此,如果处理不好前面板显示任务,会由于数据量过大,造成数据拥堵、程序卡死、崩溃等情况。本上位机采用两种方法处理物理数据的显示,分别称为中断法显示和多任务处理显示。2.1中断法显示物理数据中断法[13]显示的程序处理流程如图3所示。当主程序处理其他程序接收到CAN报文触发程序中断后,在中断中将会发生4个步骤,先将接收到的CAN报文提取出来,然后使用逻辑算法将报文自动解析成各物理值,最后将物理值传递给前面板,最终前面板将数据显示在软件界面上。中断法显示物理数据的优点是能够第一时间使接收到的CAN报文得到处理,不会因为其他原因而使数据的处理延迟,数据处理的实时性较高;缺点为对处理器的运算速度要求较高。若上位机需要导出EXCEL数据,则可能会出现周期小的报文的物理数据量多于周期大的报文的物理数据量。因此,中断法适用于需要实时显示车辆状态的上位机软件,不适合需要导入物理数据到图表类的数据显示软件。2.2多任务法显示物理数据多任务处理显示的流程图如图4所示。主程序1处理初始化程序和其他类型程序,而CAN总线有报文发送后触发中断响应,中断子程序接收CAN报文并自动解析出来,然后将各物理数据呈递给全局变量;主程序2负责显示全局变量,并呈递给软件前面板显示。多任务处理的优点是能够大大减少中断程序处理数据的时间,主程序2按一定的周期循环执行,从而使得显示数据与自动解析报文分离,互不干扰,也大大保证了数据的稳定性,尤其适合需要用EXCEL图表类显示数据的CAN上位机软件;其缺点是显示的数据有一定的延迟。由于接收到CAN报文后才能更新全局变量,因此,如果不触发中断,那么全局变量便得不到更新,有一定的延迟性。因此,在实际应用中,如果需要将CAN报文物理数据呈递给EXCEL显示,则使用多任务处理显示的方式;如果是需要实时显示纯电动客车各项参数,更适合使用中断法显示。

3CAN上位机的应用

本上位机是根据某公司纯电动城市客车整车CAN网络通讯协议V3.1.2版本开发而成,主要用于通过整车CAN网络读取纯电动城市客车的相关信息。由于是需要实时快速显示整车各项状态,所以前面板采用中断法显示物理数据,上位机截图如图5所示。用于记录数据的上位机,由于需要将数据呈递给EXCEL,所以采用多任务处理模式,其上位机截图如图6所示。上位机记录数据有两个任务:一个是负责处理初始化程序和解析数据;另一个是以周期为50ms循环显示全局变量。截取的EXCEL如图7所示。可以看出,虽然各物理数据来自于不同周期的报文,但是依然能够以每秒20帧的速度显示出完整的数据表格。这是由于显示程序是一个周期为50ms的循环子程序,所以如果对应物理值的全局变量没有得到更新,那么下一时刻的EXCEL数据记录将会继续继承上一时刻全局变量的数据。

4结束语

本文介绍了一种可行性高的CAN上位机软件制作方法,着重论述了将原始报文转换成物理数据的处理方法。对于上位机前面板处理数据的显示方式,可根据实际情况采用多任务法和中断法两种不同的处理方式。有针对性地处理,不仅能够提高变成效率,而且还能使上位机运行稳定。

作者:徐希 戈小中 童晓辉 刘俊 单位:东风襄阳旅行车有限公司