当前位置:首页 > 汽车电子 > 汽车电子
[导读]使用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语言及编译器的要求,进行了车身网络系统的开发和初步实验验证。此方法极大地方便了设计开发,并可提高系统的可靠性。

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

北京2024年5月16日 /美通社/ -- 5月10日晚,2024中国品牌日晚会在新华社全媒体矩阵播出,50个入选品牌在当晚揭晓,极氪名列其中,成为首度上榜的中国造车新势力代表。 图为北京时间5月10日 21:30 ,...

关键字: 吉利 COM HTML 代码

2023年10月18日,中国在第三届“一带一路”国际合作高峰论坛期间发布《全球人工智能治理倡议》,围绕人工智能发展、安全、治理三方面系统阐述了人工智能治理中国方案。

关键字: 人工智能 大模型 代码

我们看到这么多的安全问题,部分原因在于我们对待安全的方式:安全性通常被认为是事后考虑的问题,是在开发结束时才添加到设备上的东西。然而,复杂的系统,尤其是嵌入式系统,有一个很大的攻击面,这让攻击者有机可乘,能够在“盔甲”上...

关键字: 代码 嵌入式系统 软件漏洞

现代汽车底盘采用了大量的电子控制装置,增加了许多新的功能,驾驶更加轻松方便,乘坐更加舒适安全。

关键字: 汽车悬挂系统 电控系统 电子控制

太阳能供电应用系统的设计需要考虑多个方面,包括太阳能电池板、储能装置、控制模块等。本文将介绍一种基于太阳能供电的应用系统设计方法,并从这几个方面进行详细阐述。

关键字: 太阳能 系统设计

新富人群财务需求多元发展,投顾服务迎来新机遇 上海2023年9月20日 /美通社/ -- 2023年9月19日,上海交通大学上海高级金融学院(高金)与全球领先的金融服务机构嘉信理财(Charles Schwab)联合发...

关键字: BSP ADVANCED INA 代码

北京2023年9月14日 /美通社/ -- 生物医药高科技公司诺诚健华(港交所代码:09969;上交所代码:688428)今日宣布,新型蛋白酪氨酸磷酸酶SHP2变构抑制剂ICP-189联用针对表皮生长因子受体(EGFR)...

关键字: IC HP 代码 ARMA

上海2023年9月1日 /美通社/ -- 2023上半年,安集科技(股票代码:688019)市场拓展规划成效显现,营业收入稳健增长。 全球半导体产业挑战持续存在的情形下,安集科技秉承发扬"克难攻坚,敢打硬...

关键字: 安集科技 BSP 代码 半导体材料

国际酒店运营商升级其在线支付功能 上海2023年8月28日 /美通社/ -- 加拿大金融科技公司Nuvei Corporation(以下简称“Nuvei”或“公司”)(纳斯达克代码:NVEI)(多伦多证券交易所代码:N...

关键字: 代码 IP SE 纳斯达克

2023年上半年收入7.459亿元 同比增长5.1% 毛利率水平上升 海外收入同比增长65.4% 香港2023年8月22日 /美通社/ -- 金邦达宝嘉控股有限公司及其附属公司(以下合称「金邦达」、「...

关键字: 数字化 代码 嵌入式软件 COM
关闭
关闭