基于代码生成的车身网络电控系统设计

发布者:ShiningSmile最新更新时间:2011-07-18 关键字:代码生成  车身网络  电控系统 手机看文章 扫描二维码
随时随地手机看文章

引言

  在车身电子方面,国内外进行了系列的研究。上海理工大学陈家琪等人利用工控机和相关数据采集卡以及CAN总线智能接口,构建了一个集中式的车身电子试验台。哈尔滨工业大学焦晓伟等人采用Stateflow图形化建模工具构建符合AUTOSAR标准的车身应用层软件模型,再利用Targetlink代码生成工具基于模型实现代码自动生成。而英国Warwick大学的Yue Guo等人,则比较了基于SysML和基于“Simulink+Stateflo-w”的开发方法在驾驶信息系统开发过程中的优缺点。本文采用基于框架结构和高级语言描述的车身网络电控系统开发方法,采用UML建模工具实现程序代码的自动生成,可进一步简化车身网络的设计与开发过程,提高软件可重用度,降低开发成本,减少人为错误。

1 EA及代码生成功能

  Enterprise Architect(EA)是澳大利亚Sparx Systems公司开发的一套UML建模及设计平台。EA体积小巧,使用简便,对UML标准的支持完整;除支持UML2.0标准的所有13种图形之外,还支持其他的扩展图,包括分析图、自定义图、需求图、维护图、用户界面图、数据库模式图、文档、业务建模与业务交互图等。

  为便于扩展、定制以及二次开发,EA提供了丰富的SDK。代码模板框架(Code Template Framework,CTF)是SDK的一部分,EA的代码生成功能正是通过基于此框架的代码生成模板实现的。代码生成模板指定了从UML元素到给定编程语言的转换过程,其修改通过代码模板编辑器实现。打开方法为EA主菜单Settings→Code Generation Template,或使用快捷键Ctrl+Shift+P。代码生成模板以纯文本形式编写,其语法风格兼具标记语言和脚本语言的语法特性。这种语法主要关注三种基本结构:

  (1)字面文本。在代码生成模板中,除了空行将被忽略以外,所有不是宏或变量的定义及引用的文本,都将作为字面文本而直接输出到生成的代码中。如:

  class % className%

  (2)宏。宏既可用于访问UML模型中的元素值,又可用于对生成的代码进行结构化处理。所有的宏都有两个百分号%包含其中。CTF中包含模板替代宏、域替代宏、标记值替代宏、控制宏、函数宏和EASL代码生成宏6种基本的宏。正是这些丰富的宏定义造就了EA强大的代码生成功能。仍以上例说明,“%className%”就是一个域替代宏,在生成的代码中将以当前的类名替代,故若当前类为Foo,则语句的输出为“cl-ass Foo”。

  (3)变量。变量的定义和引用为在代码生成模板中存取数据提供了方便。CTF中的变量采用弱类型定义,即变量的数据类型可以被忽略且一个变量可以被赋予不同数据类型的值。变量的值可以来自各种宏、双引号包含的字面文本和其他变量的引用等。变量的定义和引用使用美元符号加一个合法标识符,如$foo=%class Name%。变量$foo将存储当前类的名称,需要引用此变量时直接使用$foo即可。

2 软硬件设计

  为了方便调试及验证生成代码的有效性,本设计搭建以CAN总线为主干、LIN总线为下层网络的车身网络演示实验台。

  2.1 硬件拓扑

  根据车身电器的功能和位置,实验台拓扑布局如图1所示。其中,粗实线为CAN总线及其节点,细实线为UN总线及其节点。主干CAN总线上共有8个节点,既是下层LIN网络上的主机节点,又是CAN/LIN网关。其中,数据采集节点使用USBCAN卡搭建,其余网关节点使用Freescale公司16位单片机MC9S12XSl28作为主控芯片。

 


  MC9S12XSl28同时具有CAN网络控制器(MSCAN模块)和LIN网络控制器(SCI模块),故只需再连接相应的CAN网络收发器TJAl050和LIN网络收发器TJAl020即可完成CAN/LIN网关节点的硬件设计。CAN/LIN网关节点功能框图如图2所示。

 

  LIN从机节点使用Freescale公司8位单片机MC9S08DZ60作为主控芯片,使用其SCI模块连接LIN网络收发器TJAl020,再连接其他外围执行器组成。LIN从机节点功能框图如图3所示。

 


  2.2 软件建模

  目前,大多数单片机所支持的软件编译器均以C语言为主,而在C语言中没有类及继承等相关概念,同时出于可移植性的考虑,软件模型采用分层思想。将整个设计的软件结构分为4层:第0层为类型定义及中断服务程序返回值的宏定义,第1层为单片机及其内部功能模块类的抽象,第2层为外围硬件类的抽象,第3层为车身网络各个节点类的抽象。上层的类通过调用下层类提供的函数实现特定功能,各层的依赖关系如图4所示。其中,虚线表示调用关系。下面具体介绍第1~3层的建模方法。

 

[page]

  2.2.1 第1层一单片机及其内部功能模块类的抽象

  第1层的函数功能通过对单片机寄存器的读写实现,故使用类的成员函数,将寄存器的读写代码直接写在成员函数Behavior属性的Ini-tial框中。如使能S12中的MSCAN模块的代码如下:

  CANCTL1(MSCANx)|=CANCTlLl_CANE_MASK;

  其中的CANCTL1是为了便于对多个MSCAN模块做统一处理,以及便于选择使用某个特定模块而手动编写的函数宏。在使用时只需将MSCANx赋值为相应的整数值(对于MC9S12XSl28,可以是O~4)。

  2.2.2 第2层一外围硬件类的抽象

  第2层需要调用第1层类的操作,这可以通过活动图实现。在活动图中,新建一个Action,根据需要选择CallOperation(调用成员函数)或Call Behavior(调用活动图的行为),再指定具体调用哪个成员函数或行为即可(调用的参数通过Action的Arguments属性传递)。最后,将各个Action按照程序流程连接起来。

  这里,使用CAN协议(上层协议使用J1939)发送一个数据帧(活动图略——编者注)。为了能够实现行为图(包括活动图)的代码生成,必须将所有的行为图及其元素都放在某个类中。活动图经过转换后生成的代码如下所示:

 

 


        2.2.3 第3层一车身网络各个节点类的抽象

  除了同样需要调用第1层、第2层类的操作之外,第3层还需要对中断服务程序(ISR)进行建模。ISR的建模涉及两个问题:ISR的返回值和ISR的定位。

  (1)ISR的返回值问题。CodeWarrior支持两种ISR的声明方式。一种是使用预编译指令pragma定义一个TRAP_PROC符号,TRAP_PROC会提示编译器下面的函数是ISR,编译器会使用一个特殊的中断返回指令来结束这个函数(一般是RTI指令)。此方法需要同时修改CodeWarrior工程中的PRM文件,将ISR与中断向量表中的向量联系起来,不便于使用UML建模。

  另一种是使用与C51类似的interrupt关键字,并指定相应的中断向量号,这样就同时完成了ISR的声明和与中断向量表的关联。在EA中修改类的代码生成模板,添加一个衍型(stereotype)并命名为define,并添加相应的模板代码。其核心部分代码如下:

 

  修改完成后,在建模过程中只需将类的衍型设置为define,将类名设置为新定义的符号,类的父类设置为原符号即可。以CANO模块的接收中断的返回值为例,可将类名设置为ISR_CAN0_RX,将父类设置为interrupt 38void(此父类并不存在)。最后生成的代码如下:

  #define ISR_CAN0_RX interrupt 38 void

  然后将ISR的返回值指定为ISR_CANO_RX即可。

  (2)ISR的定位问题。中断服务程序的声明和定义都必须定位于non-banked区域,通过使用“#pragma CODE_SEG NON_BANKED”实现。同时,中断服务程序末尾需要添加“#pragma CODE_SEG DEFAULT”,否则后面的函数也会被定位在non-banked区域而导致错误。因此,中断服务程序必须被“#pragma CODE_SEG NON_BANKED”和“#pragma CODE_SEG DEFAULT”包围起来。这也可通过修改代码生成模板实现。结合ISR返回值的宏定义,只需在当函数返回值的前3个字符是“ISR”时,在函数前后输出上述两条pragma预编译指令即可。生成ISR声明的代码生成模板的核心部分如下:
[page]

 

 

 

  仍以上述CAN0模块的接收中断为例,最终生成的函数声明如下;

 

 

3 调试与验证

  本设计除了使用USBCAN卡作为数据采集节点以外,为了验证两种总线协议的实现是否符合标准,更直观地查看总线帧中各个字段的值以及随时检测总线上是否发生帧错误等,使用PC示波器PicoScope 5203搭配总线协议分析软件WaveBPS捕获两种总线信号并进行协议分析。Pi-coScope的两个通道可同时捕获CAN总线及LIN总线上的信号,进一步方便了网关节点的调试。

  图5为在控制面板节点(源地址为0x26)打开左转向灯时发送给车灯节点(目标地址为0x20)的CAN数据帧。其中,标记为S的位是根据位填充规则自动插入的填充位。图6为车灯节点收到上述CAN数据帧后,根据网关路由策略及帧转换规则,发送到LIN总线上的数据帧。

 

4 结论

  本设计借助EA的代码生成功能,通过修改代码生成模板以满足车身网络电控系统开发中C语言及编译器的要求,进行了车身网络系统的开发和初步实验验证。此方法极大地方便了设计开发,并可提高系统的可靠性。

 

关键字:代码生成  车身网络  电控系统 引用地址:基于代码生成的车身网络电控系统设计

上一篇:数字隔离技术在混合动力和电动汽车中的应用
下一篇:一种新型的车载音速喷嘴气体流量检定系统

推荐阅读最新更新时间:2024-05-02 21:29

基于CAN总线的EV电控系统通信的设计与开发
摘要:以MC68376集成CAN控制器为例,阐述了纯电动车(Eleotdc Vehicle,简称EV)电控系统采用SAEJl939通信协议实现CAN总线通信的设计要点,给出了基于CAN通信的动力蓄电池监控系统的电池充放电特性曲线。实验证明CAN总线通信速率高、准确、可靠性高。 关键词:电控系统 CAN总线 通信 MC68376 随着汽车上电子控制装置越来越多,车身布线也愈来愈复杂,使得运行可靠性降低,故障维修难度加大。为了提高信号的利用率,要求大批数据信息能在不同的电控单元中共享,同时汽车综合控制系统中大量的控制信号也能实时进行交换。但是,传统的汽车电子系统采用串行通信的方法,如用SAE1587等标准来实施,通信速度较慢、传
[工业控制]
CAN总线混合动力骄车电控系统的设计与实现
混合动力汽车是一种由内燃机和电动机混合驱动的汽车,其主要特点是节能、环保。这种汽车在起步时用电动机驱动,消除了内燃机起步时由于燃烧不充分而排黑烟的现象。在汽车减速或刹车时,利用发电机把动能转化成电能,贮存到蓄电池中,实现能量回收达到节能的目的。由于这种汽车是内燃机和电动机两种动力并存,仅用传统的针对内燃机的电控系统无法实现两种动力的最佳配合,因此开发混合动力车的全新电控系统是十分必要的.本文以一种电机并联式混合动力汽车成功实现为背景,从系统角度介绍了混合动力汽车电控系统结构、功能及效果。 1 并联式混合动力驱动结构简介 并联式混合动力汽车的驱动系统结构见图1。发动机通过机械传动装置与驱动桥连接,电动机通过动力复合装置也与驱动桥相
[单片机]
CAN总线混合动力骄车<font color='red'>电控系统</font>的设计与实现
汽车车身电子网络控制系统
CAN(Controller Area Network)总线是一种有效支持分布式控制和实时控制的串行通讯网络。目前已经在国外汽车的电器网络中得到了广泛的应用。为了满足国产汽车车身控制总线的迫切需求,我们设计了一种基于CAN总线的整车管理系统的硬件方案。本方案重点对系统的总体结构、车身控制系统CAN总线的节点设置、节点及中央控制与CAN总线的接口电路进行了设计。 随着汽车电子技术的发展及汽车性能的不断提高,汽车上的电子装置越来越多。传统的电器系统大多采用点对点的单一通信方式,相互之间很少有联系,这样必然造成庞大的布线系统。目前,国外许多整车制造厂和汽车电器制造厂家在整车管理系统中采用了网络技术,如CAN和LIN、SAEJ1850
[嵌入式]
汽车电子CAN总线发展——汽车车身网络系统
  汽车总线系统的研究重点   由于我国的车型以欧美车型为主,且欧美车型又以CAN总线为主流,目前国内使用总线技术的车型几乎全部使用CAN总线,因此汽车总线的研发应该结合国内外实际情况选用CAN总线。   CAN符合ISO/OSI的参考模型,但只规定了物理层和数据链路层的协议,其应用层的协议需要用户自己定义。支持CAN低层协议的芯片有许多,既有在片的MCU,也有片外的CAN控制器。用户自己开发的应用层协议也有很多,如AB公司定义的DEVICENET协议就是CAN协议基础上的应用层协议,Honeywell公司推出的SDS总线也是在CAN的基础上定义了自己的应用层。可见,汽车CAN总线的研究重点是:针对具体的车型开发ECU
[嵌入式]
飞思卡尔简化电控系统设计 提速节能高效革命
据统计,全世界半数左右的能源消耗在各种马达驱动的设备中,引擎作为这些设备的核心,在全球性节能环保的大趋势下,成为提升与改善能效最受关注的部分。现代的引擎再不是一个刻板的系统,而是能利用执行器与电机根据不同驾驶情况的需要够提供广泛的动态调整,进而优化引擎燃烧效率。改善驱动设备能效的关键是通过更出色的引擎控制提升引擎效率,半导体技术在其中扮演的角色不容忽视。   电子技术出现在引擎管理是最近几十年里是引擎发展中最核心的主题,电子引擎控制的优势是省油、废气污染少、加速快和马力更大。如同减排制度一样,在20世纪80年代,燃油经济性和环境方面的问题掀起了为小轿车和卡车制造电子引擎控制系统的第一波浪潮,小型内燃机市场也将遇到同样的情况
[嵌入式]
奇瑞打破国外技术垄断 首批“自主大脑”发动机出口美国
据奇瑞官网消息,奇瑞首批500台“自主开发电控系统”发动机于2017年6月30日出口美国。此次出口具有划时代的意义,因为这批发动机“核心控制大脑”——ECU电控系统完全由奇瑞自主开发完成,打破了国外技术的长期垄断。 奇瑞首批自主开发电控系统发动机出口美国发货现场 与奇瑞之前出口的发动机相比,此次出口的发动机完全由奇瑞自主标定,包括发动机所有控制策略及运行参数在内都由奇瑞自主定义。作为汽车的核心部件,发动机一旦自主标定就意味着整车厂和其他配件供应商的标定,一定程度上都要依循借鉴奇瑞的标定。   此外,发动机最核心的ECU部件也由奇瑞独立主控设计制造。ECU是电子控制单元,在整车构建中是核心中的核心,相当于人类大脑,长期以来
[汽车电子]
CAN总线混合动力车电控系统的设计与实现
混合动力汽车是一种由内燃机和电动机混合驱动的汽车,其主要特点是节能、环保。这种汽车在起步时用电动机驱动,消除了内燃机起步时由于燃烧不充分而排黑烟的现象。在汽车减速或刹车时,利用发电机把动能转化成电能,贮存到蓄电池中,实现能量回收达到节能的目的。由于这种汽车是内燃机和电动机两种动力并存,仅用传统的针对内燃机的电控系统无法实现两种动力的最佳配合,因此开发混合动力车的全新电控系统是十分必要的.本文以一种电机并联式混合动力汽车成功实现为背景,从系统角度介绍了混合动力汽车电控系统结构、功能及效果。 并联式混合动力驱动结构简介   并联式混合动力汽车的驱动系统结构见图1。发动机通过机械传动装置与驱动桥连接,电动机通过动力复合装置也与驱动
[单片机]
CAN总线混合动力车<font color='red'>电控系统</font>的设计与实现
CAN总线混合动力汽车电控系统的设计与实现
  混合动力汽车是一种由内燃机和电动机混合驱动的汽车,其主要特点是节能、环保。这种汽车在起步时用电动机驱动,消除了内燃机起步时由于燃烧不充分而排黑烟的现象。在汽车减速或刹车时,利用发电机把动能转化成电能,贮存到蓄电池中,实现能量回收达到节能的目的。由于这种汽车是内燃机和电动机两种动力并存,仅用传统的针对内燃机的电控系统无法实现两种动力的最佳配合,因此开发混合动力车的全新电控系统是十分必要的.本文以一种电机并联式混合动力汽车成功实现为背景,从系统角度介绍了混合动力汽车电控系统结构、功能及效果。 并联式混合动力驱动结构简介    并联式混合动力汽车的驱动系统结构见图1。发动机通过机械传动装置与驱动桥连接,电动机通过动力复合装置
[汽车电子]
CAN总线混合动力汽车<font color='red'>电控系统</font>的设计与实现
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved