AUTOSAR中的应用软件设计为独立的软件单元,即软件组件类型(SwComponentTypes),封装了相关功能和行为的实现,并通过端口原型(PortPrototypes),向外部暴露自己。
AUTOSAR 标准应用了设计模式中的原型(Prototype)模式,要求应用软件的可重用性,可以重复使用已有的组件来创建新的模型元素,而不是每个项目都重复创建单独的组件。
软件组件面向虚拟功能总线(VFB)进行开发的,VFB 是一个抽象的通信通道,不依赖于 ECU 和通信总线,不直接调用操作系统或硬件驱动,可以在开发过程的晚期阶段部署到实际的 ECU 上。
软件组件
1.软件组件类型(SwComponentType)
是AUTOSAR软件组件的基础类,它是一个抽象类,包含了与软件组件相关的基本属性和行为定义,有三个子类,分别是AtomicSwComponentType、CompositionSwComponentType和ParameterSwComponentType,这些子类进一步细化了软件组件的类型和功能。
- 原子软件组件类型:是SwComponentType的具体实现,代表不可再分解和分布在多个ECU上的原子软件组件。它具有原子性,意味着其功能和行为是不可分割的,并且在运行时不会被分布到多个ECU上。
- 组合软件组件类型:用于组合多个其他软件组件,以实现更复杂的系统功能。它通过聚合其他软件组件来创建更大的系统单元,从而实现系统的模块化设计和可扩展性。
- 参数软件组件类型:主要用于定义和管理软件组件的参数信息。与AtomicSwComponentType不同,它不能聚合SwcInternalBehavior,这意味着它没有内部行为的概念,只专注于参数的定义和管理。
软件组件模型
2.端口原型(PortPrototype)
端口原型在软件组件之间的通信中起着关键作用,它们定义了数据的传输方向和接口规范,端口原型通过端口接口来定义其通信行为,不同类型的端口接口具有不同的语义和功能,端口接口提供了一种标准化的方式来描述端口之间的通信协议和数据格式,使得不同的软件组件可以相互理解和交互。
端口接口是实现软件组件之间通信的基础,它们定义了数据的传输方式、格式和语义。不同类型的端口接口对应着不同的通信场景和需求,例如,客户端-服务器接口用于实现客户端和服务器之间的远程调用,而发送方-接收方接口用于实现异步的数据传输。
端口接口是通过在端口原型上添加额外的模型信息来实现的,这些信息包括接口的名称、描述、数据类型、操作等。这些信息被用于生成代码和实现通信功能。
端口原型包含:
需求端口原型(RPortPrototype):表示需求端口,需要某些服务或数据。它通常用于客户端与服务器之间的通信,客户端通过RPortPrototype向服务器请求服务或数据。
提供端口原型(PPortPrototype):表示提供端口,提供服务或数据。它通常用于服务器向客户端提供服务或数据的场景。
提供-需求端口原型(PRPortPrototype):可以同时作为需求和提供端口,具有双重功能。它既可以接收来自其他组件的请求,也可以向其他组件提供服务或数据。
端口组件继承与组合
3.原子软件组件类型
原子软件组件类型是软件组件类型的子类,可以聚合一个内部行为(InternalBehavior)类,能够实现更复杂的功能和行为,在模型中独立地开发和测试内部行为,而不会影响其他部分的开发。
在完成软件组件的基本架构设计后,可以在后期添加更多的细节,如内部行为的实现、数据处理逻辑等。
泛化(继承)
4.参数软件组件类型
不能聚合SwcInternalBehavior,唯一聚合的端口原型是《参数接口类型(ParameterInterface)》的PPortPrototype。
数据属性定义:在汽车电子系统中,校准参数的准确性和一致性对于系统的性能和可靠性至关重要,通过定义特定的数据属性,可以确保每个参数在系统中的作用和意义是明确的,并且可以根据不同的角色进行灵活的配置和管理。
实例化数据定义:《实例化数据定义属性(InstantiationDataDefProps)》提供了一种在运行时动态配置数据属性的方式,通过聚合这些属性,参数软件组件类型可以根据具体的实例化需求来设置数据属性的值,从而实现更加灵活和可定制的系统配置。
参数软件组件
5.软件组件的符号名称
原子软件组件类型(AtomicSwComponentType)体现在运行时环境(RTE)的源代码中,原子软件组件类型的一个实例被部署在该运行时环境中。
如果具有相同短名称的原子软件组件类型实例被部署到特定的RTE中,可能会导致命名冲突。
为了缓解这种潜在的风险,可以为原子软件组件类型提供一个伴随的符号名称,用于解决命名冲突,符号名称是通过原子软件组件类型拥有的符号属性(SymbolProps)类的属性 “symbol” 来提供。
在生成RTE代码时,根据软件组件的符号名称来识别和处理不同的组件实例,确保RTE能够正确地生成代码,并将不同的组件实例正确地组合在一起。
组合符号名称
我的开源项目链接,欢迎star:
基于UDS on CAN的Bootloader的刷写上位机:
https://github.com/sydyg/UDS-on-Bootloader.git
OSEKNM协议栈:
https://github.com/sydyg/OSEK_NM
赠送汽车研发入门资料,助力中国汽车行业发展。
https://mv0qxzpryx9.feishu.cn/wiki/TPvDwYGcAizCVEkH3fVci48nn9f?from=from_copylink
密码:8M&78193