您的位置 首页 嵌入式

根据EA代码生成的车身网络电控体系

基于EA代码生成的车身网络电控系统-引言在车身电子方面,国内外进行了系列的研究。上海理工大学陈家琪等人利用工控机和相关数据采集卡以及CAN总线智能接口,构建了一个集中式的车身电子

  导言

  在车身电子方面,国内外进行了系列的研讨。上海理工大学陈家琪等人运用工控机和相关数据收集卡以及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总线上的信号,进一步便利了网关节点的调试。

  图6为在操控面板节点(源地址为0x26)翻开左转向灯时发送给车灯节点(方针地址为0x20)的CAN数据帧。其间,符号为S的位是依据位填充规矩主动刺进的填充位。图7为车灯节点收到上述CAN数据帧后,依据网关路由战略及帧转化规矩,发送到LIN总线上的数据帧。

  

  

  4 定论

  本规划凭借EA的代码生成功用,经过修正代码生成模板以满意车身网络电控体系开发中C言语及编译器的要求,进行了车身网络体系的开发和开始试验验证。此办法极大地便利了规划开发,并可进步体系的可靠性。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/165792.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部