AUTOSAR_SWS_COM
Specification of Communication
简介和功能概述
此规范是 AUTOSAR COM 模块软件规范。它基于 AUTOSAR COM SRS [7]。它指定了如何实现 AUTOSAR COM SRS 的要求。这意味着本文档描述了 AUTOSAR COM 模块的功能和 API。
在 AUTOSAR 分层架构中,AUTOSAR COM 模块位于它的用户(例如 RTE、SwCluC)和 PDU 路由器之间,参见[1]。
AUTOSAR COM 模块源自 [17]。有关详细信息,请参阅第 7.2.1 章。AUTOSAR COM 模块提供了信号网关功能。有关详细信息,请参阅第 7.2.5 章。
主要功能:
- 为用户(例如 RTE、SwCluC)提供了面向信号的数据的接口
- 将 AUTOSAR 信号打包成 I-PDU 进行传输
- 解包接收到的 I-PDU 并向用户(例如 RTE、SwCluC)提供接收到的信号
- 将接收到的 I-PDU 中的信号路由到要传输的 I-PDU 中
- 将接收到的 I-PDU 中的信号组路由到要传输的 I-PDU 中
- 通信传输控制(I-PDU 组的启动/停止)
- 发送请求的复制
- 保证被传输的 I-PDU 之间的最小距离
- 监控信号的接收(信号超时)
- 传入信号的过滤机制
- 不同的通知机制
- 设置信号的初始值和值被更新时的指示
- 字节序转换
- 符号扩展
- 每个 I-PDU 都支持两种不同的传输模式
- 基于信号的网关
- 对大型和动态长度的数据类型的支持
首字母缩略词、缩写和定义
首字母缩略词和缩写
定义
相关文档
AUTOSAR 的交付文档
[1] AUTOSAR Layered Architecture
- AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] Specification of Communication Stack Types
- AUTOSAR_SWS_CommunicationStackTypes.pdf
[3] General Requirements on Basic Software Modules
- AUTOSAR_SRS_BSWGeneral.pdf
[4] Basic Software UML Model
- AUTOSAR_MOD_BSWUMLModel.eap
[5] Specification of Standard Types
- AUTOSAR_SWS_StandardTypes.pdf
[6] Specification of the Virtual Functional Bus
- AUTOSAR_EXP_VFB.pdf
[7] Requirements on Communication
- AUTOSAR_SRS_COM.pdf
[8] Software Component Template
- AUTOSAR_TPS_SoftwareComponentTemplate.pdf
[9] Requirements on Gateway
- AUTOSAR_SRS_Gateway.pdf
[10] Specification of PDU Router
- AUTOSAR_SWS_PDURouter.pdf
[11] Specification of Operating System
- AUTOSAR_SWS_OS.pdf
[12] System Template
- AUTOSAR_TPS_SystemTemplate.pdf
[13] Specification of RTE Software
- AUTOSAR_SWS_RTE.pdf
[14] Specification of ECU Configuration
- AUTOSAR_TPS_ECUConfiguration.pdf
[15] Specification of Communication Manager
- AUTOSAR_SWS_COMManager.pdf
[16] AUTOSAR Basic Software Module Description Template
- AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[19] Specification of CAN Transport Layer
- AUTOSAR_SWS_CANTransportLayer.pdf
[20] Specification of FlexRay Transport Layer
- AUTOSAR_SWS_FlexRayTransportLayer.pdf
[21] List of Basic Software Modules,
- AUTOSAR_TR_BSWModuleList.pdf
[22] Generic Structure Template
- AUTOSAR_TPS_GenericStructureTemplate.pdf
[23] General Specification of Basic Software Modules
- AUTOSAR_SWS_BSWGeneral.pdf
[24] Specification of Software Cluster Connection
- AUTOSAR_SWS_SoftwareClusterConnection.pdf
相关标准及规范
[17] ISO 17356-4:2005 Road vehicles -- Open interface for embedded automotive applications -- Part 4: OSEK/VDX Communication (COM)
[18] ISO 17356-6:2006 Road vehicles -- Open interface for embedded automotive applications -- Part 6: OSEK/VDX Implementation Language (OIL)
相关规范
AUTOSAR 提供了关于基础软件模块的通用规范 [23],该规范也适用于 COM。
因此,规范 [23] 应被视为 COM 的附加和必需规范。
约束和假设
限制
AUTOSAR COM 模块基于 [17]。然而,并非 [17] 的所有功能都包含在内,并且某些功能有所不同。请参阅 [SWS_Com_00013] 以获取未包含的功能列表。
对其他模块的依赖
本章列出了 AUTOSAR COM 模块使用的其他模块的所有功能以及 AUTOSAR COM 模块为其他模块提供的功能。有关 AUTOSAR COM 模块在通信堆栈中的位置,请参见图 1。
PDU 路由器
AUTOSAR COM 模块使用两组 API 的联合体,这两组 API 属于 PDU 路由器的上层模块。即使用 TP 的上层模块的 API 和不使用 TP 的上层模块的 API。这是必要的,因为 AUTOSAR COM 模块在传输 I-PDU 时:
- 要么通过简单的 L-PDU 进行未分段的传输
- 要么通过 TP 进行分段的传输
下面总结了“AUTOSAR COM 模块需要底层 PDU 路由器提供的功能”:
- 关于传入的 I-PDU 的指示
- 发送外发的 I-PDU 的接口,包括确认通信控制器是否已发送 I-PDU
- 触发接口,使 AUTOSAR COM 模块能够触发 PDU 路由器的传输
- TP 通信的缓冲区处理
第 7.5 章和第 9.1 章详细描述了 PDU 路由器的接口。有关更多信息,请参阅 [10]。
COM 用户
运行时环境 (RTE)
RTE 使用 AUTOSAR COM 模块的功能来发送和接收信号。在 AUTOSAR 中,RTE 是在 AUTOSAR COM 模块之上的更高层。有关更多信息,请参阅 [13]。
SwCluC
SwCluC 建立内部软件集群间的连接,用于交换(提供和使用)信号和信号组。软件集群中的 COM 用户可以通过 SwCluC COM High Proxy 访问信号和信号组。在主机软件集群中,SwCluC COM Low Proxy 具有访问 COM 模块的接口。
因此,SwCluC COM Low Proxy 为信号和信号组的接收和传输提供回调。它还可以调用 COM API 来接收和传输信号。SwCluC 回调的存在取决于配置。有关更多信息,请参阅 [24]。
需求可追溯性
下表引用了 [3]、[7]、[17] 和 [9] 中规定的要求,并链接到这些要求的实现情况。本文档未满足的要求链接到 [SWS_Com_00999]。
常规功能
AUTOSAR COM 基础
ISO 17356-4:2005 道路车辆 - 嵌入式汽车应用的开放接口 - 第 4 部分:OSEK/VDX 通信 (COM) 是 AUTOSAR COM 模块的功能基础。在本文档中,它被引用为 [17]。
[SWS_Com_00010]
[SRS_Com_02037]
- AUTOSAR COM 模块应实现 [17] 的所有功能和所有 API,除了 [SWS_Com_00013] 中提到的功能和 API。
[SWS_Com_00011]
[SRS_Com_02037]
- 如果本 AUTOSAR COM 规范对功能的定义与 [17] 中的定义不同,则 AUTOSAR COM 模块应实现本 AUTOSAR COM 规范中定义的功能。
[SWS_Com_00012]
[SRS_Com_02037]
- AUTOSAR COM 模块还应实现本 AUTOSAR COM 规范中定义的所有功能,并且包括那些不属于 [17] 的部分。
[SWS_Com_00013]
[SRS_Com_02037]
- AUTOSAR COM 模块可以实现 [17] 中的以下功能。如果它们在特定的 AUTOSAR COM 模块中被实现,则默认配置应禁用它们。这也适用于“特定实现”可能提供的所有其他的附加功能。
AUTOSAR COM 模块发送和接收的信号可以具有表 2 中定义的值。
[SWS_Com_00675]
[SRS_Com_02078]
[SRS_Com_02094]
- AUTOSAR COM 模块应支持以下数据类型:
- boolean
- uint8
- uint16
- uint32
- uint64
- sint8
- sint16
- sint32
- sint64
- uint8[n]
- float32
- float64
- 类型 uint8[n] 被映射到 ComSignalType UINT8_N 或 UINT8_DYN。
[SWS_Com_00007]
[SRS_Com_02078]
- AUTOSAR COM 模块应支持所有“受支持的有符号和无符号整数数据类型”的字节序转换(参见 [SWS_Com_00675])。
[SWS_Com_00810]
[SRS_Com_02078]
- AUTOSAR COM 模块应:
- 将非整数数据类型(例如 uint8[n] 或 float32)视为“与其数据长度匹配”的整数数据类型
- 或者在其 ComSignalEndianness 被配置为 OPAQUE 的情况下保持其内容不被解释
[SWS_Com_00472]
[SRS_Com_02078]
- AUTOSAR COM 模块应将 OPAQUE 数据解释为 uint8[n],并始终将其映射到 n 字节大小的信号。
对于 OPAQUE 数据字节序,转换必须被配置为 OPAQUE(参见 [ECUC_Com_00157])。
[SWS_Com_00674]
[SRS_Com_02078]
- AUTOSAR COM 模块应将 [17] 第 2.4 章中定义的字节序转换扩展为有符号数据类型的转换。
在 [17] 中,第 2.4 章定义了无符号数据类型的字节序转换。相关配置可在第 10 章中被找到。另请参阅 [ECUC_Com_00127] 和 [ECUC_Com_00157]。
[SWS_Com_00829]
[SRS_Com_02086]
- AUTOSAR COM 模块应将 [17] 第 2.4 章中定义的字节序转换的应用范围扩展到信号组的信号。
在字节序转换方面,AUTOSAR COM 对“信号”和“信号组的信号”的处理方式保持一致。
[SWS_Com_00008]
[SRS_Com_02086]
- AUTOSAR COM 模块应将“接收到的数据的数据大小”扩展为“接收到的信号的 ComSignalType 的大小”(符号扩展)。
必须考虑在某些平台中有符号数据的“特定表示”。确保有符号数据的负值将被正确映射。
示例:
Com_ReceiveSignal 接收一个“10 Bit 有符号信号”并将其复制到“16 Bit 有符号整数变量”中。如果接收十进制 (-3),则接收的 10 Bit 信号的值为 1111111101b。将其复制到 16 Bit 整数变量中时,该值将被扩展为 1111111111111101b。
[SWS_Com_00723]
[SRS_Com_02086]
- AUTOSAR COM 模块应将信号的初始值(ComSignalInitValue)的大小扩展为其 ComSignalType 的大小。
注意:
在发送方的 AUTOSAR COM 模块不需要执行符号扩展,因为它保证要传输的值始终是符号扩展的。另请参阅 [SWS_Com_00785]。
[SWS_Com_00579]
[SRS_Com_02086]
- AUTOSAR COM 模块不应支持 float32 和 float64 数据类型的符号扩展。
[SWS_Com_00221]
[SRS_Com_02078]
- 在发送方的 AUTOSAR COM 模块应在“I-PDU 调用被触发”之前执行字节序转换。有关概述,请参阅第 7.12 章。
[SWS_Com_00352]
[SRS_Com_02078]
[SRS_Com_02086]
- 在接收方的 AUTOSAR COM 模块应在“执行过滤和通知检测”之前执行“符号扩展和字节序转换”。
[SWS_Com_00580]
[SRS_Com_02078]
- 除了字节序转换之外,AUTOSAR COM 模块不得支持对“ComSignalType 为 FLOAT32 或 FLOAT64”的信号的进一步转换。也就是说,应支持字节序转换,但不支持分数、指数、符号或偏差值的复杂转换或规范化。
过滤
[SWS_Com_00694]
[SRS_Com_02037]
- AUTOSAR COM 模块对每个过滤条件的评估结果应仅为“真”或“假”。
[SWS_Com_00695]
[SRS_Com_02037]
- 在接收方的 AUTOSAR COM 模块才应过滤信号。
[SWS_Com_00602]
[SRS_Com_02083]
- 在发送方的 AUTOSAR COM 模块应为“传输模式条件 (TMC) ”使用过滤机制,但过滤机制不应过滤掉信号。
有关“传输模式选择 (TMS) ”的信息,请参见第 7.3.3.2 章和第 7.3.3.3 章。
AUTOSAR COM 模块仅提供在 [17] 中被定义的以下 ComFilterAlgorithm,参见 [ECUC_Com_00146]:
- ALWAYS
- NEVER
- MASKED_NEW_EQUALS_X
- MASKED_NEW_DIFFERS_X
- MASKED_NEW_DIFFERS_MASKED_OLD
- NEW_IS_WITHIN
- NEW_IS_OUTSIDE
- ONE_EVERY_N
为了降低复杂性,AUTOSAR COM 模块不支持在 [17] 中被定义的所有过滤器。不支持的过滤器要么是过时的,要么是其他过滤器的特殊情况。例如,过滤器 NEW_IS_DIFFERENT 是 MASKED_NEW_DIFFERS_MASKED_OLD 的特殊情况,具有完全设置的掩码。
[SWS_Com_00325]
[SRS_Com_02037]
- 考虑到在 [SWS_Com_00380] 和 [SWS_Com_00439] 中被定义的异常,AUTOSAR COM 模块应支持在 [ECUC_Com_00146] 中被列出的所有过滤机制。
[SWS_Com_00380]
[SRS_Com_02037]
- 对于 ComSignalType 被配置为 FLOAT32、FLOAT64、UINT8_N 或 UINT8_DYN 的信号,AUTOSAR COM 模块应仅支持“ComFilterAlgorithm 被配置为 ALWAYS、NEVER 或 ONE_EVERY_N”。
[SWS_Com_00439]
[SRS_Com_02037]
- 对于 ComSignalType 被配置为 BOOLEAN 的信号,AUTOSAR COM 模块应仅支持 ComFilterAlgorithm 被配置为以下选项:
- ALWAYS
- NEVER
- MASKED_NEW_EQUALS_X
- MASKED_NEW_DIFFERS_X
- MASKED_NEW_DIFFERS_MASKED_OLD
- ONE_EVERY_N
[SWS_Com_00764]
[SRS_Com_02037]
- 对于 ComBitSize 被配置为 0 的信号和信号组的信号,AUTOSAR COM 模块不得支持过滤算法 MASKED_NEW_DIFFERS_MASKED_OLD。
[SWS_Com_00866]
[SRS_Com_02037]
- 如果配置的过滤条件是
- MASKED_NEW_DIFFERS_X
- MASKED_NEW_EQUALS_X
- NEW_IS_WITHIN
- NEW_IS_OUTSIDE
- 则 AUTOSAR COM 模块应仅使用过滤器参数的“最低有效 ComBitSize 位”来计算接收过滤器的结果。
[SWS_Com_00273]
[SRS_Com_02037]
- 如果在接收方的 AUTOSAR COM 模块过滤掉某个信号,即对过滤条件的评估结果为假,则 AUTOSAR COM 模块应丢弃该信号并不对其进行处理。另请参阅 [SWS_Com_00303]。
[SWS_Com_00836]
[SRS_Com_02037]
- 如果在接收方的 AUTOSAR COM 模块过滤掉一组信号,即对过滤条件的评估结果为假,则 AUTOSAR COM 模块应丢弃整个信号组并不对其进行处理。
[SWS_Com_00132]
[SRS_Com_02037]
- AUTOSAR COM 模块还应支持在 [ECUC_Com_00146] 中被定义的针对有符号数据类型的过滤机制。
当发生“在发送 API 写入相应信号之前”就对过滤器的过滤条件进行评估时,需要有一种方法来确定与此信号对应的过滤器的状态。一些过滤器需要 new_value 来对过滤条件进行评估,但是,这仅在使用发送 API 更新信号值后才可用。因此,对于 new_value,有必要在第一个发送 API 发生之前的时间段内为过滤器定义一个用于评估的值。
[SWS_Com_00603]
[SRS_Com_02037]
- AUTOSAR COM 模块应在启动期间将“每个过滤机制所对应的信号”的 old_value 设置为 ComSignalInitValue ([ECUC_Com_00170])。另请参阅 [17]。
[SWS_Com_00604]
[SRS_Com_02037]
- 在应用程序尚未更新过滤机制所对应的信号的 new_value 之前,AUTOSAR COM 模块应使用 ComSignalInitValue 作为该信号的 new_value。
根据过滤器的 old_value 的更新,接下来的两个要求明确了 [17] 的定义。
[SWS_Com_00302]
[SRS_Com_02037]
- 如果 AUTOSAR COM 模块对“与信号对应的过滤器的评估条件”的评估结果为真(值未被过滤掉),则 AUTOSAR COM 模块应将该信号的值放入 old_value 中(如在 [17] 中被定义的内容一样)。
[SWS_Com_00303]
[SRS_Com_02037]
- 当对一个值进行过滤时,如果过滤器不允许该值通过(即过滤器对与信号对应的评估条件的评估结果为假),那么 AUTOSAR COM 模块不得将该值放入 old_value 中(如在 [17] 中被定义的内容一样)。
[SWS_Com_00231]
[SRS_Com_02037]
- 如果 ComFilterAlgorithm 被配置为 ONE_EVERY_N,则 AUTOSAR COM 模块应
- 当 OCCURRENCE == PERIOD 时,将 OCCURRENCE 设置为零
- 当 OCCURRENCE == OFFSET 时,将 FILTER 设置为 TRUE
- 在过滤处理完成后递增 OCCURRENCE
有关 OCCURRENCE、FILTER、OFFSET 和 PERIOD 的定义,请参阅 [17]。
当将信号的 ComFilterAlgorithm 配置为 ONE_EVERY_N 时,会导致过滤器的每个 PERIOD 调用都会使信号通过过滤器一次(即与该信号对应的过滤器返回 TRUE)。
- 如果 OFFSET 参数等于零,则当第一次使用过滤器时信号将被允许通过(即与该信号对应的过滤器返回 TRUE)。
- 如果 OFFSET 参数大于零,则当有多个信号通过过滤器时,过滤器才会返回 TRUE。
如果 I-PDU 由 Com_IpduGroupStart 启动,并且 initialize 参数被设置为 TRUE,则 OCCURRENCE 将被设置为零,请参阅 [SWS_Com_00787]。
此定义是为了阐明在 [17] 中对 ONE_EVERY_N 过滤器的描述。
相关配置项请参见第 10 章,参见 [ECUC_Com_00339]。
[SWS_Com_00793]
[SRS_Com_02037]
- 如果在接收方的与该信号对应的过滤器被配置了 MASKED_NEW_DIFFERS_MASKED_OLD,AUTOSAR COM 模块应对“在对该信号的接收超时监控发生超时后”接收到的该信号的第一个值以“该值之前已正常通过过滤器”的方式进行处理。
因此,在对相关的 I-PDU 的接收超时监控发生超时后,AUTOSAR COM 模块将允许任何值通过“被配置为 MASKED_NEW_DIFFERS_MASKED_OLD”的过滤器。
信号网关
AUTOSAR COM 模块提供了集成的信号网关,用于以 1 : n 的方式转发信号和信号组信号。
通过 ComGwMapping 配置容器,路由关系以静态的方式被配置(参见 [ECUC_Com_00544])。
如图 4 和图 5 所示,集成的信号网关将作为所有信号或信号组信号的接收器,这些信号或信号组信号被配置为“通过网关被转发”的信号的源。
信号网关接收到需要被路由的信号或信号组信号后,将立即充当这些信号或信号组信号的发送者。如图 3 和图 5 所示。无论“信号或信号组信号是由集成的信号网关发出”还是“信号或信号组信号是由软件组件发出”,对信号的处理方式都将保持相同。
由于网关的路由关系是以静态的方式被配置的,被优化过的信号网关可能会跳过对一些具体配置的处理阶段。例如,在某些情况下,字节序转换不是必需的。当然,这种优化不应在目标总线上导致任何不同的逻辑行为或表示。优化只能被用于提高信号网关的性能。
如图 4 所示,在本地 ECU 上被接收的信号或信号组信号,可能同时会成为网关的路由操作的数据源。
图 3 和图 4 显示了只为“将被 RTE 接收的信号组信号”准备的隐形缓冲区。当然,集成的信号网关必须确保始终如一地处理信号组信号,但并没有预先规定必须以何种方式实现这一点。
[SWS_Com_00370]
[SRS_GTW_06064]
- 如果不需要信号路由功能,则 AUTOSAR COM 模块的信号网关应被裁剪掉。
普通操作
Start-Up 行为
本章介绍 Com_Init 期间将被执行的操作。
[SWS_Com_00217]
[SRS_BSW_00101]
- AUTOSAR COM 模块应在执行 Com_Init([SWS_Com_00432])期间初始化每个 I-PDU,首先使用 ComTxIPduUnusedAreasDefault 值对每个字节进行初始化,然后根据所属信号的初始值对每个 bit 和 update-bit 进行初始化。
先决条件
C 初始化代码(也被称为启动代码)使用初始值初始化全局变量和静态变量。必须在调用 AUTOSAR COM 模块的任何服务之前执行它。
初始化
[SWS_Com_00128]
[SRS_BSW_00101]
- AUTOSAR COM 模块的初始化函数 Com_Init([SWS_Com_00432])将初始化所有尚未由启动代码初始化的内部数据,例如 C 结构。
此初始化章节尚未结束。有关某些 AUTOSAR COM 模块的功能的初始化的详细信息在以下不同功能章节中被描述。
对 I-PDU 的未被使用的区域的初始化
[SWS_Com_00015]
[SRS_BSW_00101]
[SRS_Com_02042]
- AUTOSAR COM 模块应使用配置参数 ComTxIPduUnusedAreasDefault([ECUC_Com_00017])的值来填充“I-PDU 内未被使用”的区域,例如 0xFF。
对信号和 Update-Bit 的初始化
[SWS_Com_00098]
[SRS_BSW_00101]
- AUTOSAR COM 模块应使用其配置参数 ComSignalInitValue ([ECUC_Com_00170]) 的低字节的 N bit 来初始化每个在发送方和接收方中数据长度为 N bit 的信号类型的信号。
配置参数 ComSignalInitValue ([ECUC_Com_00170]) 也被用于初始化相关 I-PDU 中的信号,参见 [SWS_Com_00217]。
每个信号的 ComSignalInitValue ([ECUC_Com_00170]) 可以与其 ComSignalDataInvalidValue ([ECUC_Com_00391]) 相同。每个信号的这两个值都可以互不相同。
[SWS_Com_00117]
[SRS_BSW_00101]
[SRS_Com_02030]
[SRS_Com_02058]
- AUTOSAR COM 模块应在初始化期间清除所有 update-bit。另请参阅 [SWS_Com_00059]。
对 I-PDU 组的初始化
[SWS_Com_00444]
[SRS_Com_00218]
- 默认情况下,所有 I-PDU 组都应处于停止状态,并且不应在调用 Com_Init ([SWS_Com_00432])时被自动启动。
逆初始化
AUTOSAR COM 模块提供 API 函数 Com_DeInit ([SWS_Com_00130]) 用于 COM 层的逆初始化。这意味着,在逆初始化该层后,无法通过 AUTOSAR COM 模块进行通信,并且所有已被启动的 I-PDU 组都将停止,另请参阅 [SWS_Com_00129]。
通信模式
本章定义了 AUTOSAR COM 模块中的信号流。它进一步定义了 AUTOSAR COM 模块提供的不同传输模式。第 7.3.3.2 章定义了一种机制用于在一个 I-PDU 的两种传输模式之间进行切换。信号的复制在第 7.3.3.4 章中被定义。
第 12 章展示了 AUTOSAR COM 模块可以处理的通信的示例。
传输属性和 I-PDU 的传输模式
信号
AUTOSAR COM 模块支持信号的多种传输属性和 I-PDU 的多种传输模式。本章中的定义基于 [17] 第 2.3.3 章中的定义并由其进行补充。
[SWS_Com_00330]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED 的信号”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度到来之前)对此 I-PDU 进行“ComTxModeNumberOfRepetitions + 1”次传输。
[SWS_Com_00767]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_WITHOUT_REPETITION 的信号”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行 1 次传输。
[SWS_Com_00734]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE 的信号”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,且待发送的信号的新值与本地存储的(此前发送或初始化时的)旧值在数据长度或数据内容上不一致,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行“ComTxModeNumberOfRepetitions + 1”次传输。
[SWS_Com_00768]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE_WITHOUT_REPETITION 的信号”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,且待发送的信号的新值与本地存储的(此前发送或初始化时的)旧值在数据长度或数据内容上不一致,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行 1 次传输。
[SWS_Com_00762]
[SRS_Com_02037]
- 对于传输属性被配置为 TRIGGERED_ON_CHANGE 和 TRIGGERED_ON_CHANGE_WITHOUT_REPETITION 的 AUTOSAR COM 模块,ComBitSize 被配置为 0 的 信号或信号组信号应不被支持。
传输属性 TRIGGERED_ON_CHANGE 和 TRIGGERED_ON_CHANGE_WITHOUT_REPETITION 的支持范围不局限于某些特定的信号类型。因此,它们支持所有可能的信号类型。这其中甚至包括字节数组类型,例如 UINT8_N。
传输复制机制的详细信息在第 7.3.3.4 章中被指定。
[SWS_Com_00135]
[SRS_Com_02083]
- AUTOSAR COM 模块不得对“ComTxModeMode([ECUC_Com_00137])参数被配置为 NONE”的 I-PDU 进行传输。
可以通过 Com_TriggerTransmit 接口主动触发对“ComTxModeMode 参数被配置为 NONE”的 I-PDU 的传输。
与 I-PDU 关联的待处理信号将会在“I-PDU 被传输”时被一起传输,无论触发“I-PDU 的传输”的原因是什么。例如,对于“ComTransferProperty 参数被配置为 TRIGGERED 的信号”,当其所在的 I-PDU 被传输时,或者当其所在的 I-PDU 被调度触发并被传输时(因为 I-PDU 的 ComTxModeMode 参数被配置为 PERIODIC 或 MIXED),信号本身也会一起被传输。
通过用户(例如 RTE、SwCluC)的发送请求、(上面所述的)传输模式以及传输属性,可以控制 I-PDU 在总线上的时序。此外,PDU 路由器(尤其是在 FlexRay 和 LIN 的情况下)也可以使用服务 Com_TriggerTransmit 来控制它。对于第二种情况,PDU 路由器要求 I-PDU 必须为由 AUTOSAR COM 模块发出的。
可以为任何 I-PDU 调用函数 Com_TriggerTransmit,无论其传输模式是什么。这允许 FlexRay 和 LIN 使用所有可用的传输模式,尤其是对于零星通信。NM 也使用此机制发送用户数据。
信号组
在 AUTOSAR COM 中,信号组和信号组信号也可以具有传输属性,结合传输模式,传输属性定义了“当信号组和信号组信号被更新时”I-PDU 是否应该被发送。
[SWS_Com_00741]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED 的信号组”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行“ComTxModeNumberOfRepetitions + 1”次传输。
[SWS_Com_00769]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_WITHOUT_REPETITION 的信号组”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行 1 次传输。
[SWS_Com_00742]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE 的信号组”,如果其不包含任何“拥有为其自身配置的 ComTransferProperty 参数”的信号,则:
- 对于一个信号组的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,且至少存在一个待发送的信号组的信号的新值与本地存储的(此前发送或初始化时的)旧值在数据长度或数据内容上不一致,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行“ComTxModeNumberOfRepetitions + 1”次传输。
[SWS_Com_00743]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE 的信号组”,如果其包含任何“拥有为其自身配置的 ComTransferProperty 参数”的信号,则:
- 对于任何一个信号组的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,且至少存在一个待发送的信号组的信号(其 ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE)的新值与本地存储的(此前发送或初始化时的)旧值在数据长度或数据内容上不一致,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行“ComTxModeNumberOfRepetitions + 1”次传输。
[SWS_Com_00770]
[SRS_Com_02083]
- 对于一个“ComTransferProperty 参数被配置为 TRIGGERED_ON_CHANGE_WITHOUT_REPETITION 的信号组”的发送请求,如果其所属的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,且至少存在一个待发送的信号组的信号的新值与本地存储的(此前发送或初始化时的)旧值在数据长度或数据内容上不一致,则 AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行 1 次传输。
为一个特定的 I-PDU 选择传输模式
I-PDU 携带信号。由于 I-PDU 可以包含多个信号,因此在下文中,定义了一种方法,用于通过判断特定 I-PDU 中的各个信号的状态来得出该 I-PDU 的传输模式。AUTOSAR COM 模块允许为每个 I-PDU 静态地配置两种不同的传输模式(参见 [SWS_Com_00032])。仅使用映射到此 I-PDU 的信号值来选择“在特定时间点才生效的” I-PDU 的传输模式。“I-PDU 的哪些信号被用作关于选择两种传输模式之一的判断条件”和“哪些条件被用作关于选择什么传输模式的判断条件”是被静态地配置的,参见 [SWS_Com_00676]。
在对传输模式的选择中,AUTOSAR COM 模块将信号组的信号视为普通信号。
[SWS_Com_00676]
[SRS_Com_02041]
- 对于 TMS 的评估,AUTOSAR COM 模块应将所有“配置中包含 ComFilter 容器”的(信号组的)信号放在考虑范围内。请参阅在 ComSignal 和 ComGroupSignal 中被包含容器。
如果“ComIPduDirection 参数被配置为 SEND 的 I-PDU”中的信号包含配置容器 ComFilter,则对该 I-PDU 而言该信号将被作为“对于此 I-PDU 的 TMS”的评估条件。如果在该信号的配置容器中没有 ComFilter,则它不会被作为 TMS 的评估条件。
[SWS_Com_00677]
[SRS_Com_02084]
[SRS_Com_02041]
- 如果 I-PDU 中没有信号将被作为 TMS 的评估条件,则 AUTOSAR COM 模块对该 I-PDU 的 TMS 的评估结果应为真。
[SWS_Com_00678]
[SRS_Com_02084]
[SRS_Com_02041]
- 如果 AUTOSAR COM 模块对“将被作为评估条件的信号的 TMC”的评估结果为真,则 AUTOSAR COM 模块对 TMS 的评估结果应为真。
[SWS_Com_00679]
[SRS_Com_02084]
[SRS_Com_02041]
- 如果 AUTOSAR COM 模块对所有“将被作为评估条件的信号的 TMC”的评估结果都不为真,则 AUTOSAR COM 模块对 TMS 的评估结果应为假。
[SWS_Com_00605]
[SRS_Com_02084]
- AUTOSAR COM 模块应为每个 I-PDU 定义一个传输模式选择器。请参阅上文中的 TMS 的定义。
[SWS_Com_00245]
[SRS_Com_02084]
- 通过调用 Com_SendSignal 或 Com_SendSignalGroup 更新 I-PDU 包含的信号后,AUTOSAR COM 模块应重新对 I-PDU 的 TMS 进行评估。
[SWS_Com_00763]
[SRS_Com_02084]
- 对于传输模式的评估,如果过滤器被配置了 MASKED_NEW_DIFFERS_MASKED_OLD,AUTOSAR COM 模块应仅使用“由 ComBitSize 指定的最低有效位(bit)”作为评估条件。
[SWS_Com_00813]
[SRS_Com_02084]
- 对于传输模式的评估,如果过滤器被配置了 MASKED_NEW_DIFFERS_X,MASKED_NEW_EQUALS_X,NEW_IS_OUTSIDE 或者 NEW_IS_WITHIN,AUTOSAR COM 模块应使用“类型由 ComSignalType 指定的信号的所有位(bit)”作为评估条件。
注意
对于“ComFilterAlgorithm 参数被配置为 ALWAYS”的信号,对其所属的 I-PDU 的 TMS 的评估结果将总是为真。因此,在指定哪些信号将被作为评估条件时必须小心谨慎。
[SWS_Com_00032]
[SRS_Com_02082]
[SRS_Com_02084]
- 如果对 I-PDU 的 TMS 的评估结果为真,则 AUTOSAR COM 模块应以“在配置容器 ComTxModeTrue([ECUC_Com_00455])中被定义的 ComTxModeMode 指定的模式”处理该 I-PDU。
[SWS_Com_00799]
[SRS_Com_02082]
[SRS_Com_02084]
- 如果对 I-PDU 的 TMS 的评估结果为假,则 AUTOSAR COM 模块应以“在配置容器 ComTxModeFalse([ECUC_Com_00454])中被定义的 ComTxModeMode 指定的模式”处理该 I-PDU。
[SWS_Com_00238]
[SRS_Com_02082]
- 在两种 TMS 状态的任一状态下,“信号的传输特性与 I-PDU 的传输模式”的组合方式应被应用,如其在 [17] 第 2.3 节中的定义的一样。
[SWS_Com_00239]
[SRS_Com_02082]
- 当 I-PDU 的 TMS 的状态发生变化时,AUTOSAR COM 模块应立即(最迟应在主函数的下一次调度结束之前)选择当前可用的传输模式。这意味着,AUTOSAR COM 模块应首先执行模式切换,然后,AUTOSAR COM 模块应执行由模式切换引起的对 PduR_ComTransmit 的任何调用。
[SWS_Com_00244]
[SRS_Com_02082]
- 如果 TMS 的状态变化导致 I-PDU 的传输模式发生了变化,则传输模式 PERIODIC 和 MIXED 的周期时间定时器应该被 AUTOSAR COM 模块重新启动。
[SWS_Com_00495]
[SRS_Com_02082]
- 当对 Com_SendSignal 或 Com_SendSignalGroup 的调用导致已被启动的 I-PDU 的传输模式被更改为 PERIODIC 或 MIXED 时,AUTOSAR COM 模块应(最迟应在主函数的下一次调度结束之前)调用 PduR_ComTransmit 来启动新的传输周期。无论导致传输模式切换的信号或信号组的传输属性是什么,传输都应被启动。最小延迟时间仍应被遵守。另请参见图 5 AUTOSAR COM 模块的接收的交互模型。
只有在“显式地 I-PDU 传输模式切换”中,ComTxModeTimeOffset 才应被遵守。例如 Com_IpduGroupStart 或 Com_SwitchIpduTxMode。
[SWS_Com_00582]
[SRS_Com_02082]
- 如果 TMS 的状态变化导致传输模式变为 DIRECT,则应立即(除非由 MDT 导致的时间偏移发生,最迟应在主函数的下一次调度结束之前)启动直接向底层的 n 次传输。
上述要求阐明了,当由“ComTransferProperty 参数被配置为 PENDING”的信号触发的 TMS 的状态变化导致 ComTxModeMode 变为 DIRECT 时,应该被采取的行为。
如果 I-PDU 的 ComTxModeMode 被配置为 NONE,则 AUTOSAR COM 将不会启动对此 I-PDU 的任何传输。这可用于阻止 I-PDU 的传输。例如,当对 TMS 的评估结果为假时,可以使用这种方式阻止 I-PDU 的传输。
[SWS_Com_00478]
[SRS_Com_02083]
- 在对 Com_MainFunctionTx 的单次调用中,AUTOSAR COM 模块最多对 I-PDU 进行一次传输。
信号流和传输模式选择(TMS)
在用户(例如 RTE 或 SwCluC)发出对特定信号的发送请求后,根据配置,该信号将被写入适当的 I-PDU 缓冲区中,并根据第 7.3.3.2 章的内容对 I-PDU 的传输模式进行选择。
图 2 显示了信号流:
当 ComTxModeMode 为 DIRECT 或 MIXED 时,对“用户·(例如 RTE 或 SwCluC)的发送请求”进行重复传输的次数由配置参数 ComTxModeNumberOfRepetitions([ECUC_Com_00281])定义。
[SWS_Com_00467]
[SRS_Com_02083]
- 如果 ComRetryFailedTransmitRequests 不为 TRUE,当对“ComTxModeMode 参数被配置为 DIRECT 或 MIXED 且 ComTxModeNumberOfRepetitions 参数被配置为 0”的 I-PDU 的发送请求被触发时,则 AUTOSAR COM 模块应仅对该 I-PDU 调用一次 PduR_ComTransmit,无论“对于传输的确认的结果”如何。
如果 ComTxModeNumberOfRepetitions 参数被配置为 0,将会启动 [17] 中的 DIRECT 传输模式。
[SWS_Com_00279]
[SRS_Com_02080]
- 如果 AUTOSAR COM 模块在处理“作为一个整体的 n 次重复传输(例如,在 5 次重复传输中的第 3 次传输之后,参见 [SWS_Com_00305])”时接收到来自用户(例如 RTE 或 SwCluC)的新的传输请求,则 AUTOSAR COM 模块应取消当前对重复传输的处理并(最迟应在主函数的下一次调度结束之前)开始对新的请求进行处理,参见附录 A 用例 4。
[SWS_Com_00305]
[SRS_Com_02083]
- 当对“ComTxModeMode 参数被配置为 DIRECT 或 MIXED 且 ComTxModeNumberOfRepetitions 参数被配置为大于 0”的 I-PDU 进行传输时,AUTOSAR COM 模块应周期性地(周期为 ComTxModeRepetitionPeriod)调用 PduR_ComTransmit, 直到确认传输请求已被成功地完成“ComTxModeNumberOfRepetitions + 1”次为止。
[SWS_Com_00305] 假设 CAN 没有为这些 I-PDU 提供队列。在“CAN 驱动程序、接口和硬件之间发生交互”时存在的竞争条件在“某些不太可能的情况”下可能会导致额外的传输发生。
当 N 次传输正在被处理时,如果底层返回 E_NOT_OK,则应忽略此错误通知,除非 ComRetryFailedTransmitRequests 被设置为 TRUE(另请参阅 [SWS_Com_00773])。正如 [SWS_Com_00305] 所规定的那样,只有已被确认的传输才能被计入 N 次传输的传输记录中,发生错误的传输可以被安全地忽略。
在传输模式为 MIXED 的情况下,如果在周期性传输结束后存在一个“N 次传输”请求,且同时存在一个待处理的传输确认,则“属于之前的周期性传输的传输确认”应被分配给新的“N 次传输”。在这种情况下,在“对新值进行传输的 N 次传输”中只有“N - 1”次传输将会被继续处理。传输超时定时器最早将会在“此 N 次传输请求结束后”被重置。当在“传输模式为 MIXED 且存在 N 次传输请求”的情况下对传输超时定时器进行配置时,上述规则应被遵守。
[SWS_Com_00494]
[SRS_Com_02083]
- 在传输模式为 MIXED 的情况下,如果当前正在进行的传输为周期性传输,且存在一个“N 次传输请求”,则对周期性传输的处理应被算作对“N 次传输请求”的处理。
[SWS_Com_00392]
[SRS_Com_02083]
- 如果在“N 次传输请求”完成之前发生传输超时,则 AUTOSAR COM 模块应停止对这个“N 次传输请求”的进一步处理。
最小的延迟时间应始终被考虑,如 [17] 第 2.3.4 章所定义。
为了避免总线在启动时出现高负载的情况,可以为每个 I-PDU 配置时间偏移。有关详细信息,请参阅 [ECUC_Com_00180]。
每次重复传输之间的时间是由配置参数 ComTxModeRepetitionPeriod([ECUC_Com_00282])配置。
当“对信号的发送请求”导致传输模式从“非 MIXED 传输模式”切换为“MIXED 传输模式”时,且 ComTxModeNumberOfRepetitions 参数被配置为“大于等于 1”,则当传输开始时,PDU 路由器将至少收到“ComTxModeNumberOfRepetitions + 1”次传输请求。另请参阅 [SWS_Com_00305]。
对已失败的传输请求进行重试
[SWS_Com_00773]
[SRS_Com_02037]
- 如果 ComRetryFailedTransmitRequests 参数被配置为 TRUE,则应对 PduR_ComTransmit 的返回值进行处理。如果 PduR_ComTransmit 的返回值不等于 E_OK,则 AUTOSAR COM 模块应“在 Com_MainFunctionTx 的下一次调度结束之前”再次为传输失败的 I-PDU 调用 PduR_ComTransmit。
如果在此期间 I-PDU 被更新,则在重试传输过程中会使用被更新后的 I-PDU。
[SWS_Com_00773] 可能会导致对“同一个失败的传输请求”进行多次重试。
“传输模式的切换”不会对 [SWS_Com_00773] 造成影响。
[SWS_Com_00773] 不会对其他重复传输的周期造成影响。任何重复传输都将按预期进行(仿佛 [SWS_Com_00773] 的重试操作不存在一样)。
[SWS_Com_00774]
[SRS_Com_02037]
- AUTOSAR COM 模块应为每个可能的重试传输“单独地”开启传输超时监控,后续的其他重试传输不应对之前的重试传输的传输超时监控造成影响。
[SWS_Com_00775]
[SRS_Com_02037]
- 如果 ComRetryFailedTransmitRequests 参数被配置为 TRUE,并且对 I-PDU 的传输超时监控发生超时,则 AUTOSAR COM 模块应将“对此 I-PDU 的任何待被处理的传输请求”置为超时状态。
[SWS_Com_00776]
[SRS_Com_02037]
- 周期性传输的循环定时器应始终在“第一次传输(无论传输是否成功)开始”时被启动。
信号失效
AUTOSAR COM 模块使发送方有能力在“无法为相应信号提供有效值”时表明这一点,例如当传感器出现故障时。AUTOSAR COM 模块允许在配置期间定义 ComSignalDataInvalidValue ([ECUC_Com_00391])。
对无效信号的传输
[SWS_Com_00099]
[SRS_Com_02077]
- 当调用 Com_InvalidateSignal 时,AUTOSAR COM 模块应使用 ComSignalDataInvalidValue([ECUC_Com_00391])参数被配置的值在内部调用 Com_SendSignal。
ComTransferProperty 和传输模式决定了 ComSignalDataInvalidValue 在总线上何时应被传输。当内部使用信号的无效值调用 Com_SendSignal 时,将使“被作为信号当前的值”的无效值参与“对过滤器和 TMS 的评估”。
信号的无效值按信号组的形式被配置,参见 [ECUC_Com_00520]。
VFB 只为“复杂数据类型”定义了一个属性。因此,将一个无效“复杂数据类型”映射到一个无效信号组的最佳方法是使信号组的所有信号组信号变为无效状态。因此,用户(例如 RTE 或 SwCluC)可以通过调用 Com_InvalidateSignalGroup ([SWS_Com_00557]) 来请求使整个信号组变为无效状态。
对无效信号的接收
[SWS_Com_00680]
[SRS_Com_02079]
- 对于一个信号,如果接收到的值为“为其配置的 ComSignalDataInvalidValue ([ECUC_Com_00391]) 参数”的值,且该信号的 ComDataInvalidAction ([ECUC_Com_00314]) 参数被配置为 NOTIFY, 则 AUTOSAR COM 模块应通过由 ComInvalidNotification 参数配置的函数通知用户(例如 RTE 或 SwCluC)。在这种情况下,不应对此信号进行任何其他的“信号处理”(例如过滤或正常的信号指示)。
如果接收到无效的信号或信号组,则接收超时定时器会被重新启动,参见[SWS_Com_00738]。
[SWS_Com_00681]
[SRS_Com_02079]
[SRS_Com_02087]
- 对于一个信号,如果接收到的值为“为其配置的 ComSignalDataInvalidValue ([ECUC_Com_00391]) 参数”的值,且该信号的 ComDataInvalidAction ([ECUC_Com_00314]) 参数被配置为 REPLACE, 则 AUTOSAR COM 模块应使用“为其配置的 ComSignalInitValue ([ECUC_Com_00170]) 参数”的值替换信号当前的值。替换后,应对其进行正常的信号处理(如过滤和通知),仿佛最开始接收到的值为 ComSignalInitValue 而不是 ComSignalDataInvalidValue。
[SWS_Com_00682]
[SRS_Com_02079]
- 对于一个信号组,如果接收到的信号组信号里存在至少一个信号的值为“为其配置的ComSignalDataInvalidValue ([ECUC_Com_00391]) 参数”的值,且该信号组的 ComDataInvalidAction ([ECUC_Com_00314]) 参数被配置为 NOTIFY, 则 AUTOSAR COM 模块应通过由 ComInvalidNotification 参数配置的函数通知用户(例如 RTE 或 SwCluC)。在这种情况下,不应对其进行任何其他的“信号组/信号组信号处理”(例如正常的信号指示)。
[SWS_Com_00683]
[SRS_Com_02087]
- 对于一个信号组,如果接收到的信号组信号里存在至少一个信号的值为“为其配置的ComSignalDataInvalidValue ([ECUC_Com_00391]) 参数”的值,且该信号组的 ComDataInvalidAction ([ECUC_Com_00314]) 参数被配置为 REPLACE, 则 AUTOSAR COM 模块应使用“为每个信号组信号配置的 ComSignalInitValue 参数”的值替换每个信号组信号当前的值。替换后,应对其进行正常的信号组/信号组信号处理(如接收通知),仿佛最开始接收到的每个信号组信号的值为 ComSignalInitValue。
[SWS_Com_00717]
[SRS_Com_02079]
- 对于一个信号,如果接收到的值为“为其配置的 ComSignalDataInvalidValue 参数”的值,且该信号的 ComDataInvalidAction 参数被配置为 NOTIFY, 则 AUTOSAR COM 模块不得将接收到的 ComSignalDataInvalidValue 存储到信号对象中。
对 Com_ReceiveSignal 的下一次调用将返回最后接收到的有效信号的值,如果尚未接收到任何该信号的值,则返回 ComSignalInitValue。
[SWS_Com_00718]
[SRS_Com_02079]
- 对于一个信号组,如果接收到的信号组信号里存在至少一个信号的值为“为其配置的 ComSignalDataInvalidValue 参数”的值,且该信号组的 ComDataInvalidAction 参数被配置为 NOTIFY,则 AUTOSAR COM 模块不得将任何接收到的信号组信号存储到信号对象中。
对 Com_ReceiveSignalGroup 的下一次调用将会把最后接收到的有效信号组信号复制到影子缓冲区中。如果尚未接收到信号组的任何信号,则会将与每个信号组信号对应的 ComSignalInitValue 复制到影子缓冲区中。
对 I-PDU 的处理
I-PDU 组的定义
以下规则适用于 I-PDU 组:
- 一个 I-PDU 可以属于任何 I-PDU 组。
- 如果 I-PDU 所属的 I-PDU 组(参见 [SWS_Com_00771])被启动,或者它不属于任何 I-PDU 组但被隐式启动(参见 [SWS_Com_00840]),则该 I-PDU 处于活动状态(已被启动)。
- I-PDU 组的最大数量可在预编译阶段被配置。
- 一个 I-PDU 组应只包含一个方向(即发送或接收)的 I-PDU,请参阅 [SWS_Com_00871]。
COM 的配置支持规则 1 和 3。支持的 I-PDU 组的最大数量可通过 ComSupportedIpduGroups ([ECUC_Com_00710]) 进行配置。
[SWS_Com_00771]
[SRS_Com_00218]
- 对于一个 I-PDU,如果其所属的 I-PDU 组中至少存在一个 I-PDU 组处于活动状态(已被启动),则该 I-PDU 处于活动状态(已被启动)。
对于 AUTOSAR COM 模块,I-PDU 组的嵌套纯粹是概念上的,必须通过”适当的配置”和/或“对 AUTOSAR COM 模块的使用”来解决。
例如,如果 I-PDU“BUS1 RX Function1”属于 I-PDU 组“BUS1 RX”,并且 I-PDU 组“BUS1 RX”被包含在 I-PDU 组“BUS1”中,则 I-PDU“BUS1 RX Function1”也必须被包含在 I-PDU 组“BUS1”中。此类依赖关系需要在配置时被解决。
再次强调,COM 模块并不知晓或并不处理任何 I-PDU 组。任何 I-PDU 组都必须通过配置的方式或通过调用模块的方式被处理。
此外,对 I-PDU 组的完整状态处理预期将在 AUTOSAR COM 模块之外被完成,例如在 BswM 内。如果状态发生变化,管理 I-PDU 组的状态的模块将通过 Com_IpduGroupStart 和 Com_IpduGroupStop 持续启动或停止 I-PDU 组。
未被分配给任何 I-PDU 组的 I-PDU 的状态无法被更改,因此它们是被隐式启动的:
[SWS_Com_00840]
[SRS_Com_00218]
- 如果一个 I-PDU 未被分配给任何 I-PDU 组,则 AUTOSAR COM 应在对 Com_Init 的调用过程中启动此 I-PDU,就好像它是由 Com_IpduGroupStart 启动并且 Initialize 参数被设置为 TRUE 一样(参见第 7.3.5.2 章)。
由于 AUTOSAR COM 从不隐式地停止这样的 I-PDU,并且因为它没有被分配给任何 I-PDU 组,所以这样的 I-PDU 将永远无法被停止。
启动 I-PDU 组
默认情况下,所有 I-PDU 组均处于停止状态,请参阅 [SWS_Com_00444]。调用 Com_IpduGroupStart 可启动先前处于停止状态的 I-PDU 组。
[SWS_Com_00114]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStart 启动,则 AUTOSAR COM 模块应允许此 I-PDU 中的信号和信号组被传输或接收,另见表 4。
[SWS_Com_00787]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStart 启动,则 AUTOSAR COM 模块应始终初始化此 I-PDU 的以下属性:
- 当传输模式为 DIRECT 或 MIXED 时,应初始化 I-PDU 的 ComMinimumDelayTime 属性。
- 重新启动所有“ComFirstTimeout 属性被配置为非零”的信号的接收超时监控定时器
- 取消所有传输超时定时器,并当传输超时定时器在“I-PDU 被激活”后被第一次启动时,使用 ComFirstTimeout(如果此参数已被配置)作为定时器的初始值。
- 所有被包含的更新位(update-bit)都应被清除
- 重置“ComFilterAlgorithm 配置参数被设置为 ONE_EVERY_N”的过滤器的 OCCURRENCE 参数。
[SWS_Com_00222]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStart 启动,并且 Initialize 参数被设置为 TRUE,则 AUTOSAR COM 模块还应(参见 [SWS_Com_00787]) 初始化此 I-PDU 的以下属性:
- 在 [SWS_Com_00217] 中被定义的 I-PDU 的数据
- 所包含的信号组的阴影缓冲区
- 将各个“与信号对应的过滤机制”的 old_value 的值设置为 ComSignalInitValue。
- 传输模式为 PERIODIC 或 MIXED 的 I-PDU 的 ComTxModeTimePeriod 和 ComTxModeTimeOffset 属性。
[SWS_Com_00223]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStart 启动,则 AUTOSAR COM 模块应根据其当前的数据内容确定它的传输模式。
[SWS_Com_00228]
[SRS_Com_00218]
- 在某些情况下,在“I-PDU 所包含的所有信号”都被更新完成之前,I-PDU 就可能已经被 Com_IpduGroupStart 启动了。此时,对于未被更新的信号,AUTOSAR COM 模块应将信号的值设置为“该信号的 ComSignalInitValue 参数”的值。
[SWS_Com_00229]
[SRS_Com_00218]
- 当一个 I-PDU 被启动,且该 I-PDU 中的一个或多个信号已经被上层用户通过某个发送 API 更新时,AUTOSAR COM 模块应使用信号的最新的值来对 I-PDU 的 TMS 进行评估。
[SWS_Com_00733]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStart 启动,并且在 I-PDU 中存在“超时定时器已被配置”的信号([ECUC_Com_00183]、[ECUC_Com_00263]),则 AUTOSAR COM 模块应使用“这些超时定时器各自的初始化值”单独地启动各个超时定时器。
注意
如果一个 I-PDU 被 Com_IpduGroupStart 启动,并且 initialize 参数被设置为 FALSE,则其内部缓冲区将不会在被启动时被改变,因此在被启动时 I-PDU 包含的是最后被设置或初始化的值。特别是,如果 I-PDU 是第一次被启动,并且 initialize 参数被设置为 FALSE,则 AUTOSAR COM 模块此时处理的 I-PDU 包含的值是“在对 Com_Init 调用阶段”被设置的初始值。
[SWS_Com_00877]
[SRS_Com_00218]
- 如果一个 I-PDU 不属于任何 I-PDU 组,则其将会在“AUTOSAR COM 模块被初始化”时被启动。其初始传输模式应该由“作为对其 TMS 的评估的评估条件”的信号的 ComSignalInitValue 来决定。
对于这种情况,评估可以在配置时被完成,因为在 AUTOSAR COM 模块被初始化之前无法对信号进行写入。
停止 I-PDU 组
如果一个 I-PDU 组先前已被启动,则可以调用 Com_IpduGroupStop 将该 I-PDU 组停止。
为了禁用某个 I-PDU 的传输,需要停止所有包含此 I-PDU 的 I-PDU 组的传输。因此,为了实现侦听模式(listen-only-mode),所有“包含需要被传输(发送)的 I-PDU 的 I-PDU 组”都需要被停止。对 I-PDU 的接收也应该被停止。
[SWS_Com_00334]
[SRS_Com_00218]
- 通过调用以下函数:Com_SendSignal、Com_SendSignalGroup 或 Com_InvalidateSignal,AUTOSAR COM 模块应更新其内部的 I-PDU 的缓冲区的值,即使对于已被停止的 I-PDU 也是如此。另见表 3。
对于一个处于停止状态的 I-PDU,如果对“属于此 I-PDU 且作为触发它的传输的条件”的信号进行写入,且此时没有使此 I-PDU 停止的操作, 则此触发动作不会在此 I-PDU 下一次被启动时生效。因此,在重新启动包含此 I-PDU 的 I-PDU 组时,之前的触发动作不会导致此 I-PDU 此时被立即传输。
[SWS_Com_00777]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应取消此 I-PDU 的任何处于未完成状态的传输请求。这包括取消任何与 ComRetryFailedTransmitRequests 有关的潜在的重试操作。
[SWS_Com_00115]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应取消所有对“处于待处理状态的对此 I-PDU 的传输确认”的超时监控。
[SWS_Com_00800]
[SRS_Com_00218]
- AUTOSAR COM 模块应忽略任何对“已被停止的 I-PDU”的传输确认。
AUTOSAR COM 模块无法禁止对 Com_TriggerTransmit 函数的调用。但是,如果对一个已被停止的 I-PDU 调用此函数,Com_TriggerTransmit 函数将返回 E_NOT_OK。请参阅 [SWS_Com_00884]。
[SWS_Com_00684]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应禁用对此 I-PDU 的接收处理。
[SWS_Com_00713]
[SRS_Com_00218]
- 如果一个大型 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应停止对此 I-PDU 的接收处理并舍弃已接收的部分。
[SWS_Com_00685]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应取消对此 I-PDU 的传输(发送)超时监控。
[SWS_Com_00479]
[SRS_Com_00218]
- 如果一个 I-PDU 被 Com_IpduGroupStop 停止,AUTOSAR COM 模块应立即对“此 I-PDU 的正在被传输且尚未被进行传输确认的信号/信号组”调用已被配置的 ComErrorNotification 函数接口。
[SWS_Com_00714]
[SRS_Com_00218]
- 如果一个大型 I-PDU 在传输过程中被停止,则 AUTOSAR COM 模块应立即停止对此 I-PDU 的传输处理。
表 3 概述了被停止的 I-PDU 的行为:
表 4 概述了被启动的 I-PDU 的行为:
为了同时支持由中断驱动的系统或轮询的系统,可以对“信号指示发生的时间”进行配置。有两种可被配置的信号指示模式 IMMEDIATE 和 DEFERRED,可通过 ComIPduSignalProcessing 参数进行配置。请参阅 [ECUC_Com_00119]。
[SWS_Com_00300]
[SRS_Com_02046]
- 如果一个 I-PDU 的 ComIPduSignalProcessing 参数被配置为 IMMEDIATE,则 AUTOSAR COM 模块应对“在 Com_RxIndication 中被包含的信号和信号组”分别地调用已被配置的 ComNotification 函数接口或者 Com_TpRxIndication 函数。
[SWS_Com_00301]
[SRS_Com_02046]
- 如果一个 I-PDU 的 ComIPduSignalProcessing 参数被配置为 DEFERRED,则 AUTOSAR COM 模块应首先在“Com_RxIndication 函数或相关 TP 接收函数”中将已被接收的 I-PDU 中的相关数据(例如已被配置的 ComSignal)分别地从 AUTOSAR PduR 模块复制到 AUTOSAR COM 模块。然后,AUTOSAR COM 模块应在“对 Com_MainFunctionRx 函数的下一次调用”期间异步地对“在相关数据中被包含的信号和信号组”调用已被配置的 ComNotification 函数接口。
对于具有动态长度的 ComSignal,根据 [ECUC_Com_00437],AUTOSAR COM 模块必须考虑使用已被配置的长度来分配缓冲区。
当在 DEFERRED 模式下,如果在“进行延迟解包(deferred unpacking)操作”之前对 Com_ReceiveSignal 进行调用,则会返回信号之前的(未被更新的)值。
有关这两种指示选项的序列图,请参见第 9.3 章。关于这些模式的配置在 [ECUC_Com_00119] 中被定义。
[SWS_Com_00574]
[SRS_Com_02046]
- 在对 I-PDU 进行解包时,AUTOSAR COM 模块应检查已被接收的数据的数据长度(PduInfoPtr->SduLength),然后解包,并对已被接收完成的信号调用 ComNotification 以通知相关模块关于此信号的接收。
[SWS_Com_00870]
[SRS_Com_02046]
- 如果正在对一个 I-PDU 进行接收,且当前已被接收的数据的数据长度比“通过 ComPduIdRef 参数得到”的长度要小,且在此 I-PDU 中存在数据长度为 0 的信号,且该信号“在此 I-PDU 中的起始位置到此 I-PDU 的首字节”的(字节)长度小于等于此 I-PDU 的已接收的部分的数据长度,则应该对此信号进行接收。
[SWS_Com_00794]
[SRS_Com_02046]
- 如果正在对一个 I-PDU 进行接收,且当前已被接收的数据的数据长度比“预期”的长度要小,且接收到一个信号,其更新位(update-bit)不位于已被接收的数据内(更新位还未被接收),AUTOSAR COM 模块应视该信号的更新位(update-bit)为已被设置,并将该信号解释为已被更新。
如果正在对一个 I-PDU 进行接收,且当前已被接收的数据的数据长度比“被配置/预期”的 I-PDU 的长度要小,则需要防止信号被部分地更新。另一方面,所有“已经完成接收处理”的信号应该被接收并应向上层通知有关这些信号的接收。
[SWS_Com_00575]
[SRS_Com_02046]
- 在对 I-PDU 进行解包时,AUTOSAR COM 模块应检查已被接收的数据的数据长度(PduInfoPtr->SduLength),且如果存在一个信号组,该信号组被部分地接收,则该信号组及该信号组内的信号组信号不应被解包,且不应通过 ComNotification 函数向上层通知有关该信号组及该信号组内的信号组信号的接收。
上述要求可防止被接收的信号组出现不完整的问题,从而防止被接收的复杂数据类型出现不完整的问题。
如果已被接收的数据的数据长度大于预期,AUTOSAR COM 模块不会复制或处理额外(未被配置)的信号的数据。
AUTOSAR COM 模块只会复制或处理 I-PDU 中位于“符合预期长度(预期长度是指所有被动态或静态配置的 ComSignal 的长度,这之中包括 ComSignal 与 ComSignal 之间的空隙)的信号所占据的区域”的数据,超出预期长度的部分的数据应被忽略。
最小延迟定时器 (MDT)
AUTOSAR COM 模块继承了在 [17] 中被定义的“最小延迟定时器”机制。本章将阐明并描述此机制。
当一个 I-PDU 被启动时,MDT 会被重新初始化。因此,快速地停止和启动 I-PDU 将会触发 MDT 的失败条件(MDT 定义了 I-PDU 的每次启动之间的最短时间间隔)。
传输超时定时器的行为不会受任何“由最小延迟时间所导致的”传输延迟的影响。
[SWS_Com_00471]
[SRS_Com_02037]
- 如果 ComMinimumDelayTime 参数被配置为 0 或没有被配置,则不会对最小延迟时间进行监控。
[SWS_Com_00789]
[SRS_Com_02037]
- 如果 ComEnableMDTForCyclicTransmission ([ECUC_Com_00788]) 参数被配置为 FALSE,则在下列情况中不得(重新)启动最小延迟定时器:
- 正在处理的 I-PDU 的 ComTxModeMode 参数被配置为 PERIODIC。
- 正在处理 ComTxModeMode 参数被配置为 MIXED 的 I-PDU 的周期性传输的部分。
- 对“ComTxModeNumberOfRepetitions 参数被配置为大于 0”的 I-PDU 进行重复传输。
如果 MDT 当前未被启动,则 MDT 将无法触发超时。因此,被优化过的实现方式为,例如,当 ComEnableMDTForCyclicTransmission 参数被配置为 FALSE,则不对“传输模式为周期性传输”的 I-PDU 的最小延迟时间进行监控。因为对于“传输模式为周期性传输”的 I-PDU 来说,MDT 自始至终都不会被启动。
[SWS_Com_00698]
[SRS_Com_02037]
- 如果一个 I-PDU 的 ComMinimumDelayTime 参数被配置为大于 0,且 ComRetryFailedTransmitRequests 参数被设置为 FALSE,则当“调用 PduR_ComTransmit 函数向 PDU 路由器传输 I-PDU”时,AUTOSAR COM 模块应装载并启动该传输的最小延迟定时器的计数器。
[SWS_Com_00828]
[SRS_Com_02037]
- 如果一个 I-PDU 的 ComMinimumDelayTime 参数被配置为大于 0,且 ComRetryFailedTransmitRequests 参数被设置为 TRUE,则当“调用 PduR_ComTransmit 函数向 PDU 路由器传输 I-PDU”且“PduR_ComTransmit 函数的返回结果为 E_OK”时,AUTOSAR COM 模块应装载并启动该传输的最小延迟定时器的计数器。
[SWS_Com_00469]
[SRS_Com_02037]
- 如果一个 I-PDU 的 ComMinimumDelayTime 参数被配置为大于 0,当成功地接收到此 I-PDU 的传输确认时,AUTOSAR COM 模块应使用 ComMinimumDelayTime 参数的值来(重新)装载“处于运行状态且未发生超时”的此 I-PDU 的最小延迟定时器的计数器。
当成功地接收到一个 I-PDU 的传输确认时,除非传输的延迟时间已经超过了 ComMinimumDelayTime 参数被配置的值,否则“处于运行状态的最小延迟定时器的计数器”都应被重新装载。在正常情况下,除非已被装载并被启动的最小延迟定时器已发生超时,否则 AUTOSAR COM 模块不应对此 I-PDU 进行进一步的传输。另请参见 [17] 中的图 2-4、2-5 和 2-7。但是,存在一些例外:根据 [SWS_Com_00475],Com_TriggerTransmit 不会干扰最小延迟定时器。此外,如果传输超时定时器发生超时,则应重置最小延迟定时器。参见 [17] 中的第 2.3.4 章。另外,启动一个 I-PDU 组会导致此 I-PDU 组包含的所有 I-PDU 的最小延迟定时器被重置。
[SWS_Com_00812]
[SRS_Com_02037]
- 如果在一次对 I-PDU 的传输处理中,“传输超时定时器发生超时”导致“此 I-PDU 的最小延迟定时器”被重置,且在本次传输之后对该 I-PDU 的传输请求仍然存在,则 AUTOSAR COM 模块应立即传输此 I-PDU。
超时监控
对信号的超时监控在 [17] 中被定义。
对“信号组的超时监控”的处理和对“信号的超时监控”的处理保持一致。超时监控的 ComFirstTimeout 参数和 ComTimeout 参数可以在配置容器 ComSignal 或 ComSignalGroup 中被定义。
可以在配置容器 ComUserCallback 中的参数中定义相应的超时的通知回调函数。
[SWS_Com_00333]
[SRS_Com_02089]
- 如果一个信号或信号组的 ComTimeout 参数被配置为 0 或没有被配置,则 AUTOSAR COM 模块不应对该信号或信号组进行超时监控。同时也应该忽略对 ComFirstTimeout 参数的配置。
接收超时监控
可以通过对 I-PDU 组的控制进而开启或关闭对接收的超时监控,这与第 7.3.5.1 章的内容类似。
[SWS_Com_00772]
[SRS_Com_00192]
- 当且仅当 I-PDU 所在的 I-PDU 组的接收超时监控被开启时,对此 I-PDU 的接收超时监控才会被开启。否则,对此 I-PDU 的接收超时监控会被关闭。
[SWS_Com_00292]
[SRS_Com_02089]
[SRS_Com_02058]
- 当对“带有更新位(update-bit)的信号”配置了接收超时监控时,则 AUTOSAR COM 模块对每个“带有更新位(update-bit)的信号组或信号”的接收超时监控的处理应被单独地进行。有关 ComTimeout 的配置,请参阅 [ECUC_Com_00263]。
[SWS_Com_00290]
[SRS_Com_02089]
[SRS_Com_02058]
- 对于不带有更新位(update-bit)的信号,AUTOSAR COM 模块应使用“对其所在的 I-PDU 的接收超时监控”来代替“对此信号的接收超时监控”。
[SWS_Com_00291]
[SRS_Com_02089]
[SRS_Com_02058]
- 对于“位于同一个 I-PDU 内的所有不带有更新位(update-bit)”的信号和信号组,AUTOSAR COM 模块应使用他们的超时参数(ComFirstTimeout、ComTimeout)之中“值最小且值不等于 0”的参数的值作为超时值来对此 I-PDU 进行接收超时监控。
如果一个 I-PDU 内的所有信号都“带有更新位(update-bit)”且都“需要被进行接收超时监控”,则不需要单另地对此 I-PDU 进行接收超时监控。
当接收超时发生,ComRxDataTimeoutAction 参数被配置的值将决定 AUTOSAR COM 模块是否需要采取以下措施:使用初始值替换信号/信号组的值,使用替代值替换信号/信号组的值,保留最后一次有效接收时的值。请参阅 [ECUC_Com_00412]。
[SWS_Com_00470]
[SRS_Com_02087]
[SRS_Com_02088]
- 如果 ComRxDataTimeoutAction 参数被配置为 REPLACE(参见 [ECUC_Com_00412]),则当信号的接收超时定时器发生超时时,AUTOSAR COM 模块应使用该信号的 ComSignalInitValue 参数的值替换其当前的值(参见 [ECUC_Com_00170])。
对于一个信号,如果使用 ComSignalInitValue 参数被配置的值来替换最后一次有效接收时的值,则最后一次有效接收时的值将会被覆盖且无法被复原。因此,在超时的情况发生后,如果上层请求该信号的值,AUTOSAR COM 模块将返回该信号的 ComSignalInitValue 参数被配置的值,此操作将一直持续到该信号的新的有效值被接收。
[SWS_Com_00875]
[SRS_Com_02088]
- 如果 ComRxDataTimeoutAction 参数被配置为 SUBSTITUTE(参见 [ECUC_Com_00412]),则当信号的接收超时定时器发生超时时,AUTOSAR COM 模块应使用该信号的 ComTimeoutSubstitutionValue 参数的值替换其当前的值(参见 [ECUC_Com_10006])。
[SWS_Com_00500]
[SRS_Com_02087]
- 如果 ComRxDataTimeoutAction 参数被配置为 NONE 或没有被配置,则当信号或信号组的接收超时定时器发生超时时,AUTOSAR COM 模块不应使用任何值替换该信号或该信号组内的信号当前的值。
[SWS_Com_00513]
[SRS_Com_02041]
- 如果 ComRxDataTimeoutAction 参数被配置为 REPLACE(参见 [ECUC_Com_00412]),则当信号组的接收超时定时器发生超时时,AUTOSAR COM 模块应使用该信号组内的每个信号的 ComSignalInitValue 参数的值替换其当前的值(参见 [ECUC_Com_00170])。
根据 [ECUC_Com_00412],可以为多个对象配置同一个接收超时指示函数(Rx-timeout-indication),也可以为每个对象单独地配置一个接收超时指示函数。
[SWS_Com_00876]
[SRS_Com_02088]
- 如果 ComRxDataTimeoutAction 参数被配置为 SUBSTITUTE(参见 [ECUC_Com_00412]),则当信号组的接收超时定时器发生超时时,AUTOSAR COM 模块应使用该信号组内的每个信号的 ComTimeoutSubstitutionValue 参数的值替换其当前的值(参见 [ECUC_Com_10006])。
[SWS_Com_00715]
[SRS_Com_02058]
- 当一个被配置了接收超时监控的(大)I-PDU 被成功地接收时,在对 Com_RxIndication 函数或 Com_TpRxIndication 函数的调用中,AUTOSAR COM 模块应重新装载此(大)I-PDU 的接收超时定时器。
[SWS_Com_00716]
[SRS_Com_02058]
- 如果一个信号或信号组的 ComFirstTimeout 参数被配置为 0 或没有被配置,则 AUTOSAR COM 模块不应在“此信号或信号组所在的 I-PDU 被启动”后立即对此信号或信号组进行接收超时监控。 而应在“对此信号或信号组的(自其所在的 I-PDU 被启动后的)首次接收”之后才开始对其进行接收超时监控。
[SWS_Com_00738]
[SRS_Com_02089]
- 对 I-PDU 的接收超时监控的机制的判断条件不应包括 I-PDU 内的信号的值。
[SWS_Com_00889]
[ ]
- 如果一个接收超时定时器发生超时,则 AUTOSAR COM 模块应重新启动它。
AUTOSAR COM 模块遵循 [17] 第 2.5.1 章中的方法,即重新启动接收超时计时器。这意味着,如果接收超时长时间发生,则超时通知会被周期性地上报。
开启/关闭接收超时监控
当对一个 I-PDU 的接收超时监控处于关闭状态,即使接收超时定时器发生超时,也不应向用户(例如 RTE 或 SwCluC)提供任何错误指示。
关闭“对一个 I-PDU 的接收超时监控”不会使“对该 I-PDU 的接收”停止。
[SWS_Com_00224]
[SRS_Com_00192]
- 如果对 Com_EnableReceptionDM 的调用导致“对一个 I-PDU 的接收超时监控”被开启,则 AUTOSAR COM 模块应将此 I-PDU 中的“信号和信号组的超时监控定时器的超时值”设置为“其对应的 ComFirstTimeout 参数被配置的值”。
[SWS_Com_00486]
[SRS_Com_00192]
- 如果“对一个 I-PDU 的接收超时监控”已经处于开启状态,则当对 Com_EnableReceptionDM 进行调用时,应静默地忽略“开启对此 I-PDU 的接收超时监控”的操作。
启用“对一个信号或信号组的接收超时监控”意味着,当超时发生时,将通过对“其 ComTimeoutNotification 参数被配置的回调接口”的调用将超时通知发送给用户(例如 RTE 或 SwCluC)。
[SWS_Com_00534]
[SRS_Com_00192]
- 如果对一个“包含传输(发送) I-PDU 的 I-PDU 组”调用了 Com_EnableReceptionDM 或 Com_DisableReceptionDM,则 AUTOSAR COM 模块应静默地忽略该请求。
[SWS_Com_00225]
[SRS_Com_00192]
- 如果“对一个 I-PDU 的接收超时监控”已经处于关闭状态,则当对 Com_DisableReceptionDM 进行调用时,应静默地忽略“关闭对此 I-PDU 的接收超时监控”的操作。
传输(发送)超时监控
AUTOSAR COM 模块的传输(发送)超时监控的意图是对底层和总线的监控,而不是 AUTOSAR COM 模块其自身。因此,通常情况下,当 AUTOSAR COM 模块向下层发送 I-PDU 时,传输(发送)超时定时器将被启动。这个机制独立于传输模式,传输属性及更新位(update-bit)。通常情况下,如果传输(发送)超时定时器已经处于运行状态,则将不会对其进行重启或重置的操作。
[SWS_Com_00481]
[SRS_Com_02037]
- AUTOSAR COM 模块应对所有“被配置了传输(发送)超时监控的信号或信号组”进行传输(发送)超时监控,这个操作独立于“该信号或信号组所在的 I-PDU 的传输属性和传输模式”。
对于 AUTOSAR COM 模块,在“对 ComTransferProperty 参数被配置为 PENDING 的信号的传输(发送)超时监控”和“对 ComTransferProperty 参数被配置为 TRIGGERED 的信号的传输(发送)超时监控”之间不存在差异。
[SWS_Com_00445]
[SRS_Com_02037]
- 如果一个 I-PDU 内的信号或信号组的 ComTimeout 参数分别地被配置了不同的值,AUTOSAR COM 模块应使用其中值为最小的 ComTimeout 参数的值作为对此 I-PDU 的传输(发送)超时监控的超时值。
只有当总线支持“生成传输确认”的功能时,才应在 AUTOSAR COM 模块中配置传输(发送)超时监控。否则,传输(发送)超时监控将总是生成传输错误通知。
[SWS_Com_00878]
[SRS_Com_02037]
- 当信号或信号组所在的 I-PDU 被发送往下层时,AUTOSAR COM 模块应启动“已为此信号或信号组配置”的传输(发送)超时定时器,除非该定时器已处于启动状态。
[SWS_Com_00878] 不考虑“可能存在"的返回值,因此即使在处理传输(发送)请求时请求立即(返回)失败,定时器也会被启动。
如果一个定时器已处于启动状态,新到来的传输(发送)请求将不会使该定时器被重置或重启,且该定时器将会继续对当前正在被处理的传输(发送)请求进行传输(发送)超时监控。无论触发条件是否会导致“对 I-PDU 的潜在的传输(发送)请求”,定时器都会由触发条件启动,除非另有说明。这样的触发条件有很多,例如:对一个信号的周期性传输(发送)请求、传输模式的切换以及显示地调用 Com_TriggerIPDUSend 来触发对一个 I-PDU 的传输(发送)请求。
[SWS_Com_00879]
[SRS_Com_02037]
- 对于一个传输(发送)超时定时器,在对“其所监控的 I-PDU”的传输(发送)超时监控被(重新)启动后,当定时器被首次启动时,应使用 ComFirstTimeout 参数被配置的值作为定时器的超时值,否则应使用 ComTimeout 参数被配置的值作为定时器的超时值。
[SWS_Com_00880]
[SRS_Com_02037]
- 当 AUTOSAR COM 模块收到对一个 I-PDU 的传输(发送)确认时,它应取消被此 I-PDU 包含的所有信号和信号组的“处于运行状态”的传输(发送)超时定时器。
[SWS_Com_00696]
[SRS_Com_02037]
- 如果对一个传输模式被配置为 NONE 的 I-PDU 进行传输(发送)超时监控,则当此 I-PDU 所在的 I-PDU 组被启动时,AUTOSAR COM 模块应启动此 I-PDU 的传输(发送)超时定时器。
[SWS_Com_00835]
[SRS_Com_02037]
- 如果对一个传输模式被配置为 NONE 以及另一种模式的 I-PDU 进行传输(发送)超时监控,则当传输模式 NONE 处于有效状态时,AUTOSAR COM 模块应禁用对此 I-PDU 的传输(发送)超时监控。
[SWS_Com_00697]
[SRS_Com_02037]
- 如果对一个传输模式被配置为 NONE 的 I-PDU 进行传输(发送)超时监控,如果成功地接收到对此 I-PDU 的传输确认时,AUTOSAR COM 模块应重置此 I-PDU 的传输(发送)超时定时器。
对于一个信号组,只可能对整个信号组进行传输(发送)超时监控,不能对此信号组内的单个信号组信号进行传输(发送)超时监控,请参阅 [ECUC_Com_00345] 和 [ECUC_Com_00520]。
[SWS_Com_00708]
[SRS_Com_02107]
- 如果一个 I-PDU 的传输(发送)超时定时器发生超时,且 ComIPduCancellationSupport 参数被配置为 TRUE,AUTOSAR COM 模块应对此 I-PDU 调用 PduR_ComCancelTransmit。
对 PduR_ComCancelTransmit 的调用不在 AUTOSAR COM 模块的正常超时处理范围之内,如果做了相应配置,则对 PduR_ComCancelTransmit 的调用将导致对相应 SWC 进行通知。AUTOSAR COM 模块将忽略 PduR_ComCancelTransmit 的返回值。
[SWS_Com_00304]
[SRS_Com_02037]
- 如果一个 I-PDU 的传输(发送)超时定时器发生超时,且没有及时接收到对此 I-PDU 的传输确认,通过调用为“此 I-PDU 包含的所有信号和信号组”配置的 ComTimeoutNotification 函数接口,AUTOSAR COM 模块应通知用户(例如 RTE 或 SwCluC)。此外,不应重启传输(发送)超时定时器。
如果传输(发送)超时定时器的计数值递增至为其配置的超时值,无论导致超时的原因是什么,都会产生一个超时通知。例如,即使传输在对 I-PDU 的处理过程中被过滤(将不会被传输),也会产生一个超时通知。
AUTOSAR COM 模块遵循 [17] 第 2.5.2 章中被定义的方法,即不重启传输(发送)超时定时器。这也意味着,即使传输失败,也只会产生有一次超时通知。
N-Times 传输模式下的传输(发送)超时监控
根据 [17] 中的定义,如果已为信号或信号组配置了传输(发送)超时监控,则当对此信号或信号组的 Com_SendSignal 或 Com_SendSignalGroup 的调用完成时,此信号或信号组的传输(发送)超时定时器应被启动。
对于传输模式 DIRECT 和 MIXED,应确保所有 ComTxModeNumberOfRepetitions 请求都能在被配置的周期内被处理(见第 7.3.3.4 章)。
根据 [17] 中的定义,如果传输(发送)超时定时器发生超时,则应通过被配置的通知机制通知用户(例如 RTE 或 SwCluC)关于失败的发生。
[SWS_Com_00308]
[SRS_Com_02083]
- 对于一个 I-PDU,如果其 ComTxModeMode 参数被配置为 DIRECT 且其 ComTxModeNumberOfRepetitions 参数被配置为大于 0,则当成功地接收到对此 I-PDU 的 ComTxModeNumberOfRepetitions + 1 次传输确认后,AUTOSAR COM 模块应取消此 I-PDU 的传输(发送)超时定时器。
如果在成功地接收到对一个 I-PDU 的 ComTxModeNumberOfRepetitions + 1 次传输确认后,此 I-PDU 的传输(发送)超时定时器被取消,则表示 N-Times 传输成功,且传输确认将被发送给用户(例如 RTE 或 SwCluC)。另请参阅 [SWS_Com_00305]。
[SWS_Com_00739]
[SRS_Com_02083]
- 对于一个 I-PDU,如果其 ComTxModeMode 参数被配置为 DIRECT 且其 ComTxModeNumberOfRepetitions 参数被配置为大于 0,当对此 I-PDU 的另一个传输请求被启动时,则 AUTOSAR COM 模块应重置此 I-PDU 的处于运行状态的传输(发送)超时定时器。
通知处理
AUTOSAR COM 模块继承了 [17] 中被定义的通知类型 1、2、3 和 4。通知可通过 ComNotification 进行配置,回调的定义在第 8.6.3.1 章中被给出。
[SWS_Com_00883]
[SRS_Com_02046]
- 对于每个为信号或信号组配置的 ComNotification,AUTOSAR COM 模块应通过被配置的 ComNotification 指示每个成功的传输(发送)和接收。
例如,对于周期性传输的每次成功的传输,其都将被通知。请注意,对于 N-Times 传输,在全部传输都被确认为成功之前,总线上的每次传输都是必要的。
信号组 - 复杂数据类型
为了支持 AUTOSAR 的复杂数据类型的概念,AUTOSAR COM 模块提供了信号组。AUTOSAR COM 模块连续地传输(发送)和接收信号组,以保证复杂数据类型的必要的一致性(完整性)。
信号组可以被静态地配置。可以为每个信号组配置一个符号名称。有关配置的详细信息,请参阅 [ECUC_Com_00345]。
AUTOSAR COM 模块通过影子缓冲区机制实现信号组的一致性(完整性),即用户(例如 RTE 或 SwCluC)在影子缓冲区中对信号组信号进行访问。如果影子缓冲区需要与 I-PDU 进行同步,用户可以显示地对 Com_SendSignalGroup 或 Com_ReceiveSignalGroup 进行调用以触发此操作。同步将以原子方式被执行。
实现信号组一致性(完整性)的另一种方法是启用信号组数组 API Com_SendSignalGroupArray ([SWS_Com_00851]) 和 Com_ReceiveSignalGroupArray ([SWS_Com_00854])。此方法的偏差在第 7.4.6 章中被描述。
初始化
[SWS_Com_00484]
[SRS_BSW_00101]
- 在发送方,通过对 Com_Init 进行调用,AUTOSAR COM 模块应初始化信号组的影子缓冲区。
可以确定的是,格式良好的 SWC 会在对 Com_ReceiveSignalGroup 进行调用之前尝试对信号组信号进行访问,因此,[SWS_Com_00484] 将仅在发送方被实施。
传输(发送)
如果对属于某个信号组的信号调用 Com_SendSignal 或 Com_InvalidateSignal,则 AUTOSAR COM 模块将仅更新此信号组的影子缓冲区。除非此信号所在的 I-PDU 的内容发生变化,否则无需对此信号所在的 I-PDU 进行任何进一步的处理(如 TMS 评估)。
[SWS_Com_00050]
[SRS_Com_02041]
- 如果对一个信号组调用 Com_SendSignalGroup,则 AUTOSAR COM 模块应自动地将此信号组的影子缓冲区中的内容复制到此信号组所在的 I-PDU 的缓冲区。
示例:现存在两个信号组信号 signal_a 和 signal_b,它们都属于 group_x:
/* copy a to shadow buffer */
Com_SendSignal (signal_a, &a);
/* copy b to shadow buffer */
Com_SendSignal (signal_b, &b);
/* copy shadow buffer to I-PDU */
Com_SendSignalGroup (group_x);
接收
通过对 Com_ReceiveSignalGroup 的调用使信号组的数据被复制到此信号组的影子缓冲区后,通过对 Com_ReceiveSignal 的调用,可以从该影子缓冲区中接收此信号组的信号。
[SWS_Com_00051]
[SRS_Com_02041]
- 如果对一个信号组调用 Com_ReceiveSignalGroup,则 AUTOSAR COM 模块应自动地将此信号组所在的 I-PDU 的缓冲区中的内容复制到此信号组的影子缓冲区。
示例:现存在两个信号组信号 signal_a 和 signal_b,它们都属于 group_x:
/* copy I-PDU to shadow buffer */
Com_ReceiveSignalGroup (group_x);
/* copy a from shadow buffer */
Com_ReceiveSignal (signal_a, &a);
/* copy b from shadow buffer */
Com_ReceiveSignal (signal_b, &b);
通知
表 5 显示的所有通知函数只能对信号组进行配置,不能对单个信号组信号进行配置。第 7.3 章定义了为信号和信号组提供的通知方法的功能逻辑。这些可配置的通知函数的原型在第 8.6.3.1 章中被定义。
信号组的属性
表 5 概述了信号组的属性:
实现信号组一致性(完整性)的另一种方法是通过对 AUTOSAR COM 模块的 ComSignalGroupArrayAccess ([ECUC_Com_10003])参数进行配置以启用信号组数组 API Com_SendSignalGroupArray([SWS_Com_00851]) 和 Com_ReceiveSignalGroupArray([SWS_Com_00854])。对组合数据进行序列化的操作将在 AUTOSAR COM 模块之外被完成,此操作将产生一个布局,该布局与 AUTOSAR COM 模块在 I-PDU 中放置信号组的布局相同。通过这种方式,可以不使用影子缓冲区。被序列化后的数据将以“uint8 数组类型的信号组”的形式被直接提供给 AUTOSAR COM 模块。
[SWS_Com_00841]
[SRS_Com_02112]
- 仅当满足以下先决条件时,才应以 uint8 数组的方式对信号组进行访问:
- 在组合数据中只使用“固定数据大小”的数据类型。
- 将信号组映射到 I-PDU 时,按字节大小对齐。
- 在“底层的信号组的字节数组”中不存在任何其他的信号,但可能存在间隙。
[SWS_Com_00842]
[SRS_Com_02112]
- 如果一个信号组的 ComSignalGroupArrayAccess([ECUC_Com_10003])参数被定义,则不应为此信号组分配影子缓冲区。
[SWS_Com_00843]
[SRS_Com_02112]
- 如果一个信号组的 ComSignalGroupArrayAccess([ECUC_Com_10003])参数被定义,则不应对此信号组调用以下 API。
- 不应对此信号组中的信号组信号调用 Com_SendSignal 和 Com_ReceiveSignal。
- 不应对此信号组调用 Com_SendSignalGroup 和 Com_ReceiveSignalGroup。
上述要求定义了这些 API 不应对“会以数组的方式被访问的信号组”进行调用。也就是说,当非法地使用这些 API 对“会以数组的方式被访问的信号组”进行调用时,行为将是未被定义的。
由于信号组的存在形式是 uint8 数组,当对此信号组进行评估时,在“接收过滤处理”和“传输模式选择处理”中需要对这种存在形式进行处理。
为了简化过滤处理,只有“在 [SWS_Com_00602] 中被定义的过滤器的子集”将被支持。
对于“对信号组的数组的访问”,以下两种过滤器将在“接收过滤处理”和“传输模式选择处理”中被排除:
- NEW_IS_WITHIN
- NEW_IS_OUTSIDE
[SWS_Com_00848]
[SRS_Com_02112]
- 在“接收过滤处理”和“传输模式选择处理”中,对信号组的数组进行处理的函数 Com_SendSignalGroupArray 和 Com_ReceiveSignalGroupArray 应支持以下过滤器:
- ALWAYS
- NEVER
- MASKED_NEW_EQUALS_X
- MASKED_NEW_DIFFERS_X
- MASKED_NEW_DIFFERS_MASKED_OLD
- ONE_EVERY_N
基础功能
由于使用了 AUTOSAR 转换器,序列化和进一步的数据处理将在转换器链表中被完成。由于转换器链表已经处理了“存在形式是 uint8 数组”的通讯数据,当以 uint8 数组的形式对信号组进行访问时,将使用被序列化后的数据并将其放入 I-PDU,而不需要在 AUTOSAR COM 模块中重新对数据进行序列化处理。
AUTOSAR 系统模板 [12] 定义了,在对“存在形式为 uint8 数组的信号组”进行处理的方法中,哪些信号组应该被处理。如果系统模板启用了对“存在形式为 uint8 数组的信号组”进行处理的方法,ECU 配置中的 ComSignalGroupArrayAccess([ECUC_Com_10003])参数应该被配置为 TRUE。
[SWS_Com_00844]
[SRS_Com_02112]
- “存在形式为 uint8 数组”的通讯数据的起始位置的字节偏移量应该为“信号组中 ComBitPosition 参数的值为最小的信号组信号”的字节偏移量。
[SWS_Com_00845]
[SRS_Com_02112]
- “存在形式是 uint8 数组”的通讯数据的结束位置的字节偏移量应该为“信号组中 ComBitPosition 参数的值为最大的信号组信号”所占据的最后一个字节的字节偏移量。
初始化
[SWS_Com_00850]
[SRS_Com_02112]
[SRS_BSW_00101]
- 对于 ComSignalGroupArrayAccess([ECUC_Com_10003])参数被配置为 TRUE 的信号组,当对 Com_Init 进行调用时,AUTOSAR COM 模块应根据此信号组所包含的全部 ComGroupSignal 的 ComSignalInitValue 来初始化 I-PDU 缓冲区中此信号组的对应部分。
传输(发送)
[SWS_Com_00846]
[SRS_Com_02112]
- 当对 Com_SendSignalGroupArray 进行调用时,将提供一个指向“存在形式为 uint8 数组”的信号组的数据指针。AUTOSAR COM 模块应根据“在 [SWS_Com_00844] 中被定义的起始位置”和“在 [SWS_Com_00845] 中被定义的数据大小”将数据复制到 I-PDU 中。
[SWS_Com_00847]
[SRS_Com_02112]
- 对于以下部分的处理,当在处理“对 Com_SendSignalGroupArray 的调用”时,AUTOSAR COM 模块应保持与在处理“对 Com_SendSignalGroup 的调用”时一样:
- 第 7.3.3.1.2 章,信号组(传输属性和 I-PDU 的传输模式)
- 第 7.3.3.2 章,为一个特定的 I-PDU 选择传输模式
- 第 7.3.3.3 章,信号流和对传输模式的选择
接收
[SWS_Com_00849]
[SRS_Com_02112]
- 当对 Com_ReceiveSignalGroupArray 进行调用时,将提供一个指向“存在形式为 uint8 数组”的信号组的数据指针。AUTOSAR COM 模块应根据“在 [SWS_Com_00844] 中被定义的起始位置”和“在 [SWS_Com_00845] 中被定义的数据大小”将 I-PDU 中的数据复制到数据指针所指向的位置。
大型数据类型
大型信号是指,因其数据大小过大导致其无法被放入底层通讯协议中的单个 L-PDU 中的信号。例如,CAN 协议中的大型信号将超过 8 个字节,而 CAN FD 协议中的大型信号将超过 64 个字节。对于 FlexRay,情况将更为复杂,因为在一个帧中可以存在多个 I-PDU。因此,对于 FlexRay,即使一个信号的数据大小没有超过一个 FlexRay 帧的大小,但该信号同样可能是大型信号。
对于 AUTOSAR 中的大型信号,需要为其配置一个可以在底层总线上的传输协议中被传输的大型 I-PDU。在一个大型 I-PDU 中可以存在一个或多个大型信号。根据此定义,I-PDU 和信号的数据大小将依据总线特定的传输协议的实现细节而被限制,请参阅 [ECUC_Com_00437]。UINT8_N 是唯一支持“静态数据大小大于 8 字节的信号”的信号类型。对于动态数据大小的信号,请参阅第 7.6 章。
由于 AUTOSAR COM 模块并不了解底层总线的实现细节,因此对于一个 I-PDU,必须为其配置“其是否可以在单个 L-PDU 中被传输(例如一个 CAN 协议帧)”,或者“是否需要通过 TP 对其进行传输”,另请参阅 [ECUC_Com_00761]。
AUTOSAR COM 模块无法阻止或检测是否存在“过大的 I-PDU 被发送至总线特定的传输协议”的情况,因为 AUTOSAR COM 模块使用独立于总线的 PDU 路由接口。但是,AUTOSAR COM 模块允许使用底层的 TP 层的 N-SDU 的最大长度,因此 AUTOSAR COM 模块不会引入任何额外的长度限制。
对大型信号/ I-PDU 的传输(发送)
AUTOSAR COM 模块通过通用的 PduR API 为使用传输协议的上层模块传输(发送)大型 I-PDU。关于 AUTOSAR COM 模块与 PDU 路由器之间的接口的详细信息,请参阅第 7.8 章。根据 [10],调用顺序为:
- 对 PduR_ComTransmit 的调用:用于启动一个传输(发送)请求。
- 对 Com_CopyTxData 的一次或多次的调用:复制数据。
- 对 Com_TpTxConfirmation 的调用:对传输进行确认。
[SWS_Com_00662]
[SRS_Com_02095]
- 当通过对 PduR_ComTransmit 的调用成功地启动对大型 I-PDU 的传输后,AUTOSAR COM 模块不得修改此 I-PDU 的内部传输缓冲区中的数据,除非 AUTOSAR COM 模块收到“有关传输成功的通知”或“有关传输被终止的错误指示”。
AUTOSAR COM 模块内的 I-PDU 是被静态地配置的。因此,即使对于大型 I-PDU,也会为其分配完整的内存。采用这种方式是为了降低在“对大型数据类型进行处理”时的复杂性。
如果所使用的传输协议也被用于诊断或其他服务,则该传输协议必须支持多用户。至少 CAN TP 和 FlexRay TP 是支持多用户的。
[SWS_Com_00863]
[SRS_Com_02095]
- 如果在对一个大型 I-PDU 进行传输时,再次触发了对此传输的请求,则 AUTOSAR COM 模块会跳过对新到来的请求的处理并报告 COM_E_SKIPPED_TRANSMISSION 运行时错误。
上述情况可能发生在,例如,当对大型 I-PDU 进行周期性传输时,某一次传输被延误到下一个传输周期。
对大型信号/ I-PDU 的接收
AUTOSAR COM 模块通过通用的 PduR API 为使用传输协议的上层模块接收大型 I-PDU。关于 AUTOSAR COM 模块与 PDU 路由器之间的接口的详细信息,请参阅第 7.8 章。根据 [10],调用顺序为:
- 对 Com_StartOfReception 的调用:用于启动一个接收请求。
- 对 Com_CopyRxData 的一次或多次的调用:将数据复制到 AUTOSAR COM 模块的内部接收缓冲区中。
- 对 Com_TpRxIndication 的调用:指示接收处理的结果,成功或失败。
[SWS_Com_00838]
[SRS_Com_02095]
- 当对 Com_TpRxIndication 的调用的返回值为 E_NOT_OK 时,AUTOSAR COM 模块应将已接收的大型 I-PDU 中的全部信号视为无效信号。AUTOSAR COM 模块应执行此大型 I-PDU 中的每个信号和信号组的 ComDataInvalidAction 参数被配置的操作。
当对大型 I-PDU 进行接收时,AUTOSAR COM 模块内部的 I-PDU 缓冲区将会被逐渐覆盖。因此,除非旧的信号的值被存储在其他地方(例如,在信号组的影子缓冲区中),否则 AUTOSAR COM 模块可能会丢失“在某些场景下可能会被需要”的信号的数据信息,以下为这些场景中的一些例子:
- 正在对一个“没有被设置 update-bit”的信号进行接收时
- 由于信号没有通过接收过滤器并需要提供信号的上一次的值时。
- 由于仅定义了一个无效的通知回调接口(且没有替代)且接收到了一个无效值,并需要提供信号的上一次的值时。
[SWS_Com_00882]
[SRS_Com_02041]
- 当 AUTOSAR COM 模块通过大型 I-PDU 接收到的信号在某些情况下被配置了一些功能, 且这些功能需要获取此信号的上一次的值时,AUTOSAR COM 模块应正确地为通过大型 I-PDU 接收的信号提供此信号的上一次的值,处理方式和对通过普通 I-PDU 接收的信号的处理方式一样。
在实现上述功能的过程中,可以根据需要选择提供信号的上一次的值的有效方式,并从配置中得出需要对哪些信号或 I-PDU 进行额外的处理(例如缓冲)。
这并不意味着必须实现一个队列。
动态长度的信号
动态长度的信号的数据长度可以在运行时被改变。动态长度的信号的最大数据长度需要在配置时被指定。一个动态长度的信号必需在动态长度的 I-PDU 中被传输。
[SWS_Com_00753]
[SRS_Com_02094]
[SRS_Com_02098]
- 对于动态长度的信号,AUTOSAR COM 模块的 ComSignalType 参数仅支持被配置为 UINT8_DYN。
将类型限制为 UINT8 数组类型也会将对动态长度的信号的放置方式限制为以字节作为边界。
所有其他信号(包括大型信号),在打包时必须被放置在动态长度的信号的前面(参见 [SWS_Com_00754]、[SWS_Com_00755] 和 [SWS_Com_00756])。因此在对 I-PDU 的数据长度进行编码时,不需要考虑动态长度的信号的数据长度。在接收端,动态长度的信号的数据长度可以通过对被接收的 I-PDU 的数据长度进行计算而得出。
为动态长度的信号配置更新位(update-bit)是被允许的。在这种情况下,更新位(update-bit)必须位于动态长度的信号的前面,另请参阅 [SWS_Com_00755]。
在 AUTOSAR COM 模块中并没有限制将“信号组与大型信号或动态长度的信号”组合使用。
动态长度的信号没有被限制一定要通过传输协议进行传输(发送)。但是,动态长度的信号所在的 I-PDU 的最大数据长度必须遵守总线特定的限制。
当通过 CAN FD 协议传输(发送)动态长度的信号所在的 I-PDU 时,建议使用 IpduM 的多 PDU 映射功能。这样可以避免由于 CAN FD 帧的离散的数据长度而导致的对接收的数据长度的误解。
对动态长度的信号/ I-PDU 的传输(发送)
当发送动态长度的信号时,用户(例如 RTE 或 SwCluC)需要在对发送接口进行调用时指定数据的实际长度。相应的 API 是 Com_SendDynSignal ([SWS_Com_00627])。
[SWS_Com_00757]
[SRS_Com_02093]
- 在对 Com_SendDynSignal 进行调用时,AUTOSAR COM 模块应指定动态长度的信号所在的 I-PDU 的最小长度。“动态长度的信号的数据长度”的值应该等于“传递给 API Com_SendDynSignal 的 Length 输入参数”的值。
AUTOSAR COM 模块可以通过普通或大型 I-PDU 来传输(发送)动态长度的 I-PDU。无论如何,都需要向底层传递动态长度的 I-PDU 的数据长度。
[SWS_Com_00832]
[SRS_Com_02093]
- 当 AUTOSAR COM 模块为动态长度的 I-PDU 调用 PduR_ComTransmit 接口时,PduInfoType 参数的 SduLength 参数的值应根据 此 I-PDU 中 的 动态长度的信号 的 最后一次被更新的值(如果其从未被发送,则为初始值)被配置。
对动态长度的信号/ I-PDU 的接收
为了接收动态长度的信号,用户(例如 RTE 或 SwCluC)需要被告知其实际的数据长度。
[SWS_Com_00758]
[SRS_Com_02093]
- 在对动态长度的 I-PDU 进行接收时,AUTOSAR COM 模块应通过以下方式计算此 I-PDU 中的动态长度的信号的数据长度:
- <dynamic signal length in bytes> = <received I-PDU length in bytes>
- - <ComBitPosition of dynamic length signal> / 8
Com_ReceiveDynSignal([SWS_Com_00690]))接口将返回动态长度的信号的数据长度,计算的方法在 [SWS_Com_00758] 中被定义。
对元数据的处理
在 AUTOSAR COM 模块与 PduR 之间进行对 PDU 的传输(发送)和接收过程中,以及在 AUTOSAR COM 模块与用户(例如 RTE 或 SwCluC)之间进行信号的交换过程中,AUTOSAR COM 模块支持对 PDU 中的元数据的处理。在传输(发送)过程中对元数据进行使用的其中一种可能的方式为,通过对 Com_TriggerIPDUSendWithMetaData 的调用触发对一个“被配置了元数据集的 I-PDU”的传输请求。另一种方式为,通过对 Com_SendSignalWithMetaData,Com_SendDynSignalWithMetaData,Com_SendSignalGroupWithMetaData,Com_SendSignalGroupArrayWithMetaData 的调用,为包含信号的 I-PDU 的下一次传输提供元数据。已被接收的 I-PDU 的元数据将被存储在此 I-PDU 的数据旁,且可通过对 Com_ReceiveDynSignalWithMetaData,Com_ReceiveSignalWithMetaData,Com_ReceiveSignalGroupWithMetaData,Com_ReceiveSignalGroupArrayWithMetaData 的调用,对其进行访问。
[SWS_Com_00887]
[ ]
- 如果对一个将被传输(发送)的 I-PDU 配置元数据,则当此 I-PDU 被传输时,用户(例如 RTE 或 SwCluC)最后一次为其提供的元数据应随此 I-PDU 一起被传输(发送),如果用户(例如 RTE 或 SwCluC)从未为其提供元数据,则元数据应被配置为 ComMetaDataItemDefault 参数被配置的值并随此 I-PDU 一起被传输(发送)。通过对 Com_TriggerIPDUSendWithMetaData 的调用提供的元数据应仅被用于此调用触发的传输(发送)。
[SWS_Com_00888]
[ ]
- 如果已被接收的 I-PDU 被配置了元数据,则被接收的元数据应被存储以供用户(例如 RTE 或 SwCluC)进行访问。
AUTOSAR COM 模块和 PDU 路由器之间的接口
[17] 没有定义 AUTOSAR COM 模块与下层模块之间的接口。在 AUTOSAR 中,与 AUTOSAR COM 模块相连的唯一的下层模块是 PDU 路由器。
The AUTOSAR COM module uses the PDU Router in two different modes, depending on the type of the I-PDU it will be transported with the bus-specific transport protocol or without. If an I-PDU is supposed to be sent via TP, is configured per configuration parameter ComIPduType.
AUTOSAR COM 模块以两种不同的模式使用 PDU 路由器,I-PDU 的类型将决定是否采用总线特定的传输协议对其进行传输。
如果 I-PDU 应该通过 TP 发送,则根据配置参数 ComIPduType 进行配置。
[SWS_Com_00138]
[SRS_Com_02037]
- AUTOSAR COM 模块应通过对 PduR_ComTransmit 的调用发送 I-PDU。
[SWS_Com_00759]
[SRS_Com_02096]
- 如果 AUTOSAR COM 模块传输(发送)的 I-PDU 的 ComIPduType 参数被配置为 NORMAL,则 AUTOSAR COM 模块应期望 PDU 路由器会为“不使用 TP 的模块”使用 AUTOSAR COM 模块的接口对 AUTOSAR COM 模块进行调用。请参阅表 6 中的 NORMAL I-PDU 列。
[SWS_Com_00760]
[SRS_Com_02096]
- 如果 AUTOSAR COM 模块传输(发送)的 I-PDU 的 ComIPduType 参数被配置为 TP,则 AUTOSAR COM 模块应期望 PDU 路由器会为“使用 TP 的模块”使用 AUTOSAR COM 模块的接口对 AUTOSAR COM 模块进行调用。请参阅表 6 中的 TP I-PDU 列。
第 9.1 章中的交互图展示了 PDU 路由器和 AUTOSAR COM 模块之间对于普通 I-PDU 的交互。
表 6 概述了,对于具体的 I-PDU,根据 ComIPduType 参数被配置的值 AUTOSAR COM 模块和 PDU 路由器之间应使用什么 API 进行交互。关于 API 的描述在第 7.13 章中被指定。
为了使信号/信号组的接收方能够识别发送方在发送之前是否更新了该信号/信号组中的数据,AUTOSAR COM 模块提供对更新位(Update-Bit)的支持。
更新位(Update-Bit)指示了,在发送方,在“信号所在的 I-PDU”被传输给 PDU 路由器之前,用户(例如 RTE 或 SwCluC)是否已对信号的值进行了更新。
如果当前传输模式为 DIRECT 且 ComTxModeNumberOfRepetitions 参数被配置为大于或等于 1,则不允许对更新位(Update-Bit)进行设置(参见 [SWS_Com_00310])。
通过配置,在发送方或接收方最多可以为每个信号/信号组配置一个更新位(Update-Bit)。更新位(Update-Bit)的位置可通过对 ComUpdateBitPosition([ECUC_Com_00257])参数进行配置来指定。ComUpdateBitPosition([ECUC_Com_00257])参数被包含在 ComSignal 配置容器中。因此,可以确定的是,信号/信号组以及与其对应的更新位(Update-Bit)将总是存在在同一个 I-PDU 中。
[SWS_Com_00055]
[SRS_Com_02030]
- AUTOSAR COM 模块仅在其内部对更新位(Update-Bit)进行处理,且不会将更新位(Update-Bit)视为信号/信号组的一部分。
对于其他 AUTOSAR 软件组件,更新位(Update-Bit)是不可见且不可被直接地访问的。
[SWS_Com_00059]
[SRS_BSW_00101]
[SRS_Com_02030]
- AUTOSAR COM 模块应按照表 7 中的定义对更新位(Update-Bit)进行解释。
对更新位(Update-Bit)的初始化在 [SWS_Com_00117] 中被定义。
[SWS_Com_00061]
[SRS_Com_02030]
- 如果用户(例如 RTE 或 SwCluC)通过对 Com_SendSignal 的调用更新信号的值,则 AUTOSAR COM 模块应对该信号的更新位(Update-Bit)进行设置。
[SWS_Com_00801]
[SRS_Com_02030]
- 如果用户(例如 RTE 或 SwCluC)通过对 Com_SendSignalGroup 的调用更新信号组的值,则 AUTOSAR COM 模块应对该信号组的更新位(Update-Bit)进行设置。
[SWS_Com_00062]
[SRS_Com_02030]
- 如果一个 I-PDU 的 ComTxIPduClearUpdateBit 参数被配置为 Transmit,则当通过对 PduR_ComTransmit 的调用将此 I-PDU 传输(发送)且调用的返回值为 E_OK 时,AUTOSAR COM 模块应清除此 I-PDU 中的所有信号和信号组的更新位(Update-Bit)。
[SWS_Com_00577]
[SRS_Com_02030]
- 如果一个 I-PDU 的 ComTxIPduClearUpdateBit 参数被配置为 Confirmation,则当通过对 PduR_ComTransmit 的调用将此 I-PDU 传输(发送)且调用的返回值为 E_OK 且成功地接收到对此 I-PDU 的传输确认时,AUTOSAR COM 模块应清除此 I-PDU 中的所有信号和信号组的更新位(Update-Bit)。
[SWS_Com_00578]
[SRS_Com_02030]
- 如果一个 I-PDU 的 ComTxIPduClearUpdateBit 参数被配置为 TriggerTransmit,则当通过对 Com_TriggerTransmit 的调用成功地触发了对此 I-PDU 的传输(发送)请求时,AUTOSAR COM 模块应清除此 I-PDU 中的所有信号和信号组的更新位(Update-Bit)。
接收方
[SWS_Com_00324]
[SRS_Com_02030]
- 如果已被接收的信号或信号组附有更新位(Update-Bit),仅当此更新位(Update-Bit)被设置时,AUTOSAR COM 模块才应对此信号或信号组进行处理(例如,过滤器、通知、基于信号的网关、字节序转换)。
[SWS_Com_00802]
[SRS_Com_02030]
- 如果已被接收的信号或信号组附有更新位(Update-Bit),且此更新位(Update-Bit)没有被设置,AUTOSAR COM 模块应丢弃此信号或信号组。
如果信号没有被更新,则信号网关不会对其进行路由,并会将其丢弃。
如果用户(例如 RTE 或 SwCluC)正在读取的信号的更新位(Update-Bit)没有被设置,则会得到该信号的初始值或最后一次接收到的值。
[SWS_Com_00067]
[SRS_Com_02030]
- 如果已被接收的信号或信号组附有更新位(Update-Bit),且此更新位(Update-Bit)被设置,AUTOSAR COM 模块应将此信号或信号组解释为已被更新。
有关对附有更新位(Update-Bit)的信号进行接收超时监控的行为,请参见第 7.3.6.1 章。
信号网关
信号网关是 AUTOSAR COM 模块的一个组成部分,除了对(信号网关的)周期性任务的调用外,任何外部模块都无法访问信号网关。
AUTOSAR COM 模块的信号网关适用于信号和信号组。
AUTOSAR COM 模块的信号网关仅支持通过 ComGwMapping 配置容器([ECUC_Com_00544])配置的静态路由,只能以“独立于路由信号和信号组信号的内容”的方式来对路由进行配置。
The destination of a signal or group signal can be configured either per ComGwDestinationDescription container (ECUC_Com_00549), or via ComGwSignal reference (ECUC_Com_00551).
信号或组信号的目的地可以通过 ComGwDestinationDescription 容器 (ECUC_Com_00549) 或通过 ComGwSignal 引用 (ECUC_Com_00551) 进行配置。
跟据同一个 I-PDU 中的其他信号的 TMC 来选择传输模式。当没有信号可被用于对 TMS 的评估时,将会选择使用 ComTxModeTrue([SWS_Com_00677])参数被配置的传输模式。
[SWS_Com_00377]
[SRS_GTW_06055]
[SRS_GTW_06089]
- AUTOSAR COM 模块的信号网关应根据配置将需要被路由的信号/信号组信号的值复制到需要被传输(发送)的信号/信号组信号中,参见 [ECUC_Com_00544]。
对 ComGwMapping 的配置允许将一个信号/信号组信号从单一的源头路由到 0 个(未对此信号启用信号网关功能)或多个目的地(1:n)。
AUTOSAR COM 模块的信号网关不支持对大型 I-PDU 中的信号或信号组信号进行处理,请参阅 [SWS_Com_00598]。
[SWS_Com_00872]
[SRS_GTW_06055]
[SRS_GTW_06089]
- 在接收方,信号网关应支持对 I-PDU /信号的以下处理过程(参见图 5):
- 重置对于 I-PDU 的接收超时定时器。
- 对和 I-PDU 相关的接口进行调用。
- 对更新位(Update-Bit)的检查。
- 字节序转换及符号扩展。
[SWS_Com_00873]
[SRS_GTW_06055]
[SRS_GTW_06089]
- 在发送方,信号网关应支持对 I-PDU /信号的以下处理过程(参见图 5):
- 对更新位(Update-Bit)进行设置。
- 字节序转换及符号扩展。
- 选择 I-PDU 的传输模式。
- 对和 I-PDU 相关的接口进行调用。
对信号的处理
[SWS_Com_00357]
[SRS_GTW_06002]
- AUTOSAR COM 模块应将需要被路由的信号从已被接收的 I-PDU 中转发至将被传输(发送)的 I-PDU 中。与其有关的配置,请参阅 [ECUC_Com_00544](ComGwMapping 配置容器)。
在需要被路由的信号从已被接收的 I-PDU 中转发至将被传输(发送)的 I-PDU 中后,“停止”已被接收的 I-PDU 将不会阻止将被传输(发送)的 I-PDU 被传输(发送),除非也对将被传输(发送)的 I-PDU 进行停止操作。
[SWS_Com_00360]
[SRS_GTW_06061]
- 对于需要被路由的信号,如果“其被路由前”的字节序与“其被路由后”的字节序不一致,则 AUTOSAR COM 模块应对其进行字节序转换。
对信号组信号的处理
[SWS_Com_00361]
[SRS_GTW_06002]
[SRS_GTW_06056]
[SRS_GTW_06061]
- AUTOSAR COM 模块应将需要被路由的信号组信号从已被接收的 I-PDU 中转发至将被传输(发送)的 I-PDU 中。与其有关的配置,请参阅 [ECUC_Com_00544](ComGwMapping 配置容器)。
在需要被路由的信号组信号从已被接收的 I-PDU 中转发至将被传输(发送)的 I-PDU 中后,“停止”已被接收的 I-PDU 将不会阻止将被传输(发送)的 I-PDU 被传输(发送),除非也对将被传输(发送)的 I-PDU 进行停止操作。
[SWS_Com_00383]
[SRS_GTW_06056]
- AUTOSAR COM 模块应以连续的方式对“属于同一个信号组的信号组信号”进行路由操作。因此,在进行路由操作的过程中,AUTOSAR COM 模块应将信号组的数据当成“一个连续的数据集”来传输。
[SWS_Com_00735]
[SRS_GTW_06056]
- AUTOSAR COM 模块应支持以连续的方式对“信号组的一部分信号组信号”进行路由操作。
[SWS_Com_00833]
[SRS_GTW_06056]
- AUTOSAR COM 模块应支持对信号组的信号组信号进行单独的路由操作(同一个信号组的不同信号组信号的路由目的地不同)。
[SWS_Com_00362]
[SRS_GTW_06061]
- 对于需要被路由的信号组信号,如果“其被路由前”的字节序与“其被路由后”的字节序不一致,则 AUTOSAR COM 模块应对其进行字节序转换。
对已超时的信号和信号组信号的处理
[SWS_Com_00701]
[SRS_GTW_06089]
- 即使对“需要被路由的信号或信号组信号”的接收超时监控已发生超时,AUTOSAR COM 模块的信号网关仍应对其进行路由操作。
对于没有被及时接收的信号或信号组信号,AUTOSAR COM 模块的信号网关也应对其进行路由操作。
对更新位(Update-Bit)的处理
信号组的路由关系将仅被配置给信号组的信号组信号。但是,对于更新位(Update-Bit),AUTOSAR COM 模块的信号网关应处理信号组的更新位(Update-Bit)。因此,当在本章节中提及信号组的更新位(Update-Bit)时,其中的信号组指的是包含信号组信号的信号组。
[SWS_Com_00702]
[SRS_Com_02030]
- 对于一个需要被路由的信号/信号组,如果“作为其源头的信号/信号组”和“作为其路由目的地的信号/信号组”都附有更新位(Update-Bit)(被配置了 ComUpdateBitPosition 参数),且“作为其源头的信号/信号组”的更新位(Update-Bit)已被设置,则 AUTOSAR COM 模块应对“更新位(Update-Bit)已被设置的信号/信号组”进行路由操作,并在“作为其路由目的地的信号/信号组”被传输(发送)后清除“作为其路由目的地的信号/信号组”的更新位(Update-Bit)。
[SWS_Com_00703]
[SRS_Com_02030]
- 对于一个需要被路由的信号/信号组,如果“作为其源头的信号/信号组”和“作为其路由目的地的信号/信号组”都附有更新位(Update-Bit)(被配置了 ComUpdateBitPosition 参数),且“作为其源头的信号/信号组”的更新位(Update-Bit)没有被设置,则 AUTOSAR COM 模块不应对其进行路由操作。
[SWS_Com_00704]
[SRS_Com_02030]
- 对于一个需要被路由的信号/信号组,如果“作为其源头的信号/信号组”附有更新位(Update-Bit),“作为其路由目的地的信号/信号组”不附有更新位(Update-Bit)(被配置了 ComUpdateBitPosition 参数),且“作为其源头的信号/信号组”的更新位(Update-Bit)已被设置,则 AUTOSAR COM 模块应对其进行路由操作。
[SWS_Com_00705]
[SRS_Com_02030]
- 对于一个需要被路由的信号/信号组,如果“作为其源头的信号/信号组”附有更新位(Update-Bit),“作为其路由目的地的信号/信号组”不附有更新位(Update-Bit)(被配置了 ComUpdateBitPosition 参数),且“作为其源头的信号/信号组”的更新位(Update-Bit)没有被设置,则 AUTOSAR COM 模块不应对其进行路由操作。
[SWS_Com_00706]
[SRS_Com_02030]
- 对于一个需要被路由的信号/信号组,如果“作为其源头的信号/信号组”不附有更新位(Update-Bit),“作为其路由目的地的信号/信号组”附有更新位(Update-Bit)(被配置了 ComUpdateBitPosition 参数),在对“作为其路由目的地的信号/信号组”进行更新后,AUTOSAR COM 模块应设置“作为其路由目的地的信号/信号组”的更新位(Update-Bit),并在“作为其路由目的地的信号/信号组”被传输(发送)后清除“作为其路由目的地的信号/信号组”的更新位(Update-Bit)。
对信号网关进行解耦
为了避免在“对 I-PDU 的接收的中断处理函数”中出现不可控的时间消耗问题,有必要将 AUTOSAR COM 模块的信号网关与中断处理函数进行解耦。
[SWS_Com_00359]
[SRS_BSW_00425]
[SRS_BSW_00432]
- 在对 Com_MainFunctionRouteSignals 进行调用的过程中,AUTOSAR COM 模块应执行所有与其信号网关有关的函数([SWS_Com_00400])。在执行这些函数的过程中,AUTOSAR COM 模块应检查“已接收的需要被路由的信号/信号组信号”,并将其从“作为其源头的 I-PDU”中复制到“作为其路由目的地的 I-PDU”中。
[SWS_Com_00466]
[SRS_BSW_00432]
- 在对 Com_MainFunctionRouteSignals 进行调用的过程中,AUTOSAR COM 模块应对传输属性和传输模式进行评估,并按照以下顺序执行与他们相关的路由操作,另见图2:
- 1. 将所有需要被过滤的信号从“作为其源头的 I-PDU”中复制到“作为其路由目的地的 I-PDU”中。
- 2. 对所有需要被过滤的信号的 TMC 进行评估。
- 3. 对“作为其路由目的地的 I-PDU”的 TMS 进行评估。
对于需要被过滤的信号,如果在“作为其路由目的地的 I-PDU”中的需要被过滤的信号中,存在 ComTransferProperty 参数被配置为 TRIGGERED 的信号,且该信号的值被更新,则对“作为其路由目的地的 I-PDU”的传输处理将在对 Com_MainFunctionTx 或 Com_MainFunctionRouteSignals 的调用中进行。
AUTOSAR COM 模块的交互模型
本章对应于 [17] 中的交互层的功能模型一章。下图说明了交互层在进行外部接收和外部传输(发送)时的行为。图中显示了完整的功能,但在具体实现中存在/使用哪些部分取决于配置。
[SWS_Com_00396]
[SRS_Com_02037]
- 已被接收的信号或信号组可以被配置用于多种处理。AUTOSAR COM 模块应按以下顺序执行已被配置的处理:
- 重置对 I-PDU 的接收超时定时器。
- 检查更新位(Update-Bit)。
- 字节序转换及符号扩展。
- 数据有效性校验。
- 对接收数据的过滤处理。
- 重置对信号的接收超时定时器。
- 对相关模块进行通知。
[SWS_Com_00744]
[SRS_Com_02089]
- 如果一个 ComSignal 或 ComSignalGroup 的 ComRxDataTimeoutAction 参数和 ComTimeoutNotification 参数都被配置了,则 AUTOSAR COM 模块应首先调用 ComRxDataTimeoutAction 参数被配置的接口,然后调用 ComTimeoutNotification 参数被配置的接口。
多核分布
为了将负载分布在多个分区(核心)中,AUTOSAR COM 模块的协议栈的不同部分应该被分配在不同的分区(核心)中。基于同一种网络类型的部分应被分配在同一个分区(核心)中,例如,AUTOSAR COM 模块的协议栈的 FlexRay、CAN 和以太网部分应可被分别地分配在不同的分区(核心)中。
为了支持这种灵活的分配方式,同时减少跨分区(核心)通信(通过潜在的阻塞进行同步)的次数,AUTOSAR COM 模块的主线程(表示其 MainFunction)可以被拆分成不同的 MainFunction(至少每个分区中存在一个)。因为同一种网络的传输(发送)/接收的数据流都只存在在同一种网络中(因此也只存在在同一个分区中),因此不需要特殊的对多核通讯的支持以及对操作的同步。唯一的例外是 AUTOSAR COM 模块的信号网关,需要对它进行特别的考虑。
为了满足不同的计时需求,将会为每个 MainFunction 单独地定义一个时基。
[SWS_Com_00885]
[ ]
- 应在 MainFunction 内对 ComIPdu 进行处理,该 MainFunction 通过 ComIPduMainFunctionRef 被引用(参见 [ECUC_Com_10012])。
[SWS_Com_00886]
[ ]
- 如果对 ComPreparationNotification 参数进行了配置,则在对 I-PDU 进行处理之前,应在对 MainFunctionTx 的调用中对“相应的 Com_CbkTxPrep 回调接口”进行调用。
[SWS_Com_00890]
[ ]
- 只有当 ComIPdu 中的需要被路由的信号通过 ComMainFunctionRouteSignalsRef 被引用到 ComMainFunctionRouteSignals 时,ComMainFunctionRouteSignals 中的这些 信号才会被处理。
软件集群连接层 (SwCluC)
SwCluC 将 AUTOSAR 嵌入式软件分组为集群 (SWCL)。它描述了 Host- 以及应用程序集群。每台机器都有一个 Host-Cluster,其中包含大多数甚至所有的 BSW 模块。应用程序集群包含大多数的应用程序 SW-C。在应用程序集群中不能直接对 AUTOSAR COM 模块的 API 进行访问,访问的操作是通过代理模块(“Low Proxy”)被完成的。对于 AUTOSAR COM 模块,这意味着有多个上层用户会对其发起访问:
- (位于主机软件集群中的)RTE
- SwCluC 的 Low Proxy。
- 被定义的用户。
每个 ECUC 分区中都存在一个 Low Proxy,应用程序通过其对 AUTOSAR COM 模块进行访问。AUTOSAR COM 模块只会和同一个分区中的 Low Proxy 进行交互。任何对信号或信号组的跨分区传输都需要在 Low Proxy 或 SWC 中被完成。
导入的类型
本章列出了以下模块包含的所有类型:
[SWS_Com_00609]
类型定义
Com_StatusType
[SWS_Com_00819]
Com_SignalIdType
Com_SignalGroupIdType
[SWS_Com_00821]
[SRS_Com_02041]
[SRS_BSW_00441]
[SWS_Com_00321]
[SRS_BSW_00312]
- 不可重入的函数无需检查其自身是否被重复调用。
对于具体的对象而言,大多数 AUTOSAR COM 模块的函数都是不可重入的。例如,对于同一个信号,Com_SendSignal 是不可重入的,但对于不同的信号 Com_SendSignal 是可重入的。因此,如果对于 AUTOSAR COM 模块,有多个调用者,则需要在系统级别对多个调用者进行同步,例如通过使用相互之间没有交集的信号集和 I-PDU 组。
返回值
AUTOSAR COM 模块未定义特殊的 AUTOSAR COM 模块返回值类型。API 服务返回的错误的值类型要么为在 [5] 中被定义的 Std_ReturnType,要么为在表 8 中被定义的 uint8 类型的映射值。
AUTOSAR COM 模块的返回值的定义在表 8 中被定义。
Start-Up(启动)和控制服务
Com_Init
[SWS_Com_00432]
[SRS_BSW_00344]
[SRS_BSW_00404]
[SRS_BSW_00405]
[SRS_BSW_00101]
[SRS_BSW_00358]
[SRS_BSW_00414]
在正确地对 Com_Init 进行调用之前,AUTOSAR COM 模块的行为是不可被预测的。
Com_Init 注意事项:无法确定的是对 Com_Init 的调用是否会抢占“任何对其他 AUTOSAR COM 模块的函数的调用”。AUTOSAR COM 模块可以依赖“不依赖于以抢占的方式对 Com_Init 进行调用”的系统的其余部分。
[SWS_Com_00129]
[SRS_BSW_00336]
- AUTOSAR COM 模块的函数 Com_DeInit 应停止所有已被启动的 I-PDU 组。
Com_DeInit 注意事项:无法确定的是对 Com_DeInit 的调用是否会抢占“任何对其他 AUTOSAR COM 模块的函数的调用”。AUTOSAR COM 模块可以依赖“不依赖于以抢占的方式对 Com_DeInit 进行调用”的系统的其余部分。
Com_IpduGroupStop
Com_EnableReceptionDM
Com_DisableReceptionDM
Com_GetStatus
Com_GetVersionInfo
有关 Com_GetVersionInfo 的配置,请参阅 [SWS_Com_00026]。
通讯服务
Com_SendSignal
[SWS_Com_00624]
[SRS_Com_02037]
- Com_SendSignal 服务应使用“被 SignalDataPtr 参数引用”的信号来更新由 SignalId 标识的信号对象。
[SWS_Com_00625]
[SRS_Com_02037]
- 如果已被更新的信号的 ComTransferProperty 参数被配置为 TRIGGERED,且其所在的 I-PDU 的 ComTxModeMode 参数被配置为 DIRECT 或 MIXED,则 Com_SendSignal 应立即(最迟应在主函数的下一次调度结束之前)对此 I-PDU 进行传输(发送),除非传输(发送)被其他 AUTOSAR COM 模块的机制延后或阻止。
相关的机制,例如,最小延迟定时器(ComMinimumDelayTime)。
[SWS_Com_00628]
[SRS_Com_02095]
- Com_SendDynSignal 服务应使用“被 SignalDataPtr 参数引用”的信号来更新由 SignalId 标识的信号对象。
[SWS_Com_00629]
[SRS_Com_02095]
- 如果已被更新的信号(参见 [SWS_Com_00628])的 ComTransferProperty 参数被配置为 TRIGGERED,则 Com_SendDynSignal 应立即(最迟应在主函数的下一次调度结束之前)对此信号所在的 I-PDU 进行传输(发送),除非此信号所在的 I-PDU 的传输模式为周期性传输。
[SWS_Com_00630]
[SRS_Com_02095]
- 如果已被更新的信号(参见 [SWS_Com_00628])的 ComTransferProperty 参数被配置为 PENDING,则 Com_SendDynSignal 不应对此信号所在的 I-PDU 进行传输(发送)。
对于动态长度的信号的最小数据长度没有限制。因此,动态长度的信号的数据长度为 0 是被允许的。
Com_ReceiveSignal
[SWS_Com_00198]
[SRS_Com_02037]
Com_ReceiveDynSignal
[SWS_Com_00711]
[SRS_Com_02092]
- Com_ReceiveDynSignal 服务应将“由 SignalId 标识的信号对象”的数据复制到“被 SignalDataPtr 参数引用”的位置。
[SWS_Com_00712]
[SRS_Com_02092]
- Com_ReceiveDynSignal 服务应将“由 SignalId 标识的动态长度的信号”的计算后的长度(参见 [SWS_Com_00758])的值填充至 Length 参数中。
[SWS_Com_00724]
[SRS_Com_02092]
- 如果 Length 参数(作为输入参数时)中的值小于已接收的动态长度的信号的数据长度,则 Com_ReceiveDynSignal 不应将任何数据复制到“被 SignalDataPtr 参数引用”的位置。
[SWS_Com_00635]
[SRS_Com_02041]
- Com_SendSignalGroup 服务应将“被 SignalGroupId 参数引用”的影子缓冲区中的内容复制到相关的 I-PDU 中。
[SWS_Com_00637]
[SRS_Com_02041]
- 对 Com_SendSignalGroup 的配置:对此函数进行调用前必须先配置一个信号组。详情请参阅 [ECUC_Com_00345]。
Com_ReceiveSignalGroup
[SWS_Com_00638]
[SRS_Com_02041]
- Com_ReceiveSignalGroup 服务应将已接收的信号组从 I-PDU 中复制到影子缓冲区中。
在对此函数进行调用后,通过对 Com_ReceiveSignal 的调用,可以从影子缓冲区中将信号组的信号的值复制给用户(例如 RTE 或 SwCluC)。
[SWS_Com_00639]
[SRS_Com_02041]
- 对 Com_ReceiveSignalGroup 的配置:对此函数进行调用前必须先配置一个信号组。详情请参阅 [ECUC_Com_00345]。
[SWS_Com_00461]
[SRS_Com_02041]
- 在对 Com_ReceiveSignalGroup 的调用后,AUTOSAR COM 模块应始终将“对 I-PDU 的最后一次有效接收(如果对此 I-PDU 从未进行过接收,则使用 ComSignalInitValue 参数被配置的值)”的数据复制到影子缓冲区中,即使此 I-PDU 已被停止且对 Com_ReceiveSignalGroup 的调用的返回值为 COM_SERVICE_NOT_AVAILABLE。
[SWS_Com_00852]
[SRS_Com_02112]
[SRS_Com_02041]
- Com_SendSignalGroupArray 服务应将“被 SignalGroupArrayPtr 参数引用”的内容复制到相关的 I-PDU 中。
[SWS_Com_00853]
[SRS_Com_00177]
- 仅当 ComEnableSignalGroupArrayApi 参数被配置为使能时,Com_SendSignalGroupArray API 才可用。
Com_ReceiveSignalGroupArray
[SWS_Com_00855]
[SRS_Com_02112]
[SRS_Com_02041]
- Com_ReceiveSignalGroupArray 服务应将已接收的信号组的数组从 I-PDU 中复制到“被 SignalGroupArrayPtr 参数引用”的位置。
[SWS_Com_00856]
[SRS_Com_00177]
- 仅当 ComEnableSignalGroupArrayApi 参数被配置为使能时,Com_ReceiveSignalGroupArray API 才可用。
[SWS_Com_00857]
[SRS_Com_02041]
- 在对 Com_ReceiveSignalGroupArray 的调用后,AUTOSAR COM 模块应始终将“对 I-PDU 的最后一次有效接收(如果对此 I-PDU 从未进行过接收,则使用 ComSignalInitValue 参数被配置的值)”的数据复制到“被 SignalGroupArrayPtr 参数引用”的位置,即使此 I-PDU 已被停止且对 Com_ReceiveSignalGroupArray 的调用的返回值为 COM_SERVICE_NOT_AVAILABLE。
Com_ReceiveSignalWithMetaData
Com_ReceiveDynSignalWithMetaData
Com_ReceiveSignalGroupWithMetaData
Com_ReceiveSignalGroupArrayWithMetaData
Com_SendSignalWithMetaData
Com_SendDynSignalWithMetaData
Com_SendSignalGroupWithMetaData
Com_SendSignalGroupArrayWithMetaData
Com_InvalidateSignal
有关信号失效机制的更多信息,请参阅第 7.4.4 章。
[SWS_Com_00642]
[SRS_Com_02077]
- 在使信号的数据无效后,Com_InvalidateSignal 函数应在其内部对 Com_SendSignal 进行调用,详情请参阅 [SWS_Com_00099]。
[SWS_Com_00643]
[SRS_Com_02077]
- 如果由 SignalId 标识的信号的 ComSignalDataInvalidValue([ECUC_Com_00391])参数没有被配置,则当对此信号调用 Com_InvalidateSignal 时,应返回 COM_SERVICE_NOT_AVAILABLE。
Com_InvalidateSignalGroup
有关信号失效机制的更多信息,请参阅第 7.4.4 章。
[SWS_Com_00645]
[SRS_Com_02077]
- 在使信号组的数据无效后,Com_InvalidateSignalGroup 函数应在其内部对 Com_SendSignalGroup 进行调用。
Com_TriggerIPDUSend
[SWS_Com_00861]
[SRS_Com_02037]
- 在对 Com_TriggerIPDUSend 的调用后,如果此 I-PDU 已被启动,则 AUTOSAR COM 模块应触发对“由 ID 指定的此 I-PDU”的传输(发送)请求。
如果对处于停止状态的 I-PDU 触发传输(发送)请求,则仅会返回 E_NOT_OK。如果一个 I-PDU 被潜在地(重新)启动,则“触发对其的传输(发送)请求”将发生在其被潜在地(重新)启动后对 Com_TriggerIPDUSend 的首次调用中,在对 Com_TriggerIPDUSend 的下一次调用中将不会“触发对其的传输(发送)请求”。
[SWS_Com_00388]
[SRS_Com_02037]
- 当对 Com_TriggerIPDUSend 函数或 Com_TriggerIPDUSendWithMetaData 函数的调用导致触发对 I-PDU 的传输(发送)请求时,AUTOSAR COM 模块仅应考虑最小的延迟时间。这意味着,应在必要时才延迟传输,并在传输时重置最小延迟定时器。AUTOSAR COM 模块不应考虑其他所有与传输模式相关的参数,例如,ComTxModeNumberOfRepetitions。
[SWS_Com_00492]
[SRS_Com_02037]
- 当对 Com_TriggerIPDUSend 函数或 Com_TriggerIPDUSendWithMetaData 函数的调用导致触发对 I-PDU 的传输(发送)请求时,且此 I-PDU 的 I-PDU 回调接口被配置了相应的回调接口(请参见 [ECUC_Com_00387]),则在对 Com_TriggerIPDUSend 函数或 Com_TriggerIPDUSendWithMetaData 函数的调用中应分别地对“被配置的 I-PDU 回调接口”进行调用。
如果在“对 Com_TriggerIPDUSend 函数进行处理的过程”中存在对其的另一个调用,则可能会产生无限递归的情况,在对此函数进行实现时请格外注意。“对同一个 ComPduId 重复地调用 Com_TriggerIPDUSend 的直接递归的方式”及“使用更长的递归路径对同一个 ComPduId 重复地调用 Com_TriggerIPDUSend 的非直接递归的方式”在理论上都是可行的。
以上内容同样适用于 Com_TriggerIPDUSendWithMetaData 以及其他触发对 I-PDU 的传输(发送)请求的函数。
[SWS_Com_00867]
[SRS_Com_02037]
- 当对 Com_TriggerIPDUSend 的调用触发了对大型 I-PDU 的传输(发送)请求,且大型 I-PDU 的缓冲区处于锁定状态时,AUTOSAR COM 模块应缓存这个请求,并在大型 I-PDU 的缓冲区可用时再次对其进行传输(发送)。
[SWS_Com_00862]
[SRS_Com_02037]
- 在对 Com_TriggerIPDUSendWithMetaData 的调用后,如果此 I-PDU 已被启动,则 AUTOSAR COM 模块应触发对“由 ID 指定的此 I-PDU”的传输(发送)请求。
如果对处于停止状态的 I-PDU 触发传输(发送)请求,则仅会返回 E_NOT_OK。如果一个 I-PDU 被潜在地(重新)启动,则“触发对其的传输(发送)请求”将发生在其被潜在地(重新)启动后对 Com_TriggerIPDUSendWithMetaData 的首次调用中,在对 Com_TriggerIPDUSendWithMetaData 的下一次调用中将不会“触发对其的传输(发送)请求”。
[SWS_Com_00868]
[SRS_Com_02037]
- 当对 Com_TriggerIPDUSendWithMetaData 的调用触发了对大型 I-PDU 的传输(发送)请求,且大型 I-PDU 的缓冲区处于锁定状态时,AUTOSAR COM 模块应缓存这个请求以及相关的元数据,并在大型 I-PDU 的缓冲区可用时再次对其进行传输(发送)。
[SWS_Com_00881]
[SRS_Com_02082]
- 当 I-PDU 的传输模式被显示地设置为 Com_SwitchIpduTxMode,AUTOSAR COM 模块应依据 ComTxModeTimeOffset 参数被配置的值来延迟对此 I-PDU 的周期性传输(发送)。
如果通过 Com_SwitchIpduTxMode 对同一个 I-PDU 同时设置了“基于信号的 TMS”和“显示地设置的 TMS”,则当对此 I-PDU 调用 Com_SendSignal 或 Com_SendSignalGroup 时,基于信号的 TMS 必须将此 I-PDU 的传输模式切换回手动设置的模式。因此,当对一个 I-PDU 同时设置了这两种 TMS 时,使用方式需要被仔细地设计。
新的传输模式应立即生效(最迟应在主函数的下一次调度结束之前),但是会先完成当前正在处理的 TP 传输。在这种情况下,如果新的传输模式需要发起一个新的传输,则 COM_E_SKIPPED_TRANSMISSION 运行时错误将会被报告(参见 [SWS_Com_00863])。
[SWS_Com_00647]
[SRS_Com_02045]
- 在对 Com_TriggerTransmit 函数的调用中,AUTOSAR COM 模块应将 I-PDU 传输(发送)缓冲区中的内容复制到 PduInfoPtr->SduDataPtr 指向的 L-PDU 的缓冲区中,并将 PduInfoPtr->SduLength 的值更新为需要被复制的数据的数据长度。
[SWS_Com_00869]
[SRS_Com_02045]
- 如果给定的 PduInfoPtr->SduLength 小于实际的 PDU 长度,Com_TriggerTransmit 将不会复制任何数据并返回 E_NOT_OK。
[SWS_Com_00884]
[SRS_Com_02045]
- 如果 I-PDU 已被停止,Com_TriggerTransmit 将不会复制任何数据并返回 E_NOT_OK。
[SWS_Com_00475]
[SRS_Com_02045]
- Com_TriggerTransmit 不受 I-PDU 的最小延迟时间的干扰,并且不会重置最小延迟定时器,参见 [ECUC_Com_00181]。
Com_TriggerTransmit 函数的行为独立于被配置的传输模式。
使用案例:
此函数将被调用,例如,当 LIN 主机需要传输(发送)一个 LIN 帧时。在这种情况下,对传输的触发将由“主机调度表自身”或“一个已被接收的消息头”发出。在静态部分(与 FlexRay 全局时间同步)请求对 PDU 进行传输的 FlexRay 接口也会使用此函数。
在 PDU 路由器成功地传输(发送)I-PDU 后,PDU 路由器将调用 Com_TxConfirmation。
关于 Com_TriggerTransmit 的注意事项:此函数可能在中断上下文中被调用。
Com_RxIndication
Com_RxIndication 的注意事项:此函数可能在中断上下文中被调用。
Com_TpRxIndication
Com_TpRxIndication 的注意事项:此函数可能在中断上下文中被调用。
Com_TxConfirmation
Com_TxConfirmation 的注意事项:此函数可能在中断上下文中被调用,例如传输中断。
Com_TpTxConfirmation
Com_StartOfReception
[SWS_Com_00654]
[SRS_Com_02095]
- 如果 ComRxPduId 标识的是一个大型 I-PDU,且 TpSduLength 的值大于此大型 I-PDU 的被配置的数据长度,则 Com_StartOfReception 函数应返回 BUFREQ_E_OVFL。
[SWS_Com_00655]
[SRS_Com_02095]
- 如果 ComRxPduId 标识的是一个动态长度的 I-PDU,且 TpSduLength 的值大于此动态长度的 I-PDU 的被配置的最大数据长度,则 Com_StartOfReception 函数应返回 BUFREQ_E_OVFL。
[SWS_Com_00657]
[SRS_Com_02095]
- 如果 AUTOSAR COM 模块的内部缓冲区当前未被锁定,且 TpSduLength 参数的值没超过(最大的)预期长度,则 Com_StartOfReception 函数应通过 ComRxPduId 句柄将“I-PDU 在 AUTOSAR COM 模块内部 I-PDU 缓冲区中的完整数据的数据大小”写入“被 RxBufferSizePtr 参数引用”的位置。
[SWS_Com_00721]
[SRS_Com_02095]
- 如果 ComRxPduId 标识的是已被停止的 I-PDU,则 Com_StartOfReception 函数将返回 BUFREQ_E_NOT_OK。
[SWS_Com_00818]
[SRS_Com_02095]
- 如果 Com_StartOfReception 函数返回 BUFREQ_E_NOT_OK 或 BUFREQ_E_OVFL,则 AUTOSAR COM 模块不应期望其他模块会对 Com_TpRxIndication 进行调用,因此不应锁定其内部缓冲区。
[SWS_Com_00874]
[SRS_Com_02095]
- 当对 Com_StartOfReception 进行调用时,如果 TpSduLength 参数的值为 0,则 AUTOSAR COM 模块应通过 bufferSizePtr 参数返回 I-PDU 的被配置的(最大)数据长度。
Com_CopyRxData 的注意事项:此函数可能在中断上下文中被调用,因此必须保证数据的一致性(完整性)。
[SWS_Com_00782]
[SRS_Com_00218]
- 如果给定的 PduId 标识的是已被停止的 I-PDU,则 Com_CopyRxData 函数将不复制任何数据并返回 BUFREQ_E_NOT_OK。
Com_CopyTxData
Com_CopyTxData 的注意事项:此函数可能在中断上下文中被调用。
[SWS_Com_00783]
[SRS_Com_00218]
- 如果给定的 PduId 标识的是已被停止的 I-PDU,则 Com_CopyTxData 函数将不复制任何数据并返回 BUFREQ_E_NOT_OK。
调度函数
Com_MainFunctionRx
[SWS_Com_00664]
[SRS_BSW_00425]
- 如果先前没有通过对 Com_Init 进行调用来对 AUTOSAR COM 模块进行初始化,则对 Com_MainFunctionRx 的调用将直接返回。
有关 Com_MainFunctionRx 的配置:参见 [ECUC_Com_00186]。
Com_MainFunctionTx
[SWS_Com_00665]
[SRS_BSW_00425]
- 如果先前没有通过对 Com_Init 进行调用来对 AUTOSAR COM 模块进行初始化,则对 Com_MainFunctionTx 的调用将直接返回。
有关 Com_MainFunctionTx 的配置:参见 [ECUC_Com_00186]。
Com_MainFunctionRouteSignals
[SWS_Com_00666]
[SRS_BSW_00425]
- 如果先前没有通过对 Com_Init 进行调用来对 AUTOSAR COM 模块进行初始化,则对 Com_MainFunctionRouteSignals 的调用将直接返回。
Com_MainFunctionRouteSignals 的注意事项:
- 对其的两次连续地调用之间的时间间隔(可能是相关的任务/线程的周期)直接影响信号网关的延迟。
- 加入此函数对于“解耦接收中断和信号网关任务”是必要的。
- 通常一个周期性任务/线程会被配置为对此函数进行调用。该任务/线程的周期直接影响信号网关的延迟。
预期接口
强制接口
本章定义了实现模块核心功能所需的所有接口。
可选接口
本章定义了实现模块可选功能所需的所有接口。
与 API 函数 Det_ReportError 相关的配置参数是 ComConfigurationUseDet ([ECUC_Com_00141])。
[SWS_Com_00442]
[SRS_BSW_00369]
[SRS_BSW_00385]
[SRS_BSW_00327]
[SRS_GTW_06098]
[SRS_GTW_06099]
- 当检测到开发错误时,应使用以下参数调用默认错误追踪器的 Det_ReportError 函数:
- 50 作为 AUTOSAR COM 模块的 ModuleId。
- 0 作为 InstanceId。
- ApiId 为检测到错误的 AUTOSAR COM 模块的 API 的服务 ID。
- ErrorId 为在第 7.11.1 章中被定义的错误 ID。
如果存在至少一个 I-PDU,其 ComIPduCancellationSupport 参数被配置为 TRUE,则可选接口中必须包含 PduR_ComCancelTransmit,请参阅 [ECUC_Com_00709]。
可配置接口
回调/通知函数
可配置接口的注意事项:一个回调例程的运行上下文为中断级别或任务级别。因此,适用于中断服务例程的“OS 对使用系统函数的限制”,同样适用于任务。
可为每个 AUTOSAR COM 模块的用户单独配置回调。不同用户之间可访问的回调存在差异是可能存在的。例如,RTE 和 SwCluC。
<ComUser_CbkTxAck> 仅在发送方被调用。可为信号和信号组配置此回调。此回调函数分别对应于 Rte_COMCbkTAck 或 SwCluC_ComProxy_COMCbkTAck。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_TX_ACK) 和名称进行配置。
<ComUser_CbkTxErr> 仅在发送方被调用。此回调函数分别对应于 Rte_COMCbkTErr 或 SwCluC_ComProxy_COMCbkTErr。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_TX_ERR) 和名称进行配置。
<ComUser_CbkTxTOut> 仅在发送方被调用。可为信号和信号组配置此回调。此回调函数分别对应于 Rte_COMCbkTxTOut 或 SwCluC_ComProxy_COMCbkTxTOut。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_TX_TOUT) 和名称进行配置。
<ComUser_CbkRxAck> 仅在接收方被调用。可为信号和信号组配置此回调。此回调函数分别对应于 Rte_COMCbk 或 SwCluC_ComProxy_COMCbk。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_RX_ACK) 和名称进行配置。
<ComUser_CbkRxTOut> 仅在接收方被调用。可为信号和信号组配置此回调。此回调函数分别对应于 Rte_COMCbkRxTOut 或 SwCluC_ComProxy_COMCbkRxTOut。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_RX_TOUT) 和名称进行配置。
<ComUser_CbkInv> 仅在接收方被调用。可为信号和信号组配置此回调。此回调函数分别对应于 Rte_COMCbkInv 或 SwCluC_ComProxy_COMCbkInv。
必须在 ComUserCallback ([ECUC_Com_00038]) 中对回调函数类型 (COM_RX_INV) 和名称进行配置。
Com_CbkTxPrep 仅在发送方被调用。可为每个 Com_MainFunctionTx 实例配置此回调。此回调函数对应于 Rte_COMCbkTAck_<mn>。
I-PDU 函数
如 [SWS_Com_00013] 中所述,AUTOSAR COM 模块不支持网络序消息相关的调用函数和 CPU 序消息相关的调用函数。因此,AUTOSAR COM 模块唯一支持的调用方法是 I-PDU 相关的调用函数。AUTOSAR COM 模块支持发送方和接收方的 I-PDU 相关的调用函数。
如 [17] 中所述,如果 I-PDU 相关的调用函数返回 FALSE,则此 I-PDU 将不会被继续处理。
调用函数的名称必须通过 ComIPduCallout ([ECUC_Com_00387]) 进行配置。
[SWS_Com_00816]
[SRS_Com_02037]
- AUTOSAR COM 模块应在对 Com_RxIpduCallout 的调用中转发已接收的 I-PDU 的所有数据(即,由 PduR 提供的完整的 I-PDU)。
调用函数的名称必须通过 ComIPduCallout ([ECUC_Com_00387]) 或 ComIPduTriggerTransmitCallout ([ECUC_Com_00765]) 进行配置。
AUTOSAR COM 模块无法检测或防止,当在一个 I-PDU 相关的调用中的操作触发对 I-PDU 的传输时可能发生的递归。I-PDU 相关的调用的实现者和系统集成商应全权负责避免不必要的或无休止的 I-PDU 调用链。
[SWS_Com_00381]
[SRS_Com_02037]
- 除 Com_TriggerIPDUSend、Com_TriggerIPDUSendWithMetaData、Com_SendSignal 和 Com_SendSignalGroup 外,AUTOSAR COM 模块不得支持其他 AUTOSAR COM 模块的 API 在 I-PDU 相关的调用外被调用。
[SWS_Com_00766]
[SRS_Com_02037]
- 如果一个 I-PDU 的 ComIPduTriggerTransmitCallout 参数被配置了回调函数接口,且此 I-PDU 被启动,则在每次对此 I-PDU 调用 Com_TriggerTransmit 时, AUTOSAR COM 模块应调用此 I-PDU 的 ComIPduTriggerTransmitCallout 参数被配置了回调函数。
[SWS_Com_00395]
[SRS_Com_02037]
- 当对 Com_TriggerTransmit 进行调用时,AUTOSAR COM 模块应忽略 ComIPduTriggerTransmitCallout 的返回值。
[SWS_Com_00719]
[SRS_Com_02037]
- 如果为一个 I-PDU 配置了 ComIPduCallout,且此 I-PDU 的 ComIPduDirection 参数被配置为 SEND,则在通过 PduR_ComTransmit 对此 I-PDU 进行传输前, AUTOSAR COM 模块应调用为此 I-PDU 配置的 ComIPduCallout。
“对于 TP I-PDU 的调用函数被处理的方式”与“普通 I-PDU 的调用函数被处理的方式”类似,并且“对于 TP I-PDU 的调用函数”在发送方和接收方均被支持。请注意,例如, [SWS_Com_00719] 中的要求不考虑被配置的 ComIPduType。
[SWS_Com_00720]
[SRS_Com_02095]
- 当通过 TP 接口成功地对大型 I-PDU 进行接收时,在对 Com_TpRxIndication 的调用中,应对 I-PDU 调用函数进行调用。
[SWS_Com_00839]
[SRS_Com_02095]
- 当在 Com_TpRxIndication 上下文中的 I-PDU 调用函数返回 FALSE 时,应将对 I-PDU 的接收视为出错的接收,因此此 I-PDU 中的所有信号都应被视为无效信号。这也意味着,AUTOSAR COM 模块应执行为信号和信号组配置的所有 ComDataInvalidAction。
Sequence Diagrams
A sequence diagram of the underlying communication stack can be found in [17].
Interface between the AUTOSAR COM Module and the PDU Router
The following chart shows the communication between the AUTOSAR COM module and the PDU Router.
The following chart shows the confirmation handling with respect to the two different IPDU-processing modes. (See also Chapter 7.3.5.4.)
The following chart shows the indication handling with respect to the two different unpacking modes. (See also Chapter 7.3.5.4.)
Containers and Configuration Parameters
The following chapters summarize all configuration parameters. The detailed meanings of the parameters are described in Chapter 7 and Chapter 7.13.
[SWS_Com_00006]
[SRS_Com_02040]
- The configuration parameters are based on [18]. All parameters shall be stored in an XML format.
Configuration of the AUTOSAR COM Module
For an overview of the AUTOSAR COM module's configuration, see Figure 9.
[SWS_Com_00497]
[SRS_BSW_00167]
- A ComTxIPdu container must be included if ComIPduDirection is configured to SEND.
一般规则
[SWS_Com_00401]
[SRS_Com_02067]
- 如果下列任意两个参数具有相同的值,则这两个参数是非法的:
- ComSignal 参数的 shortName
- ComSignalGroup 参数的 shortName
- ComGroupSignal 参数的 shortName
- ComIPdu 参数的 shortName
- ComIPduGroup 参数的 shortName
[SWS_Com_00732]
[SRS_Com_02067]
- 对于所有 ComUserCallback 容器中的 ComUserCallbackName 参数,如果其被配置的值与“以下五个参数中的任何一个”被配置的值相同,则此 ComUserCallbackName 参数为非法的。
- Com_<ComSignal 参数的 shortName>
- Com_<ComSignalGroup 参数的 shortName>
- Com_<ComGroupSignal 参数的 shortName>
- Com_<ComIPdu 参数的 shortName>
- Com_<ComIPduGroup 参数的 shortName>
[SWS_Com_00402]
[SRS_Com_02067]
- 如果不按照 C 的标识符规则来制定,则下列任何参数都是非法的:
- ComSignal 参数的 shortName
- ComSignalGroup 参数的 shortName
- ComGroupSignal 参数的 shortName
- ComIPdu 参数的 shortName
- ComIPduGroup 参数的 shortName
- ComUserCallbackName
信号配置
只要满足以下打包规则,就可以将多个信号打包进 I-PDU:
[SWS_Com_00102]
[SRS_Com_02067]
- ComSignal / ComGroupSignal 在 I-PDU 中的布局不允许互相重叠。
ComSignal / ComGroupSignal 的数据长度为 0 是明确地被允许的,请参阅 [ECUC_Com_00158]。
数据长度为 0 的信号在 I-PDU 中的布局绝不会与其他信号的重叠。因此,它的布局可以被配置为 I-PDU 内的任意位置。数据长度为 0 的信号在 I-PDU 中的布局的位置仅在对 I-PDU 进行了部分的接收的情况下才有意义。
[SWS_Com_00105]
[SRS_Com_02067]
- ComSignalType 参数被配置为 UINT8_N 和 UINT8_DYN 的 ComSignal / ComGroupSignal 应按字节大小被对齐(ComBitPosition 参数应被配置为 8 的倍数)。
[SWS_Com_00443]
[SRS_Com_02067]
- ComSignalType 参数被配置为 uint8[n] 的 ComSignal / ComGroupSignal 应始终被映射到数据长度为 n 字节的 ComSignal / ComGroupSignal。
[SWS_Com_00553]
[SRS_Com_02067]
- ComSignalType 参数被配置为 uint8[n] 的 ComSignal / ComGroupSignal 的字节序应被配置为 OPAQUE。
[SWS_Com_00754]
[SRS_Com_02091]
[SRS_Com_02092]
- 动态长度的 I-PDU 应最多包含一个动态长度的信号。
[SWS_Com_00755]
[SRS_Com_02091]
[SRS_Com_02093]
- 动态长度的信号在动态长度的 I-PDU 中的布局应位于其他布局的后面。
[SWS_Com_00756]
[SRS_Com_02091]
[SRS_Com_02097]
- 动态长度的信号的 ComSignalLength 参数应被配置为此信号的最大数据长度。
[SWS_Com_00310]
[SRS_Com_02067]
[SRS_Com_02030]
- 对于传输模式被配置为 DIRECT 或 MIXED 且 ComTxModeNumberOfRepetitions 参数被配置为大于或等于 1 的 I-PDU,无需对其配置更新位(ComUpdateBitPosition)。
[SWS_Com_00785]
[SRS_Com_02067]
- (信号组) 信号的 ComBitSize 参数不得被配置为超出其 ComSignalType 参数的大小。
例如,ComSignalType 为 UINT8 的信号的 ComBitSize 参数不得被配置为大于 8。
[SWS_Com_00790]
[SRS_Com_02067]
- 应根据 [22] 中对布尔类型和所有数值类型的定义对 ComSignalInitValue / ComSignalDataInvalidValue 参数被配置的字符串进行解释。
[SWS_Com_00859]
[SRS_Com_02079]
[SRS_Com_02087]
- 如果对“ComIPduDirection 参数被配置为 RECEIVE 的 ComIPdu”中的 ComSignal 的 ComSignalDataInvalidValue 参数进行了配置,则应同时对其 ComDataInvalidAction 参数进行配置。
信号组配置
[SWS_Com_00365]
[SRS_Com_02067]
- 对于需要被路由的信号组,作为路由源的信号组的类型必须和作为路由目的地的信号组的类型保持一致。同时应支持信号组的子集(如 [SWS_Com_00735] 中定义)。
How the signals of signal groups are placed within an I-PDU is not restricted. It is allowed to define interlaced signal groups, or to place other signals within the wholes of a signal group.
信号组信号在 I-PDU 中的布局不受限制。可以定义隔行信号组,或将其他信号放置在整个信号组内。
[SWS_Com_00860]
[SRS_Com_02079]
[SRS_Com_02087]
- 对于“ComIPduDirection 参数被配置为 RECEIVE 的 ComIPdu”中的 ComSignalGroup,如果在此 ComSignalGroup 中存在至少一个 ComGroupSignal,其 ComSignalDataInvalidValue 参数被配置,则应同时对此 ComSignalGroup 的 ComDataInvalidAction 参数进行配置。
传输模式配置
[SWS_Com_00465]
[SRS_Com_02067]
- 应对每一个“作为对 TMS 的评估结果”的 ComTxModeTrue 或 ComTxModeFalse 进行配置,在 ComTxIPdu 中,应至少包含一个 ComTxModeTrue 或 ComTxModeFalse。
信号网关配置
[SWS_Com_00384]
[SRS_Com_02067]
- 作为路由源的 ComSignal 的 ComBitSize 参数和作为路由目的地的 ComSignal 的 ComBitSize 参数应保持一致。
[SWS_Com_00598]
[SRS_GTW_06055]
- 对于 ComIPduType 参数被配置为 TP 的 I-PDU 中的信号或信号组,不得将此信号或信号组配置为 ComGwMapping 中的路由源或路由目的地。
除了对(将通过信号网关被路由的)ComSignal 的接收超时监控外,对于作为路由目的地的信号,可以通过对其 ComUpdateBitPosition 参数进行配置以配置其更新位。在这种情况下,接收节点可以检测“发送方是否更新了信号,或者只是信号网关对旧信号进行了重复传输(发送)”。是否有必要这样做取决于具体需求。
过滤器配置
[SWS_Com_00535]
[SRS_Com_02067]
- 对于 ComFilterAlgorithm 参数被配置为 ONE_EVERY_N 的过滤器,其 ComFilterOffset 参数应被配置为小于其 ComFilterPeriod 参数的值。
后构建配置
[SWS_Com_00373]
[SRS_Com_02067]
[SRS_GTW_06002]
- 后构建时的配置部分(后编译和后链接时)仅在其未被使用时才可被更新。
动态长度的 I-PDU 的配置
由于 FlexRay 接口仅支持 I-PDU 的数据长度被配置为偶数值,因此不建议将“通过 FrIf 发送的 I-PDU”配置为动态长度。相反,应使用 FlexRay TP 模块通过 FlexRay 传输动态长度 I-PDU。
元数据配置
[SWS_Com_00891]
[ ]
- “ComTxIPdu 的 ComMetaDataDefaultItem 的数量”应与通过全局配置的方式配置的“此 I-PDU 的 MetaDataItems 的数量”相匹配。
I-PDU 组配置
[SWS_Com_00871]
[SRS_Com_00218]
- 一个 I-PDU 组内的所有 I-PDU 的 ComIPduDirection 参数应被配置为相同的值。
由于 I-PDU 组的嵌套关系仅仅是概念上的(参见第 7.3.5.1 章),上述的要求同时也限制所有嵌套的 I-PDU 组的 ComIPduDirection 参数应被配置为相同的值。
Configuration of Com Users
To support Com's most prominent users, the RTE and the SwCluC Com Proxy but also additional users, not known yet, Com uses Uri References (see [14], section Uri Reference) to generically link Com to its users in the model. To ensure, that a Com user's configuration is compatible to the Com and vice versa, the required parameters and containers are defined by the ComUserUriDefSet. For a Com user this means, that it must have a ComUserModuleCnf container (in-cluding its sub-containers) as part of its configuration. Each Com user gets registered once with a ComUserModule.ComUserModuleCnfRef reference being part of the Com modules configura-tion values.
The ComUserModuleCnf container holds the configuration of the signals and signal groups, which are produced- and consumed by the Com user as well as the signal- and signal group callbacks (compare to chapter 8.4) it provides. Those signal and signal group callbacks are generic for each Com user and the sig-nal / signal group for which the notification applies gets differentiated by the Com user callback handle Id value defined by the parameter ComUserCbkHandleId. With this means each user can be notified on a set of signal and signal groups with user specific handle id values. Those handle id values can be directly used to index Com user specific data structures in its implementation when the notification occurs. Please note that for the RX case the Com module can notify multiple Com users for the same signal or signal group. The matching between ComUserSignal / ComUserSignalGroup containers and the related ComSignal / ComSignalGroup containers is done indirectly via the matching pair of:
ComUserSystemTemplateSystemSignalRef <-> ComSystemTemplateSystemSignalRef ComUserSystemTemplateSignalGroupRef <-> ComSystemTemplateSignalGroupRef
pointing to the identical ISignalToIPduMapping. This way of configuration avoids circular dependencies between a Com configuration and a Com user configuration. Both sides can independently derive their configurations via upstream template information.
Please note that RTE already uses a similar approach based on ComSystemTemplateSystemSignalRef / ComSystemTemplateSignalGroupRef to identify the according ComSignal / ComSignalGroup container for dataElements implementing inter ECU communication.
A Com user may span over one or multiple ECUC partitions. How this is achieved by the Com user is implementation specific. There are two different architecture patterns, which the Com user can implement. It is Com user dependent, which one is suited better to the Com user's requirements. Even if the concept of Com user provides a lot of flexibility to support access by multiple users including their notifications some limitations need to be considered. In general, multiple writers can cause race conditions if the writers are not coordinated. In addition, the required sequence of Com_SendSignal (of group signals) and Com_SendSignalGroup calls cause the risk of data inconsistency in case of preemption by multiple writers
Since such a coordination is hardly to achieve in different Software Clusters, the following restriction apply:
[SWS_Com_00892]
[SRS_Com_02114]
- Sent signals or signal groups shall be owned by a single Software Cluster only and consequently either by Com users of RTE, or SwCluC, or one CDD.
Nevertheless, reading a signal or signal group by several Com Users in the same or different Software Clusters is possible.
ECUC Partition specific Com user
In this architecture pattern, the Com user module provides dedicated instances for every configured partition, on which Com API or Callback invocation shall take place. As precondition, the Com must provide multiple main functions, that are bound to the relevant partitions. The Com user's callbacks get called in the context of only one partition. Identification of the current partition context hence can be done with a sim-ple "callback function -> partition" lookup table.
ECUC Partition unspecific Com user
In this architecture pattern, the com user is partition unspecific and needs to provide a reentrant implementation of its callbacks for different signals and signal groups on different ECUC partitions. The Com user needs to provide one common set of callbacks, that gets called in the context of multiple partitions.
Relation to SwCluC Com Proxy
A Com user has one or several SwCluCComBaseSockets [24]. A Base Socket is required for each partition, in which the Com user either requires access to the Com APIs for ComSignal/ComSignalGroup transmission/reception or provides signal- and signal group callbacks.
A Base Socket binds the Com callbacks- and a set of ComSignals/ComSignalGroups of the Com in the Host Software Cluster to a EcucPartition. This means, that the Com in the Host Software Cluster invokes the callbacks in the context of this EcucPartition and provides the ComSignals/ComSignalGroups only in this EcucPartition. This requires the following preconditions to be fulfilled:
- The Com IPdus that contain the ComSignals/ComSignalGroups of a Base Socket shall be assigned to a Com main function on the same EcucPartition as configured for the Base Socket. Details on the EcucPartition mapping in Com is described in ECUC_Com_10012, chapter 7.13
- The system shall provide the required ECUC partitions in the Application and the Host Software Cluster. This is a requirement which must be considered during sys-tem design
- The Com user shall be either of the following variants:
- The Com user is partition unspecifc and provide a common instance, which APIs can be called on multiple partitions
- The Com user is partition specific and provides dedicated instances for the configured EcuCPartitions
Appendix A
This appendix contains use cases with different transmission modes and the necessary configuration for these. Table 9 shows the notation of the use case diagrams.
Use case 1 shows an I-PDU that is sent out cyclically with a cycle time tc. This I-PDU consists of signals that all have the ComTransferProperty PENDING. It is configured that the transmission takes place when the TMS evaluates to true.
Because of the configuration of the parameter ComFilterAlgorithm ALWAYS of the ComFilter, there is no need to configure a transmission mode for the case that the TMS evaluates to false.
It does not make any difference in the behavior whether the ComFilterAlgorithm parameter of the ComFilter is set for all the signals within the I-PDU to ALWAYS or if the ComFilter is not defined (does not contribute to the evaluation of the TMS), see SWS_Com_00255.
Use case 2 shows an I-PDU which is sent out three times whenever a value is given by the upper (Com_SendSignal or Com_SendSignalGroup). The time between two transmissions is td. This I-PDU consists of signals, which all have the ComTransferProperty TRIGGERED. It is configured that the transmission takes place when the TMS evaluates to true.
If there is a new send request by the RTE before the ongoing repetition cycle is completed, the new repetition cycle is started and the rest of the last one is discarded.
Use case 3 shows an I-PDU which is send out cyclically with a cycle time tc1 if value v = a (TMS evaluates to true) and with a cycle time tc2 if value v = b (TMS evaluates to false). The I-PDU consists of signals, which all have the ComTransferProperty PENDING.
The TMS switch caused by the new value v = b, starts a new cycle within the next main function and the new value is sent out. Nevertheless, the minimum delay time dt has to be taken into account, since ComEnableMDTForCyclicTransmission is set to true.
For the parameter ComFilterAlgorithm, the following filters defined in [17] can be used for this use-case:
- MASKED_NEW_EQUALS_X
- MASKED_NEW_DIFFERS_X
- MASKED_NEW_DIFFERS_MASKED_OLD
- NEW_IS_WITHIN
- NEW_IS_OUTSIDE
Use case 4 shows an I-PDU which is send out cyclically with a cycle time tc if value v = a (TMS evaluates to true) and if value v = b (TMS evaluates to false) it is sent out three times whenever the value is given by the RTE. The time between two transmissions is td. The I-PDU consists of signals that all have the ComTransferProperty TRIGGERED.
After the switch from ComTxModeMode DIRECT to PERIODIC the cycle is started within the next main function and the new value a is sent out with respect to ComMin-imumDelayTime dt.
Use case 5 shows an I-PDU which is send out cyclically with a cycle time tc and if the value (the same or a new one) is given by the RTE it is also sent out directly three times. The time between two of these three transmissions is always td. The I-PDU consists of signals that all have the ComTransferProperty TRIGGERED.
If the next transmission caused by the periodic part of the ComTxModeMode MIXED should take place within the timeout dt (ComMinimumDelayTime) after a transmis-sion of the DIRECT (N-Times) part, this sent out is delayed until the minimum delay time is elapsed. However, after that the next period of the periodic part is shortened so that there is only an intermediate phase shift of the periodic part but no continuous one.
Use case 6 shows an I-PDU which is send out cyclically with a cycle time tc2 if value v = b (TMS evaluates to false). If value v = a (TMS evaluates to true) it is sent out cyclically with a cycle time tc1 and whenever the value v = a is given by the RTE it is also sent out directly three times. The time between two of these three transmissions is always td. The I-PDU consists of signals that all have the ComTransferProperty TRIGGERED.
A usage of this in practice is for example the signal of the button that controls the window-lift motor. If the button is not pressed, there is a long cycle time tc1 with this information. If it is pressed this information is distributed with a short cycle time tc2. If the button is released again, starting with the next main function this information is distributed three times with td and after that, again the long cycle time is used.
Use case 7 is similar to use case 5 but with ComEnableMDTForCyclicTransmission disabled and ComTxModeNumberOfRepetitions set to one.
In contrary to use case 5, here the minimum delay timer is neither started for the periodic transmissions of the cyclic part nor for the repeated transmissions of the direct part of the Mixed mode. This can result in two consecutive transmissions within the timespan dt as shown in the scenarios b and c.
[SWS_Com_00012]
[SRS_Com_02037]
评论
发表评论