为了说明汽车软件研发中使用的工具,下面介绍ASCET[2]。ASCET使用基于对象的范例构建嵌入式汽车控制软件。其主体功能是各类功能设计和实时设计模块。要构成一个ECU,模块要在一个项目里汇总。有一类聚合方法有命令行参数和返回值。类通过变量提供内部状态,并可以聚合成其他类的实例。它不支持继承性。存在两种类——“简单类”和“有限状态机械类”。对于嵌入式实时建模,存在一种提供信息作为传递模块之间数据手段的模块。模块使用类的实例。模块提供了所谓的读、写消息的流程,并调用某个类方法。该流程作为子程序以C代码的形式实现,但没有正式的参数。这允许了流程间通信的高效实施,但是将每个ECU模块实例的数量限制到1。
图9.3显示了制动防滑控制算法的ASCET模块。它采用的方法是,每个车轮对应一个防滑控制类的实例。提供的车轮转速以及车速作为一个模块的接收信息。每个车轮提供的控制压力作为发送信息。这些信息形成了线程安全的通信机制,这意味着每条信息都将被嵌入式实时流程间通信工具来看守。该工程收集了所有在ECU上运行的模块。图9.4表示的是节气门控制算法的8个模块。这些模块提供了13道流程。其中的一些流程只用于初始化。该ECU上的所有模块的执行计划是由分配任务的流程提供的,如图9.5左侧所示。模块的信息通过名称匹配在ECU的全局工程层面上连接了起来。图9.4显示了由此产生的数据流,在图9.5中的右侧把结果列成表格。
一个ASCET工程的执行范例是任务调用流程。该流程从接收消息读取数据,并通过传递消息数据给参数来调用类实例的方法。然后,该流程调用其他实例的方法,接收将被写入发送信息的返回值。接下来,任务中的下一流程被调用。数据的完整性通过ASCET信息的复制机制得以保证。
ASCET模型通过应用到工程的代码生成可执行的代码,该工程将生成模块和类的代码。对于产品代码生成,使用了定点运算,如图9.6所示。例如,图9.7表示了一个非常简单的防抱死制动系统(ABS[2])控制算法的滑移确定,如图9.7所示,其中的车轮滑移由车轮速度和车辆速度(由参考速度表示)的差异给出,并且被限定的车辆速度归一化(由参考值表示)。
图9.3 ASCET中的制动防滑控制算法
生成的代码可以直接表示为:
self→WheelSlip→val=(referenceSpeed-wheelSpeed)/self→ReferenceValue→val;
当浮点运算被放弃并引入定点算术时,代码将完全改变。这不仅意味着将使用整数值代替浮点数值,但也同时意味着物理意义。例如,参考速度范围,以位模式表达为从0到65535,即0~256km/h,这意味着每位表示1/8km/h。当然,这个量化必须由生成的C代码所反映,其中的额外操作介绍如下:
WheelSlip=(sint16)((referenceSpeed-wheelSpeed<<8)/(sint32)ReferenceValue);(www.daowen.com)
ASCET可以在汽车开放系统架构(AUTOSAR)[3](第2章)或其他的ADL中,用作行为建模工具。从集成的角度来看,集群起着重要的作用。例如,在AUTOSAR系统中,流程分组为几个可运行的实体,而几个模块建立了核心软件组件的内部行为。这种方法的可行性已在AUTOSAR ECU上集成的巡航控制功能上得到了展示,因而利用了基于模型设计和ADL的优势。
图9.4 在ASCET中节气门控制器的简单模型
图9.5 任务进程调度(左侧)和节气门控制器的信息流(右侧)
图9.616 位实现的注释
图9.7 车轮滑移确定的模型提取
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。