车用CAN总线网络快速原型的设计实现
时间:03-16
来源:互联网
点击:
1 引言
随着车用网络中被控节点数量和控制复杂度的不断增加,为了满足控制要求、降低控制系统开发成本,汽车生产厂商和汽车设计单位对车用嵌入式软件开发工具的要求越来越高。目前,市场上已经存在一些针对这一应用领域的软件开发技术和软件开发工具,例如基于快速原型的软件设计技术和MATLAB/Simulink、dSPACE开发工具。基于快速原型的软件设计技术是指软件设计者通过创建和维护嵌入式软件的功能模型来描述软件功能,并且使用面向微处理器的自动代码生成技术实现下位机代码快速生成的软件开发方法。使用这一技术可以提高嵌入式软件的开发效率,降低开发成本。
但是目前的软件开发工具都侧重于单电控单元(ECU)建模和验证软件在单ECU环境下的执行效率和性能;对控制策略在网络场景下的鲁棒性和特征分析支持有限。另一方面,网络协议仿真和分析工具,如OPNET虽然可以提供网络场景下协议性能的分析 [6],但是由于OPNET上开发的仿真代码无法直接移植到控制器上,所以开发工作不能方便地实现针对目标系统的重用。
如果我们针对车用CAN总线网络的应用场景,将基于快速原型的嵌入式软件设计和基于网络仿真的分析相结合,实现车用CAN总线网络的快速原型。在设计前期用模型定义的虚拟硬件代替没有设计完成或者拥有成本太高的实际硬件,进行初期的系统设计分析;当相应的硬件到位后,替换虚拟硬件,将模型代码转化成面向目标系统的目标代码,进行更接近实际系统的验证分析;最后当所有实际控制软件、控制器硬件和被控硬件都完成时,进行集成的全系统实时仿真。这样可以解决使用相互独立的工具开发模型和进行仿真验证所存在的问题。
本文通过对车用CAN总线网络快速原型的设计实现,提供了一种对车用CAN总线网络进行设计、仿真和性能分析的系统;系统使用虚拟硬件的方法,通过在Simulink中构造典型车用环境相关的控制器模型和被控对象模型,以及在Windows环境下构造CAN卡仿真程序TH-CAN-Vcard和CAN总线分析工具TH-CAN_Scope,针对车用CAN总线网络场景,实现了CAN总线网络环境下控制策略仿真分析和控制代码生成的有机结合。
2 系统设计与实现
2.1 车用CAN总线网络的特征分析
CAN 总线是一种串行通信总线。使用带有冲突检测的载波侦听多路访问方式(即CSMA/CD)进行总线仲裁与控制。为了对车用CAN总线在网络场景下的性能进行规范,国际标准化组织ISO和美国汽车工程师协会SAE对CAN通信诊断的基准环境都制订了相关的国际标准。这些标准依据CAN协议的分层结构,从不同层次定义基准测试要求。例如:SAE J2012和ISO/DIS 15031-6对应应用层故障诊断的定义;[3] [7]ISO/DIS15765-2对应网络层通信协议,通过定义无应答分段数据传送协议(USDT)提供长消息数据分段/重组、带流量控制的数据传输和板上控制单元与板外测试工具间消息的超时处理控制。[2]
另一方面,各个汽车生产厂家也根据这些国际标准制订了自己的企业标准,用以规范ECU产品供应商的产品。如戴姆勒克莱斯勒-奔驰集团的CAN通信标准软件模型分为车辆诊断相关的模块和与车辆诊断无关的模块两部分。其中车辆诊断相关的模块又分为诊断协议服务(KWP2000)和网络传输协议服务 (ISO-15765-2) ,分别对应应用层服务和网络层服务的功能描述,定义相关的基准环境参数和测试消息序列。[2]
这些标准对于车用环境下基于CAN总线的诊断服务的内容、网络传送消息序列间的逻辑关系和时延要求给出了详细定义。而依据这些要求,提供一个CAN总线网络快速原型,真实地模拟具有给定特征的消息序列和数据流,再现可能出现的干扰和误码信号就是本设计的核心技术工作。这一工作成果可以提供对网络流量、网络效率和网络响应间相互关系的分析功能,仿真和验证车用CAN网络环境中ECU控制代码的鲁棒性和实时性。
2.2 快速原型系统的结构与实现
本快速原型系统有三类节点:有物理CAN硬件接口的实际CAN节点、由TH-CAN-Vcard与Simulink模型组成的虚拟CAN节点和运行TH-CAN-Scope分析工具的监控节点。在设计仿真实验时,节点的数目没有限制,仅受具体的CAN应用层的编址方案影响。第一类节点是我们通常使用的CAN节点,这里重点描述后两类节点的实现。
2.2.1 虚拟CAN节点
虚拟CAN节点由TH-CAN-Vcard与Simulink模型组成,节点实现如图1所示。当物理CAN卡不存在时,采用虚拟硬件技术,通过选择CAN卡驱动库提供的虚拟CAN通道,同时将开发的VCANCtrl控制对象实例化成COM服务器(COM Server)就可以在单机下建立COM服务器与MATLAB中模型(作为COM客户机)间的联系。虚拟接收/发送CAN消息到CAN总线的过程,为 Simulink下建立的模型提供基本的CAN通信测试功能。
当物理CAN卡存在时,可以直接将模型中的目标CAN通道进行修改,从而使MATLAB中的模型具备与其它物理CAN节点通信的功能,这时多个位于不同PC机上的模型和多个ECU硬件上的控制器代码可以通过CAN总线建立一个车用CAN网络仿真分析环境。
图1 虚拟CAN节点的实现
TH-CAN-Vcard则是在Windows环境下使用 Visual Studio .NET和KVASER公司CAN卡驱动库开发的CAN卡仿真程序。我们通过ActiveX技术开发了VCANCtrl控制对象,并在VCANCtrl中实现了以下的内部函数:
VCAN_Read 报文接收函数;入口参数为CAN通道句柄、返回参数为在接收缓冲区中的CAN报文的ID、数据包、长度、标识和时间戳。
VCAN_Write 报文发送函数;入口参数为CAN通道句柄,以及待发送CAN报文的ID、数据包、长度和标识。
VCAN_Start CAN卡初始化函数;入口参数为所选CAN通道号、波特率、通道开启模式、同步模式和同步段,以及CAN控制器工作模式。
VCAN_Close CAN卡关闭函数;入口参数是CAN卡初始化成功时所返回的句柄。
2.2.2 监控节点
监控节点是进行CAN总线消息序列监测和控制的节点,运行TH-CAN-Scope - CAN消息仿真分析工具。TH-CAN-Scope是仿真CAN消息序列和进行仿真结果记录分析的工具,是使用KVASER公司的CANLIB SDK开发的 Windows 下的应用程序。
TH-CAN-Scope的CAN消息处理功能包括:创建/编辑消息流序列、CAN通信管理、CAN消息序列跟踪、控制台人机接口和用于消息序列管理的数据库维护。其中创建/编辑消息流序列、CAN消息序列跟踪、控制台人机接口和与数据库操作相关的消息序列管理使用用户线程。而CAN通信管理对实时性要求较高,使用独立的工作线程,两个线程通过使用Windows 下的消息处理机制相互通信。
另外,TH-CAN-Scope提供的分析功能包括:在线显示CAN报文、在线统计CAN总线的使用情况、记录总线上的CAN报文、主动发送/循环发送CAN扰动报文。并且将一段时间内收集的CAN报文记录在数据库中,可以进行更详细深入的性能分析,通过使用 CAN报文编辑工具,可以指定监控节点在时间触发(在指定的相对时间发送某个/某组CAN消息)和事件触发(收到某个CAN报文或收到某类CAN报文时发送指定的CAN报文序列)机制下发送触发报文,以考察CAN总线的性能。
2.3 系统实现技术
2.3.1 MATLAB外部程序接口的实现
TH-CAN-Vcard为MATLAB下的控制器模型和被控模型提供CAN通信的功能,采用了COM 技术。与用DDE技术实现的Matlab外部通信方式相比[4], COM技术的性能更好,在Emanuele Ruffaldi等人所做的测试中, COM与DDE相比,写性能提高了10倍,读性能提高了30多倍[5]; 另外MATHWORKS 对 DDE接口现在也不再进行继续的开发,而推荐使用COM接口。
具体使用时,首先我们在Simulink中构造VCAN发送模块和 VCAN接收模块,使用M语言中的actxcontrol命令将VCANCtrl COM对象实例化,获得其句柄,然后就可以通过这个实例化句柄调用COM对象中相应的VCAN_Write和VCAN_Read函数,实现Matlab中控制模型的CAN通信支持,在使用上等同于一个有句柄的设备。
2.3.2 数据流模拟和节点同步的实现
为了在CAN总线上产生指定的CAN消息序列,我们通过TH-CAN-Scope定义需要的报文序列,然后通过时间触发和事件触发相结合的方式,定义对总线上的CAN消息的响应操作,而相应的控制逻辑,则通过Simulink模型来实现。所以实际的控制策略类似于分布于各个CAN节点中。
节点间的同步是指在总线上的所有CAN节点应该能够在某一时刻同时产生各自指定的消息序列。使用由TH-CAN-Scope广播发送自定义的 CAN同步发送消息,启动各节点计时器的方式,可以实现一定精度的节点同步。
2.3.3 CAN总线性能分析的实现
在进行CAN总线的性能分析时,我们实现了以下的分析功能:考察总线负载(包括节点数、各节点信息量和各节点设置的总线速率)的影响;考察节点优先级策略的影响;考察容错策略(例如发送接收错误率过高的节点应该主动退出CAN总线网络)的影响;以及考察CAN网络实时性能,主要包括网络报文消息时延的大小范围以及报文消息时延的变化。其中,时延大小描述了报文时延的静态特性,而时延变化则描述了报文时延的动态特性。
随着车用网络中被控节点数量和控制复杂度的不断增加,为了满足控制要求、降低控制系统开发成本,汽车生产厂商和汽车设计单位对车用嵌入式软件开发工具的要求越来越高。目前,市场上已经存在一些针对这一应用领域的软件开发技术和软件开发工具,例如基于快速原型的软件设计技术和MATLAB/Simulink、dSPACE开发工具。基于快速原型的软件设计技术是指软件设计者通过创建和维护嵌入式软件的功能模型来描述软件功能,并且使用面向微处理器的自动代码生成技术实现下位机代码快速生成的软件开发方法。使用这一技术可以提高嵌入式软件的开发效率,降低开发成本。
但是目前的软件开发工具都侧重于单电控单元(ECU)建模和验证软件在单ECU环境下的执行效率和性能;对控制策略在网络场景下的鲁棒性和特征分析支持有限。另一方面,网络协议仿真和分析工具,如OPNET虽然可以提供网络场景下协议性能的分析 [6],但是由于OPNET上开发的仿真代码无法直接移植到控制器上,所以开发工作不能方便地实现针对目标系统的重用。
如果我们针对车用CAN总线网络的应用场景,将基于快速原型的嵌入式软件设计和基于网络仿真的分析相结合,实现车用CAN总线网络的快速原型。在设计前期用模型定义的虚拟硬件代替没有设计完成或者拥有成本太高的实际硬件,进行初期的系统设计分析;当相应的硬件到位后,替换虚拟硬件,将模型代码转化成面向目标系统的目标代码,进行更接近实际系统的验证分析;最后当所有实际控制软件、控制器硬件和被控硬件都完成时,进行集成的全系统实时仿真。这样可以解决使用相互独立的工具开发模型和进行仿真验证所存在的问题。
本文通过对车用CAN总线网络快速原型的设计实现,提供了一种对车用CAN总线网络进行设计、仿真和性能分析的系统;系统使用虚拟硬件的方法,通过在Simulink中构造典型车用环境相关的控制器模型和被控对象模型,以及在Windows环境下构造CAN卡仿真程序TH-CAN-Vcard和CAN总线分析工具TH-CAN_Scope,针对车用CAN总线网络场景,实现了CAN总线网络环境下控制策略仿真分析和控制代码生成的有机结合。
2 系统设计与实现
2.1 车用CAN总线网络的特征分析
CAN 总线是一种串行通信总线。使用带有冲突检测的载波侦听多路访问方式(即CSMA/CD)进行总线仲裁与控制。为了对车用CAN总线在网络场景下的性能进行规范,国际标准化组织ISO和美国汽车工程师协会SAE对CAN通信诊断的基准环境都制订了相关的国际标准。这些标准依据CAN协议的分层结构,从不同层次定义基准测试要求。例如:SAE J2012和ISO/DIS 15031-6对应应用层故障诊断的定义;[3] [7]ISO/DIS15765-2对应网络层通信协议,通过定义无应答分段数据传送协议(USDT)提供长消息数据分段/重组、带流量控制的数据传输和板上控制单元与板外测试工具间消息的超时处理控制。[2]
另一方面,各个汽车生产厂家也根据这些国际标准制订了自己的企业标准,用以规范ECU产品供应商的产品。如戴姆勒克莱斯勒-奔驰集团的CAN通信标准软件模型分为车辆诊断相关的模块和与车辆诊断无关的模块两部分。其中车辆诊断相关的模块又分为诊断协议服务(KWP2000)和网络传输协议服务 (ISO-15765-2) ,分别对应应用层服务和网络层服务的功能描述,定义相关的基准环境参数和测试消息序列。[2]
这些标准对于车用环境下基于CAN总线的诊断服务的内容、网络传送消息序列间的逻辑关系和时延要求给出了详细定义。而依据这些要求,提供一个CAN总线网络快速原型,真实地模拟具有给定特征的消息序列和数据流,再现可能出现的干扰和误码信号就是本设计的核心技术工作。这一工作成果可以提供对网络流量、网络效率和网络响应间相互关系的分析功能,仿真和验证车用CAN网络环境中ECU控制代码的鲁棒性和实时性。
2.2 快速原型系统的结构与实现
本快速原型系统有三类节点:有物理CAN硬件接口的实际CAN节点、由TH-CAN-Vcard与Simulink模型组成的虚拟CAN节点和运行TH-CAN-Scope分析工具的监控节点。在设计仿真实验时,节点的数目没有限制,仅受具体的CAN应用层的编址方案影响。第一类节点是我们通常使用的CAN节点,这里重点描述后两类节点的实现。
2.2.1 虚拟CAN节点
虚拟CAN节点由TH-CAN-Vcard与Simulink模型组成,节点实现如图1所示。当物理CAN卡不存在时,采用虚拟硬件技术,通过选择CAN卡驱动库提供的虚拟CAN通道,同时将开发的VCANCtrl控制对象实例化成COM服务器(COM Server)就可以在单机下建立COM服务器与MATLAB中模型(作为COM客户机)间的联系。虚拟接收/发送CAN消息到CAN总线的过程,为 Simulink下建立的模型提供基本的CAN通信测试功能。
当物理CAN卡存在时,可以直接将模型中的目标CAN通道进行修改,从而使MATLAB中的模型具备与其它物理CAN节点通信的功能,这时多个位于不同PC机上的模型和多个ECU硬件上的控制器代码可以通过CAN总线建立一个车用CAN网络仿真分析环境。
![](../img/eec-system/system-195138iwxstj3yddu.gif)
图1 虚拟CAN节点的实现
TH-CAN-Vcard则是在Windows环境下使用 Visual Studio .NET和KVASER公司CAN卡驱动库开发的CAN卡仿真程序。我们通过ActiveX技术开发了VCANCtrl控制对象,并在VCANCtrl中实现了以下的内部函数:
VCAN_Read 报文接收函数;入口参数为CAN通道句柄、返回参数为在接收缓冲区中的CAN报文的ID、数据包、长度、标识和时间戳。
VCAN_Write 报文发送函数;入口参数为CAN通道句柄,以及待发送CAN报文的ID、数据包、长度和标识。
VCAN_Start CAN卡初始化函数;入口参数为所选CAN通道号、波特率、通道开启模式、同步模式和同步段,以及CAN控制器工作模式。
VCAN_Close CAN卡关闭函数;入口参数是CAN卡初始化成功时所返回的句柄。
2.2.2 监控节点
监控节点是进行CAN总线消息序列监测和控制的节点,运行TH-CAN-Scope - CAN消息仿真分析工具。TH-CAN-Scope是仿真CAN消息序列和进行仿真结果记录分析的工具,是使用KVASER公司的CANLIB SDK开发的 Windows 下的应用程序。
TH-CAN-Scope的CAN消息处理功能包括:创建/编辑消息流序列、CAN通信管理、CAN消息序列跟踪、控制台人机接口和用于消息序列管理的数据库维护。其中创建/编辑消息流序列、CAN消息序列跟踪、控制台人机接口和与数据库操作相关的消息序列管理使用用户线程。而CAN通信管理对实时性要求较高,使用独立的工作线程,两个线程通过使用Windows 下的消息处理机制相互通信。
另外,TH-CAN-Scope提供的分析功能包括:在线显示CAN报文、在线统计CAN总线的使用情况、记录总线上的CAN报文、主动发送/循环发送CAN扰动报文。并且将一段时间内收集的CAN报文记录在数据库中,可以进行更详细深入的性能分析,通过使用 CAN报文编辑工具,可以指定监控节点在时间触发(在指定的相对时间发送某个/某组CAN消息)和事件触发(收到某个CAN报文或收到某类CAN报文时发送指定的CAN报文序列)机制下发送触发报文,以考察CAN总线的性能。
2.3 系统实现技术
2.3.1 MATLAB外部程序接口的实现
TH-CAN-Vcard为MATLAB下的控制器模型和被控模型提供CAN通信的功能,采用了COM 技术。与用DDE技术实现的Matlab外部通信方式相比[4], COM技术的性能更好,在Emanuele Ruffaldi等人所做的测试中, COM与DDE相比,写性能提高了10倍,读性能提高了30多倍[5]; 另外MATHWORKS 对 DDE接口现在也不再进行继续的开发,而推荐使用COM接口。
具体使用时,首先我们在Simulink中构造VCAN发送模块和 VCAN接收模块,使用M语言中的actxcontrol命令将VCANCtrl COM对象实例化,获得其句柄,然后就可以通过这个实例化句柄调用COM对象中相应的VCAN_Write和VCAN_Read函数,实现Matlab中控制模型的CAN通信支持,在使用上等同于一个有句柄的设备。
2.3.2 数据流模拟和节点同步的实现
为了在CAN总线上产生指定的CAN消息序列,我们通过TH-CAN-Scope定义需要的报文序列,然后通过时间触发和事件触发相结合的方式,定义对总线上的CAN消息的响应操作,而相应的控制逻辑,则通过Simulink模型来实现。所以实际的控制策略类似于分布于各个CAN节点中。
节点间的同步是指在总线上的所有CAN节点应该能够在某一时刻同时产生各自指定的消息序列。使用由TH-CAN-Scope广播发送自定义的 CAN同步发送消息,启动各节点计时器的方式,可以实现一定精度的节点同步。
2.3.3 CAN总线性能分析的实现
在进行CAN总线的性能分析时,我们实现了以下的分析功能:考察总线负载(包括节点数、各节点信息量和各节点设置的总线速率)的影响;考察节点优先级策略的影响;考察容错策略(例如发送接收错误率过高的节点应该主动退出CAN总线网络)的影响;以及考察CAN网络实时性能,主要包括网络报文消息时延的大小范围以及报文消息时延的变化。其中,时延大小描述了报文时延的静态特性,而时延变化则描述了报文时延的动态特性。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)