文章快速检索  
  高级检索
基于J1939的车载CAN总线模拟系统设计
秦亚军, 康维新
哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001    
摘要:针对机动车联网终端对于测试环境的需求,应用SAE J1939协议进行了车载CAN总线仿真环境的设计。系统由PC端上位机软件和CAN总线模块下位机组成。PC端上位机界面由跨平台特性优良的Qt Craetor设计开发,用于设定、显示仿真环境的车辆参数以及串口的通信;下位机方面通过MCU完成与上位机的串口通信以及通过CAN总线模块将仿真环境的车辆参数的传输到CAN总线上。经过测试,该系统工作稳定,满足本项目对于测试环境的要求,同时可以模拟普通的车载网络,具有一定的应用价值。
关键词CAN总线     SAE J1939协议     Qt     车联网终端    
Design of CAN Bus simulation environment for vehicles based on J1939
QIN Yajun, KANG Weixin     
College of Information and Communication Engineering, Harbin Engineering University, Harbin 150001, China
Abstract:Aiming at the demand of Internet of vehicles terminal for the test environment, a simulation environment of vehicle CAN bus based on SAE J1939 protocol was designed. The system is composed of upper computer software on PC and lower computer of CAN bus module. The upper computer software interface is designed by QtCreator with excellent cross-platform features, it sets and displays vehicle parameters of simulation system and communicates with a serial port. The lower computer platform communicates with the PC through serial ports by MCU and sends the vehicle parameters by CAN bus module. The test results show that the system can work stably, meeting the requirements of the project for the test environment very well, and can simulate normal on-board network at the same time. The system has a certain application value in the vehicle communication system.
Key words: CAN Bus     SAE J1939 protocol     Qt     Internet of vehicles terminal    

随着机动车保有量的增加,产生了交通堵塞、事故频发等一系列问题。车联网的研究引起各国政府和相关机构的高度重视。为了公路运输进行信息化的管理,提出了车联网关键技术的研究课题,主要涉及车联网终端的研究,课题中同时需要考虑到测试环境的搭建、以及进行车联网终端系统测试。SAE J1939协议基于Bosch公司开发的CAN(controller area network),作为描述重型车辆现场总线的一种网络应用,被广泛应用于商用车辆,如大型客车和重型货车。现在大部分的测试环境大都是基于CANPro协议分析平台和CAN总线分析仪组合搭建[1],而其存在的主要问题是现有的CAN总线分析仪的价格较高。考虑到研究课题的现实需求,本系统通过MCU控制CAN收发器替代CAN总线分析仪,很好地降低了项目成本。

1 系统整体结构

该系统由主要由PC端上位机和CAN节点收发端2部分组成,系统的整体结构图如图 1所示。

图 1 系统总体结构框图

上位机方面,考虑到上位机的应用范围,该系统采用Qt这样一款跨平台C++图形化界面库开发。Qt良好的跨平台性、丰富的API以及对于第3方类的支持使得开发更为方便,同时Qt的良好封装机制,较好的可重用性,大量的开发文档,使其非常便于用户开发[2]。由于在Qt库中没有具体的串口控制类,在系统中这里使用的是第3方的qextserialport类来实现串口通信,将上位机车辆仿真环境数据发送到MCU。下位机方面,系统采用MCU、MCP2515控制器及TJA1050高速CAN收发器组合的设计,进行与上位机的通信和CAN报文的发送[3]

2 系统硬件设计

系统采用STC89C52RC作为主控芯片,其作为一种低功耗、高性能CMOS 8位微控制器,具有8KB系统可编程Flash存储器,很好地满足系统编程的需求。主控芯片通过RS-232串口芯片接收串口数据并通过CAN模块进行报文发送,CAN总线模块采用Microchip的MCP2515独立CAN协议控制器芯片和Philips的CAN高速收发器TJA1050进行组合。MCP2515完全支持CAN V2.0B技术规范,并能进行标准帧和扩展帧的收发,其自带2个验收屏蔽寄存器和6个滤波寄存器,可以进行报文有效性过滤[4]。MCU通过SPI接口与该器件进行连接,使用标准的SPI读/写指令以及专门的SPI命令来读/写所有的寄存器[5]。TJA1050作为物理媒体连接子层连接于协议控制器和物理传输媒体之间,具有较好的电磁兼容性,电磁辐射极低,电磁抗干扰性极高,同时不上电的节点总线呈现无源特性。TJA1050可以为总线提供差动发送性能,为CAN控制器提供差动接收性能;同时TJA1050具有保护总线引脚,可防止汽车环境中的瞬态干扰,更好的应用于汽车CAN总线的环境中[6]。具体硬件电路如图 2所示。

图 2 系统硬件电路图

3 系统软件设计

系统软件由上位机软件和下位机软件2部分组成。上位机主要包括基于Qt的串口通信程序和基于Qt的图像化界面设计。由于在Qt中并没有特定的串口控制类,所以基于Qt的串口通信程序使用第3方写的qextserialport类进行开发,通信分为手动发送和自动发送。Qt的图形化界面的设计主要是基于qwt控件进行仪表盘的设计,并完成发送数据的实时调整。下位机设计主要是以MCU作为控制芯片,完成串口数据的接收、解码,并提取发送到CAN总线上。

3.1 上位机程序设计

上位机程序主要包括串口通信程序和图形化界面设计2部分。

3.1.1 串口通信程序设计

为了实现Qt下串口通信的实现,这里基于第3方qextserialport类进行开发[7],下面将关键步骤介绍如下:

1)由于Qt库没有特定的串口控制类,所以首先要下载qextserialport-1.2win-alpha.zip,并进行解压。由于该上位机是运行在Windows下,这里需要将相应的文件拷贝到工程当中,在Windows下只需要使用其中的6个文件:qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextserialport.cpp和win_qextserialport.h。

2)打开QtCreator,新建工程,将上述6个文件复制到工程文件夹中,并在工程中添加这6个文件。此时,串口通信的开发环境搭建完成。

3)接下来进行串口的设置的界面设计,包括串口号、波特率、数据位、校验位和停止位。

4)通过信号/槽机制编写各个按钮函数,如打开串口按钮、关闭串口按钮,自动发送按钮对应的函数的编写。

5)串口读写数据函数的编写,为了方便并有效地发送数据,这里通过自定义报文进行发送并增加校验位,减少误码率。

串口通信图像化界面如图 3所示。

图 3 串口通信图形化界面

3.1.2 图形化界面设计

在图形化界面设计上,为了更直观地显示参数,这里采用基于qwt的仪表盘设计,下面将图形化界面设计关键步骤介绍如下[8]

1)下载最新的qwt,这里下的是qwt-6.1.0.zip,并解压后编译,配置。

2)注意在使用时,需要设置一下pro文件,在pro文件下加入如下语句:

include(C:/Qt/qwt-6.1.0/qwtfunctions.pri)

DEFINES *= QWT_DLL

CONFIG += qwt

INCLUDEPATH += C:/Qt/qwt-6.1.0/src

DEPENDPATH += C:/Qt/qwt-6.1.0/src

qwtAddLibrary(qwt)

3)这里通过对QwtDial控件参数的配置获取合适的仪表盘,如车速表、转速表、油量表和油压表等。并且通过QwtWheel控件进行数据的调整。

3.2下位机软件设计

下面主要针对下位机软件的设计流程进行分析[9]。如图 4所示,当函数从主函数开始运行时首先进行初始化程序,其包括串口初始化init_serial()来完成串口工作方式、波特率、数据位的设置,CAN模块初始化Init_Can()来完成Mcp2515工作方式、通信速率、采用中断方式的设置,采用串口中断方式进行上位机发送数据的接收,主函数对接收的报文数据进行解析,并将解析后的CAN信息按相应节点发送到CAN总线上[10]

图 4 软件流程

4 系统测试

将所有硬件模块连接好,各CAN节点的CAN_H端接在一起,CAN_L端接在一起,将车联网系统连接本系统进行测试。

首先如图 5所示,发送的数据为车速60 km/h、转速3 988 r/min、油量60%、油温120 ℃、油压600 kPa。将这些数据处理成相应的格式进行串口发送,其格式为“$,油温,油压,油量,油量,转速,*”,对应的数据格式为“$,120,0600,060,060,3988,*”。

图 5 上位机发送数据显示界面

MCU通过串口接收到数据后进行解析,并以对应的SAE J1939节点进行发送,发送的相应节点信息如表 1所示。

表 1 模拟汽车节点信息
车辆信息节点ID
油温节点18FEEE
油压结点18FEEF
油量节点18FEFC
车速节点18FEF1
转速节点18F004

这里用项目中车联网系统进行接收本系统发送的CAN数据进行测试,车联网系统基于嵌入式系统开发,用MCP2515模块接收数据,并显示在Qt界面上,显示结果如图 6所示。同时进行了自动发送测试,在上位机修改数据可以实时地显示在车辆网系统上,通过长时间车联网终端的显示,可以很直观地测试了系统的准确性、稳定性和可靠性。

图 6 车联网系统显示界面

5 结束语

本系统模拟了基于SAE J1939的车载CAN总线,充分利用Qt的图形化界面编程的良好封装机制,结合signals/slots机制和丰富的API,降低了用户开发难度,更简单快捷完成串口通信和图形化界面的开发。同时其丰富的可扩展性使得图形化界面更加直观。本系统的工作较为直观,并在充分满足功能的同时大大的降低了研发成本,经过测试该系统性能可靠稳定,很好地满足车联网系统对于测试环境的要求,另外对该系统软件进行包装,能够在window系统下良好运行。

本系统设计在满足项目需要的同时,还可以应用于简单汽车网络的模拟和CAN总线培训教学。在整个系统的开发过程中,可以很好地了解并熟悉车辆仪表盘的设计和基于J1939的车辆CAN通信。

参考文献
[1] 吴伟斌, 李礼夫, 刘落实, 等. 基于J1939的汽车CAN总线教学实验系统[J]. 微计算机信息, 2008, 6(2): 274-276.
[2] 吴迪. 零基础学Qt4编程[M]. 北京: 北京航空航天大学出版社, 2010: 10-28.
[3] 许勇, 廖爽, 赵检群, 等. 基于SAE J1939协议的发动机数据采集显示系统[J]. 桂林电子科技大学学报, 2013, 33(3): 205-209.
[4] 龚文, 张辉, 陈超. 基于 CAN 总线的电动汽车车载监控终端[J]. 计算机与现代化, 2013(11): 192-195.
[5] 谢桂波. 基于SPI的CAN总线控制器与MCS-51单片机的接口设计[J]. 电子设计应用, 2010(1): 50-52.
[6] 邢洋, 李立伟, 张洪伟. 基于STM32单片机的CAN总线分析仪的设计[J]. 青岛大学学报: 工程技术版, 2013, 28(1): 19-21.
[7] 霍亚飞. Qt编写串口通信程序全程图文讲解[EB/OL]. [2014-05-08]. http://blog.csdn.net/yafeilinux/article/details/4717706.
[8] 王旭峰. 基于嵌入式技术的风机运行状态在线监测系统开发[D]. 北京: 北京工业大学, 2012: 45-46.
[9] 陈云芳. 基于ARM-Linux的车联网终端技术研究[D]. 哈尔滨: 哈尔滨工程大学, 2013: 61-65.
[10] SAE J1939-71, Vehicle Application Layer[S].

文章信息

秦亚军,康维新
QIN Yajun,KANG Weixin
基于J1939的车载CAN总线模拟系统设计
Design of CAN Bus simulation environment for vehicles based on J1939
应用科技, 2015, (03): 13-16
Applied Science and Technology, 2015, (03): 13-16.
DOI:10.3969/j.issn.1009-671X.201404015

文章历史

收稿日期:2014-07-07
网络出版日期:2015-04-20

相关文章

工作空间