网站大量收购闲置独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

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

介绍开发CAN通信上位机时对报文自动解析的四种规律设计方法,并依据

上位机前面板显示需求特点的不同,采纳中断法和多任务法进展CAN上位

机的编程及进展应用举例。

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

通信CAN总线是汽车领域目前应用最广泛的现场总线之一[1],也是

纯电动客车各电气件最主要的通信方式。其通信协议是连接CAN报文与各

电气件物理参数的纽带,一般由各车厂依据实际需求制定。人工直接解析

CAN报文是一项费事又耗力的工作,而通过上位机软件解析则极大程度上

解决了此问题,提高了工作效率,缩短了工程时间。基于此,本文采纳一

种依据CAN协议自动解析报文并保存数据的方法,为纯电动客车开发上位

机软件[2-3]。

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

1.1软件程序的设计流程本上位机设计是基于QtCreator4.3.1的接

口库函数ControlCAN.lib和NILabVIEW2022的接口库函数

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位代表

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档