当前位置:首页 > 汽车电子 > 汽车电子
[导读]使用UML建模软件Enterprise Architect(EA)设计了车身网络电控系统,并借助EA的代码生成功能生成可编译的C语言代码,实现了CAN网络、LIN网络及二者之间网关的组建。同时,搭建车身网络实验平台,完成车身网络中各部件的实时控刺,验证了生成代码的有效性。

引言
    在车身电子方面,国内外进行了系列的研究。上海理工大学陈家琪等人利用工控机和相关数据采集卡以及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层的建模方法。


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声明的代码生成模板的核心部分如下:

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


3 调试与验证
   
本设计除了使用USBCAN卡作为数据采集节点以外,为了验证两种总线协议的实现是否符合标准,更直观地查看总线帧中各个字段的值以及随时检测总线上是否发生帧错误等,使用PC示波器PicoScope 5203搭配总线协议分析软件WaveBPS捕获两种总线信号并进行协议分析。Pi-coScope的两个通道可同时捕获CAN总线及LIN总线上的信号,进一步方便了网关节点的调试。
    图5为在控制面板节点(源地址为0x26)打开左转向灯时发送给车灯节点(目标地址为0x20)的CAN数据帧。其中,标记为S的位是根据位填充规则自动插入的填充位。图6为车灯节点收到上述CAN数据帧后,根据网关路由策略及帧转换规则,发送到LIN总线上的数据帧。



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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭