传统的机械式控制系统已经远远不能满足这些需要。随着汽车工业的发展和进步,人们对汽车的动力性、经济性、排放、安全性等方面提出了更高的要求。电子化控制系统以其高精度、高速度、控制灵活、稳定可靠等特点逐渐取代了机械式控制系统。
在国家“十五”、“十一五”863《电动汽车》重大专项燃料电池城市客车项目中清华大学汽车系承担了燃料电池城市客车整车控制系统研发的任务。在燃料电池汽车分布式控制系统中,包括燃料电池发动机、蓄电池、DC/DC和电机等多个部件节点,由整车控制器对各部件的工作进行精确地优化与控制,同时接受来自司机的操作命令,驱动客车行驶。该分布式控制系统信息流量大、控制任务复杂,对实时性要求高。整车控制器必须在保证各信号的实时可靠性、控制算法执行的可靠性以及上位机监控等多个任务之间进行很好的协调,按照相对重要、实时程度正确地处理各任务。
nload="javascript:if(>740)=740" align=center border=0>
图1 整车控制器的V型开发模式
由于上述这些越来越严格的要求,使得整车电子控制系统的要求越来越高。到目前为止,如图1所示的快速控制原型开发模式已经成熟地应用到燃料电池城市客车整车电子控制系统的开发与设计中,即由上层到底层,再由底层到上层的一个V字形过程:首先是控制器的上层功能设计,详细确定控制器将要实现的功能,然后生成目标程序代码,最后是控制器的底层软、硬件实现。
在这个复杂控制系统的开发与实现过程中,满足OSEK/VDX标准的实时操作系统、硬件在环实时仿真、时间触发CAN以及无缝的自动代码生成等最新软件技术的应用,是快速、高效并有效保证质量地完成燃料电池城市客车整车控制系统研发任务的有力保证。本文详细介绍这些最新的汽车电子软件技术在燃料电池城市客车控制系统研究与开发过程中的应用与研究。
2 OSEK /VDX 实时操作系统
由于不同的RTOS产品在功能和API接口上的差异,使得上层应用软件仍不具备完全的平台移植性。针对这种差异,为了满足日益庞大复杂的汽车电子控制软件的开发需要,实现应用软件的可移植性和不同厂商的控制模块间的可兼容性,法、德两国专门针对汽车分布式控制而共同提出的一种开放式汽车电子工业标准OSEK/VDX。OSEK/VDX已经成为汽车领域的实时操作系统标准,它的提出解决了操作系统功能和接口的标准化问题,已在汽车电子控制领域得到了广泛的应用,是车用操作系统的发展方向。
OSEK是一个德文缩写词,意思是“汽车电子的开放系统及其接口标准”。VDX的含义是:“车用分布式执行器”。OSEK操作系统的功能通过VDX进行协调。该接口包括一个实时操作系统、一种独立于通信系统的协议、一种网络管理系统和功能库。
在燃料电池汽车分布式控制系统中,为了满足对燃料电池发动机、蓄电池、DC/DC和电机等多个部件节点的实时控制,正确处理各种综合控制任务,并有效保证控制软件的可重用性、可移植性与可扩展性,基于符合OSEK/VDX标准的实时操作系统进行控制器的开发是十分必要的。
通过建立OSEK标准,将控制器软件的应用层和系统层完全分离开,系统层则通过统一的标准将硬件和系统相关函数封装起来,为上层应用提供统一的开发接口,做到应用和系统完全无关。使得开发者可以更加专心于应用层的开发,大大缩短开发新型模块的周期,降低成本,使应用软件可以做到跨平台、跨结构的移植,而且也为汽车分布式控制网络提供了统一的软件开发平台。OSEK标准还要求系统具有可配置、可剪裁特性,可以灵活地为不同的应用场合配置不同的系统软件环境。
在OSEK/VDX中,任务分为基本任务(Basic Task)和扩展任务 (Extended Task)两种类型。扩展任务与基本任务的主要区别是:扩展任务可以等待事件(Wait Event),并具有Waiting状态;基本任务则没有Waiting状态。
nload="javascript:if(>740)=740" align=center border=0>
图2 OSEK/VDS的任务切换
如图2所示,任务具有running(运行)、ready(预备)、waiting (等待)和suspend(挂起)四种状态,状态转换有Activate(激活)、Start(启动)、Wait(等待)、Release(释放)、Preemped(抢占)和Terminate(终止),具体描述如下见参考文献[1]。
燃料电池城市客车控制系统的研发选用了德国Metrowerks公司开发的OSEK Turbo OS系统。该系统有内核代码小、执行效率高、符合OSEK/VDX标准的优点,并且可以通过Metrowerks公司提供的OSEK Builder软件,快速的配置需要构建的实时操作系统。此外,通过联合使用同样由该公司开发的专门针对MPC500系列的C编译器CodeWarrior,可以使用户快速的将运用程序、控制算法程序与OSEK Turbo OS操作系统相结合,从而构成一个完整的控制系统程序,并可进行实时在线调试。
基于以上软件基础的应用程序开发流程如图3所示。通过OSEK Build环境进行实时操作系统结构的设计,并编译生成包含OSEK Turbo OS内核*.lib库文件。在Codewarrior环境下,具有实时操作系统结构的库文件与底层驱动文件和经过仿真测试的控制算法代码文件一起经过编译连接后生成可执行的镜像文件,通过CAN或SCI通讯将代码下载到目标控制器。在该流程中,实时系统结构、底层的硬件驱动以及上层控制算法的开发相对独立,算法开发人员不需要考虑复杂的底层硬件情况,不但缩短了软件的开发周期,也提高了控制系统的可靠性。
nload="javascript:if(>740)=740" align=center border=0>
图3 基于OSEK Turbo OS的开发流程
3 硬件在环实时仿真
在控制系统设计中很重要的一环就是在控制器实现后,实车测试之前进行硬件在环实时仿真测试。这是因为在整车控制器的开发过程中,利用整车控制器硬件在仿真测试平台构建虚拟的整车现场环境,对控制器进行硬件在环仿真测试,不但可以大大加快整车控制器软、硬件的开发过程,并且开发成功的控制器具有较高的可靠性,因为仿真测试平台可以模拟出在实车试验中难以实现的特殊行驶状态和危险状态,来对整车控制器进行全面的测试。在控制器硬件在环仿真测试中,系统用数学模型来代替,控制器使用实物,系统模型和控制器之间的接口要和实际保持一致,在仿真调试完毕后,达到控制器和系统之间的“垂直安装”或“垂直集成”。控制器在完成硬件在环仿真之后,就可以进入系统集成和测试环节,最后实现初期设计的各项功能和指标,在这个过程中由专业软件MATLAB/Simulink RTW 和 XPC Real-time Target构建的实时仿真平台是实现硬件在环实时仿真的重要工具。
硬件在环实时仿真平台构建了虚拟的整车环境,并基于虚拟的人机交互司机模型将人也作为硬件在环的一个元素引入到实际的仿真测试中,具体结构如图4所示。两个基于工业控制计算机的虚拟平台,分别为虚拟整车平台和虚拟司机平台。虚拟整车平台基于MATLAB/Simulink xPC Target 实时仿真环境,作用是模拟真实燃料电池客车的运行,为测试整车控制器提供所需的虚拟控制对象。虚拟司机平台基于MATLAB/Simulink RTW Target实时仿真环境,作用是模拟真实燃料电池客车的操控机构,配合加速踏板为测试整车控制器提供所需虚拟的驾驶环境。当两个计算机虚拟平台对实际环境进行模拟时,通过数据采集卡、CAN通讯卡与可配置的信号处理装置相连,可配置的信号处理装置对信号进行处理,从而实现真实的复杂整车环境,可以直接与整车控制器连接进行仿真测试试验。并配有基于CAN总线的实时监控装置,可以全过程实时地监控仿真测试试验。
nload="javascript:if(>740)=740" align=center border=0>
图4 硬件在环实时仿真测试平台
整车虚拟平台承担再现真实燃料电池汽车运行的任务,是整个测试平台的核心部件。由于燃料电池汽车结构复杂,控制对象较多,为了真实再现整车运行情况,系统各部件模型除了需要满足精度要求外,还必须严格满足实时性的要求。整车虚拟平台采用的xPC Target实时仿真环境采用目标机和宿主机的结构,由MATLAB生成的实时内核通过软驱或者USB闪存独立运行在目标机上,直接调用CPU资源,仿真模型通过宿主机编译生成实时代码后下载到目标机上运行,能够实现了严格的系统实时仿真。
虚拟司机平台采用的RTW Target实时内核直接运行在MATLAB/Simulink环境下,在同一台PC机上就能够迅速实现系统的实时仿真,其缺点是由于整个系统在Windows系统下运行,实时内核不能完全占有PC机操作系统资源,实时性受其它运行程序的影响。由于驾驶员模拟操作对实时性要求不高,因此选择RTW Target实时仿真环境能够满足这一要求。
该基于MATLAB/Simulink RTW 和 XPC Real-time Target软件平台的燃料电池汽车硬件在环实时仿真已经成功地应用于“十五”燃料电池城市客车电控单元的开发。在控制器上车前即可对整车控制器数字、模拟信号的电气特性、控制逻辑和算法、故障诊断功能等进行检验。配合快速原型开发工具dSPACE可以完整地实现快速原型开发整车控制器测试流程,如图5所示。
nload="javascript:if(>740)=740" align=center border=0>
图5 燃料电池汽车整车控制器测试开发流程
整车控制器经过仿真平台的反复测试后,将进行实际的实车试验,而从试验中获得的各部件数据又为仿真模型的进一步精确化匹配标定提供了条件,从而使仿真平台更符合实际。
4 时间触发TTCAN
CAN总线是目前汽车上使用非常广泛的一种现场总线,但传统意义上的CAN网络是无序网络。低优先级的消息有可能会在总线仲裁时竞争失败从而产生传输延迟,传输延迟是不可预测的,因而网络的实时性得不到保证。再“十一五”最新的燃料电池客车整车控制系统中,由于部件之间关系复杂,传递数据量大,交互信息关系复杂,采用普通的CAN总线通讯技术已不能够满足燃料电池整车控制的要求,容易造成总线数据错误、总线信息延迟以及总线信息丢失的缺陷,导致控制系统工作不稳定或者失效。因此,在最新的燃料电池城市客车控制系统中,采用了最新的时间触发CAN(TTCAN)技术。
由于专门的支持TTCAN协议的芯片目前较难获得,因此必须基于传统的CAN总线在用户层通过软件实现TTCAN。在软件层实现TTCAN的方法是,选取主控节点为时间主控,确立时间主控的某帧消息为参考消息,其他节点中均辟出一个专门的定时器资源,当收到一帧参考消息时,定时器立即开始从零时刻开始以当地时钟频率运行,在下一帧参考消息到达时定时器归零重新计时。每一个节点中都有一张事先制定的符合通讯协议的消息发送时刻表,消息会在消息矩阵的相应位置得到发送。
TTCAN中有3个重要时间概念:当地时间(Local Time),循环时间(Cycle Time)和全局时间(Global Time)。每个节点都有自己的当地时间,由其计数器决定,每过一个网络时间单元NTU (Network Time Unit)即CAN网络上每发生一位传送,计数器值加1。NTU和当地系统时钟周期的关系由下式决定,TUR为当地时间单位比率(Local Time Unit Ratio)。nload="javascript:if(this.Width>740)this.width=740" align=center border=0>和
nload="javascript:if(>740)=740" align=center border=0>为分别为系统时钟频率和周期。
nload="javascript:if(>740)=740" align=center border=0>
(2-1)
在TTCAN网络中,正时是由时间主控(一般即为主控制器)周期性发送的参考消息维持的。参考消息是由特定ID标志的一帧CAN消息,忽略网络电气传输延迟,每个CAN节点都会同时收到参考消息。参考消息的帧起始位SOF(Start of frame)被称为正时标志Syn_Mark,被当地节点确认后成为参考标志Ref_Mark,每个TTCAN节点在捕捉到这个参考标志的同时会重设自身的循环时间,循环时间是当地时间和参考标志之间的差值,如图6所示。也就是说,每个参考消息的SOF是一个正时脉冲,这个正时脉冲会触发当地节点捕捉当地计数器值作为本次基本循环的循环时间起始值,这就完成了TTCAN网络的正时。
nload="javascript:if(>740)=740" align=center border=0>
图6 TTCAN的时钟同步
时间触发的CAN(TTCAN)的重要基准是参考消息(Reference Message),参考消息由时间主控(Time Master)发送,时间主控一般即为系统主控制器,每一个参考消息后都跟随着一系列的时间窗口,时间窗口分三类:独占时间窗(Exclusive Time Window),仲裁时间窗(Arbitrating Time Window),自由时间窗(Free Time Window)。周期型消息都被安排在独占时间窗内发送,这就保证了控制的周期性和节律。一些随机产生的消息被安排在仲裁时间窗内发送,在仲裁时间窗内,有可能发生竞争。自由时间窗留作系统升级扩展所用。
每个参考消息及其随后的在下个参考消息之前的所有时间窗构成一个基本循环(Basic Cycle)。两个基本循环可以不相同。基本循环可以由循环序号来标识。循环序号从1开始升到最大值,然后归1,如此往复。每一次往复构成一个消息矩阵(Message Matrix),如图7所示为燃料电池城市客车整车控制系统的TTCAN的参考消息与消息矩阵。消息矩阵完整描述了网络的全部通讯信息。但是,各节点并不需要存储完整的消息矩阵,只需要在相应的时间窗口发送消息和接收网络上其需要的消息即可。TTCAN是向上兼容的,已有的传统CAN控制器可以收到TTCAN网络上的任一帧消息。
nload="javascript:if(>740)=740" align=center border=0>
图7 TTCAN参考消息与消息矩阵
通过在燃料电池整车控制系统中采用TTCAN,使得CAN总线的利用率得到了很大的提高,传输数据的能力和可靠性也得到了改善,为整体提升燃料电池客车控制系统的控制性能、可靠性与稳定性起到了关键的作用。
5 无缝的自动代码生成
为了实现快速控制原型,自动代码生成是不可缺少的环节。只有从控制模型自动生成ECU中运行的控制代码,才有可能实现开发过程中快速迭代。自动代码生成可以有效地保证燃料电池城市客车整车控制程序的可靠性、可移植性与可扩展性能,并提高控制程序的开发效率,保证开发质量,加速开发过程。
对于燃料电池城市客车使用的MPC500系列32位控制核心处理器来说,软件平台MATLAB/Simulink Realtime Workshop或者dSPACE提供的软件工具Targetlink的应用可以快速地实现燃料电池城市客车控制系统仿真模型的自动代码生成。
在燃料电池城市客车空控制系统设计过程中,使用了MATLAB/ Simulink为控制算法开发环境;使用OSEK实时操作系统在OSEK Builder环境下配置ECU的实时操作系统内核;在CodeWarrior集成开发环境下编译所有的代码,并下载到ECU运行。最后上位机通过PC Master软件实现对ECU的监控。
如图8所示,在MATLAB/Simulink中,首先,开发者可以实现图形化的算法建模,即在类似程序框图的图形界面上,利用Simulink提供的现成模块以及自定义的S-function模块搭建出控制算法模型,然后开发者可以利用Simulink提供的仿真调试功能对算法进行测试。测试完成之后,开发者可以利用Simulink提供的Real-Time Workshop(RTW),将控制算法模型转换生成C代码,经过编译后下载到控制器CPU中作为控制程序。这就省去了软件开发中繁琐而耗时的编程调试(Coding)这一环节,不但缩短了软件开发周期,而且完全避免了由算法模型到编程过程中任何错误的发生,大大提高了软件开发的效率。
nload="javascript:if(>740)=740" align=center border=0>
图8 自动代码生成过程
MATLAB编译后生成model.c和model_data.c两个源程序文件及对应的头文件。model.c中包含了主控制程序;model_data.c中是算法中用到的变量、参数及常数。
OSEK的配置文件OIL经过编译生成cfg.c和相关头文件。cfg.c中包含了实时操作系统中用到的数据结构,对象的定义、任务堆栈等。OSEK Builder自动把cfg.c和OSEK代码一起编译到。
PowerPC 555中的主要寄存器设置存放在硬件配置文件appconfig.h中。硬件驱动函数调用了PowerPC 555开发工具中提供的硬件API,因此还需要这些API函数的源程序文件。
这种基本模式无法实现无缝的自动代码生成,一般的软件开发流程由上层算法开发、底层驱动开发以及运行环境配置等几部分构成。在这种结构的基础上,只能实现上层算法的自动代码生成,而无法实现底层驱动及运行环境配置的自动代码生成。这就意味着开发者还必须手工开发这部分代码,并与自动生成的上层算法代码实现拼接。
对于结构复杂的控制系统来说,这将是一个繁琐而耗时的过程,不但增加了软件开发的时间、人力成本,而且也增大了软件出错的可能性。一个无缝的自动代码生成平台,即实现在一个统一的环境(如MATLAB/Simulink)下,搭建包括上层算法、底层驱动以及运行环境配置在内的完整的软件框架,并实现操作简便的自动代码生成、下载和调试过程,这对燃料电池城市客车控制系统的快速控制原型开发是十分重要的。
在“十一五”863《电动汽车》重大专项燃料电池城市客车项目控制系统的研发当中,实现了利用MATLAB/ Simulink软件资源的无缝自动代码生成。
无缝自动代码生成的实现主要是结合MATLAB/Simulink Embedded Target for Motorola MPC555软件工具和利用S-Function开发自定义底层驱动与MATLAB/Simulink接口,并通过编写TLC语言控制自动代码生成的过程,使得整个算法代码和底层驱动代码为一个无缝的工作过程。
Embedded Target for Motorola MPC555是MATLAB为MPC5xx系列单片机开发的底层驱动模块工具箱,与其他Matlab下工具箱一样,该工具箱提供了大量的图形化基本驱动模块,使用户可以根据需要搭建相应底层驱动。
nload="javascript:if(>740)=740" align=center border=0>
图9 无缝自动代码生成Simulink工具箱
虽然在Simulink下,借助于Embedded Target for Motorola MPC555工具箱提供的大量基本驱动模块可以实现大部分的底层驱动搭建,但是对于硬件平台上存在的一些外围驱动设备,例如串行EEPROM,DA转换芯片等,该工具箱中则未提供现成的驱动模块,因此就需要自行编写这些设备的驱动模块,并将其安装至Simulink Library下。在Simulink中,用户自定义的模块一般都利用S-function来实现。编写S-function的方式有很多,其中较为方便的是使用S-function Builder模块。自定义底层驱动模块开发完成之后,为了便于使用,需要将模块安装至Simulink Library Browser下,如图9所示为自行开发的燃料电池城市客车控制系统底层驱动Simulink的自动代码生成工具箱。
6 结论
实时操作系统与硬件驱动程序对接口函数进行了封装,不但提高了控制软件的开发效率,并具有较好的通用性与可移植性。无缝自动代码生成减少了手工编写代码的过程,降低了代码人为错误的可能性,并大大缩短了软件开发迭代过程的时间。硬件在环实时仿真技术为控制系统提供了便捷、快速、全面、可靠的测试环节,是提高燃料电池城市客车控制系统可靠性,缩短开发周期不可或缺的一个步骤。TTCAN有效的提高了分布式控制系统中的数据交换效率,保证了数据的可靠性与安全性。
nload="javascript:if(>740)=740" align=center border=0>
图10 新软件技术核心构成
通过OSEK/VDX实时操作系统、硬件在环实时仿真、时间触发CAN以及无缝的自动代码生成等最新汽车电子软件技术的应用,以MPC500系列微处理器为控制核心,如图10所示,实现整个V形结构快速控制原型过程中软件核心的有机结合。开发出了符合OSEK/VDX标准的燃料电池城市客车控制平台,实现了对整车运行的管理与控制、基于CAN总线的各部件节点的协调控制、故障诊断和处理及数据监控记录等功能,并在燃料电池城市客车的实际测试中得到了检验。事实证明,这些新软件技术的使用能够有效地减低开发风险,缩短开发周期,提高产品可靠性与稳定性,消除系统中潜在的隐患。