COM
文章目录
- COM
- COM 基础介绍
- COM主要功能
- AUTOSAR COM 模块 发送模型
- Signal 信号/信号组
- 发送信号属性—Triggered属性+Pending属性
- 信号的初始化
- 信号的对齐方式(大小端)
- 信号的收发
- 发送
- 接收
- 字节序转换和符号扩展
- 信号的过滤机制
- 过滤处理
- 信号传输模式
- 信号流和传输方式选择
- 对其他模块依赖
- 参考文档
COM 基础介绍
-
对不同速率的总线网络提供数据交换;为汽车控制单元应用软件提供了统一的通信环境,为内部和外部通信定义了公共的软件通信接口和行为;
-
AUTOSAR COM模块进行发送和接收信号,为RTE提供面向信号的接收与发送函数。
COM主要功能
- 为上层提供信号接口 (无符号/有符号)
- I-PDUs 中信号打包/解包
- 处理传输模式
- I-PDUs间传输最小间隔
- I-PDU组的通信控制
AUTOSAR COM 模块 发送模型
- SWC 调用 RTE 提供的 Com_SendSignal,Com_SendSignalGroup
- COM层 COM_SendSignal 函数会检查信号是否配置了开启更新位(UB)
- UB 使用限制
- 如果是PDUR 层分步多次调用 Com_TriggerTransmit(正常每个PDU只会被COM层置位1次,为了避免被多次Updatebit,需要在PDUR触发调用时清UB)
- ComTxModeNumberOfRepetitions 和 UB 不可同时配置(ComTxModeNumberOfRepetitions 表示重发次数,COM每发一次会触发多次报文发送,从而多次设置Updatebit,每个PDU预期只会被COM层置位1次)
- 更新UB:当上层软件模块需要发送Signal时,会通过RTE调用COM层的发送接口更新Signal或者Signal Group值,COM模块自动将Signal/Signal Group对应的UB置位
- 清除UB:清除时机可以通过参数ComTxIPduClearUpdateBit配置
- Transmit eg:PduR_ComTansmit 发送数据且返回E_OK时
- Confirmation eg: PduR_ComTransmit 发送数据且返回 E_OK 时,且收到发送确认 Com_txConfirmation 时
- TriggerTransmit eg: 当I-PDU数据被 Com_TriggerTransmit 请求发送时
- 注:如果发送模式为DIRECT,并且ComTxModeNumberOfRepetitions大于或等于1,那么Update Bit不能使用。Update Bit必须和关联的信号在同一个I-PDU,且每个Signal或Signal Group只能关联一个Update Bit
Signal 信号/信号组
Abbreviation / Acronym: | Description: |
---|---|
signal | AUTOSAR信号由COM中的一个或多个信号携带。 从AUTOSAR信号到COM信号的转换由RTE完成。 通常,转换会保留数据的语法。 但是,在复杂数据类型的情况下,转换可能会改变信号的语法。 因此,AUTOSAR COM中的信号并不总是与AUTOSAR信号相同。 |
signal group | 信号组指的是一组必须始终在相同的I-PDU中保持在一起的信号。信号组用于保证AUTOSAR复合数据类型的一致传输。信号组具有以下属性: 一个信号最多只能属于一个信号组 一个信号组最多只能属于一个I-PDU 信号组在I-PDU内不会相互重叠 信号组是一组属于该组的连续信号。然而,在组内可能存在未使用的位(“空洞”)。 信号组可能不含任何信号(“可能为空”)。 将信号分组到信号组的分组假设是作为COM生成过程的输入提供的。 |
-
初始值:AUTOSAR COM模块使用配置参数 ComSignalInitValue 的低N位初始化发送方和接收方的每个N位的信号类型, 配置的ComSignalInitValues也用于I-PDU的初始化信号。一个信号的ComSignalInitValue可以与ComSignalDataInvalidValue值相同。初始化阶段会清空所有update-bits值。默认情况下,所有I-PDU组应在停止状态,不得由Com_Init()调用启动。
-
数据无效值:通过调用 Com_InvalidateSignal, AUTOSAR COM模块将在内部执行带有配置 ComSignalDataInvalidValue 的 Com_SendSignal。ComTransferProperty和传输模式决定了ComSignalDataInvalidValue在总线上的传输。内部执行的带有数据无效值的 Com_SendSignal,会决定被用作过滤器的数据无效值和TMS当前值。VFB仅为复杂数据类型定义一个属性。因此,一个失效的复杂数据类型到一个失效的信号簇的最佳映射是使一个信号簇的所有信号失效。因此,RTE还可以通过调用Com_InvalidateSignalGroup来请求使整个信号簇无效。
-
正常值:初始化阶段之后的有效值,包括COM部分收发的信号值。
发送信号属性—Triggered属性+Pending属性
-
Triggered属性-触发:调用 Com_SendSignal( ) 服务请求具备Triggered属性的信号发送,可以触发相关I-PDU的发送,但是如果该I-PDU的发送模式被配置为Peiodic时,只更新信号的值,不会触发相关I-PDU的立即发送,而是在下一周期到来时触发发送。
-
Pending属性-延迟:Com_SendSignal( )服务请求调用具备Pending属性的信号发送,不会触发相关I-PDU的发送。
信号的初始化
- AUTOSAR COM在 Com_Init() 执行时,将初始化所有I-PDU内容,首先用默认值(ComTxIPduUnusedAreasDefault)表示字节,然后根据所包含信号的初始值(ComSignalInitValue) 和更新位来表示位。初始化过程中无法使能ECU内部的通信功能。
信号的对齐方式(大小端)
-
小端:信号的高位(MSB)放在高字节的高位,信号的低位(LSB)放在低字节的低位;
-
大端:信号的高位(MSB)放在低字节的高位,信号的低位(LSB)放在高字节的低位;
信号的收发
发送
-
发送过程中,应用层调用COM层提供的信号或信号簇发送函数,根据配置,信号或信号簇的数据经过字节序转换后被更新到I-PDU中相应的位置。AUTOSAR COM规范中同一I-PDU可以设置两种发送模式,对其中各信号的传输模式条件进行计算,I-PDU选择其中一种发送模式进行发送。然后启动发送死限监控,调用 PduR_ComTransmit() 函数将I-PDU发送到下层。
-
根据该信号的配置判定是内部信号还是外部信号。
- 内部发送:直接将信号数据复制到接收信号数据区,并执行通知操作;
- 外部发送:若该信号发送属性为触发triggered,则该信号所属的I-PDU将立即发送(除非该I-PDU发送模式为周期传输模式),若该信号发送属性为延迟pending,则不进行传输,发送时,信号经过字节顺序转换后数据被复制到I-PDU中,同时设置相关更新位信息,然后根据该I-PDU的TMS切换传输模式,进行传输并设置启动相关定时器。
接收
- 接收过程中,当下层接收到I-PDU时,下层将调用COM层提供的指示函数 Com_RxIndication(),取消并重启接收死限监控,将I-PDU的数据从底层拷贝到COM中。调用信号或信号簇的接收函数后,该I-PDU中的信号或信号簇将经过字节顺序转换、符号扩展和接收过滤后,数据被拷贝到应用层。
- 接收过程要判断是内部信号还是外部信号
- 内部接收:直接将信号数据复制到接收信号数据区;
- 外部接收:首先判断对于的I-PDU组是否启动,若启动,返回E_OK,否则返回 COM_STOP,取消并重启该I-PDU的相关死限监控定时器,将数据复制到I-PDU数据区,I-PDU中的信号经过字节书序转换、符号扩展和过滤机制后,复制到接收信号数据区,再执行通知操作,通知上层软件调用相关API函数接收信号。
字节序转换和符号扩展
-
COM模块支持的数据类型:boolean,uint8,uint16,uint32,uint64,sint8,sint16, sint32,sint64,uint8[n],float32和float64,其中uint8[n] 对应于UINT8_N或UINT8_DYN
-
AUTOSAR COM 支持所有有符号和无符号整型数据类型的字节序转换
-
同时会将非整型数据类型视为对应匹配的整数数据类型,,要么在 ComSignalEndianness 被配置为OPAQUE的情况下不解释它们的内容。
-
AUTOSAR COM模块将不透明的数据解释为 uint8[n],并始终将其映射为n字节大小的信号。对于不透明的数据端序,转换必须配置为 OPAQUE。
-
AUTOSAR COM会扩展接收信号 ComSignalType 的大小。注:必须考虑签名数据的平台特定表示。 负值的签名数据将被正确映射。
例如:一个10位有符号信号被接收并被 Com_ReceiveSignal 复制到一个16位有符号整型变量。 如果接收到signal值为(-3)10进制,类型为sint16,则接收到的10位信号有取值为1111111101b。 当将其复制到16位整型变量时,值将扩展到11111111111101b 。
-
AUTOSAR 模块不支持float32 和 float64数据类型的符号位拓展
-
AUTOSAR COM 模块 在发送端 I-PDU 调出来之前进行端序转换。
-
除了字节顺序转换外,AUTOSAR COM模块不支持 ComSignalType FLOAT32或FLOAT64的信号的进一步转换。 也就是说,支持字节顺序转换,但不支持复杂转换或分数、指数、符号或偏差值的标准化。
-
注: Intel 格式:同小端,低字节在前,Motorola格式:同大端,高字节在前,以上均可配置,如果配置Opque 字节序(不透明),代表ECU A到ECU B的数据通信顺序是两方自行约定,一般为单字节数组格式如arry[8], arry[64]
信号的过滤机制
-
AUTOSAR COM模块会评估每次过滤的条件为真或假;
-
AUTOSAR COM模块会在接收端滤出想要过滤的信号;
-
AUTOSAR COM模块应在发送端对传输模式条件(TMC)使用过滤机制,但不应过滤发送端信号;
-
AUTOSAR COM模块提供的过滤算法:
- ALWAYS: 总是通过,若一个信号的过滤算法配置为ALWAYS,那么这个信号的TMC永远为True
- NEVER: 总是不通过,若一个信号的过滤算法配置为NEVER,那么这个信号的TMC永远为False;
- MASKED_NEW_EQUALS_X: 若一个信号的过滤算法配置为MASKED_NEW_EQUALS_X时,只有当新值与掩码按位与后等于设定的某一值时,这个信号的TMC才等于True;
- MASKED_NEW_DIFFERS_X: 若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_X时,只有当新值与掩码按位与之后不等于设定的某一值时,这个信号的TMC才为True;
- MASKED_NEW_DIFFERS_MASKED_OLD: 若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_MASKED_OLD时,只有当新值与掩码按位与之后的值不等于旧值与掩码按位与之后的值时,这个信号的TMC才为True;
- NEW_IS_WITHIN: 若一个信号的过滤算法配置为NEW_IS_WITHIN时,只有当新值在某一设定的范围内时,这个信号的TMC才为True;
- NEW_IS_OUTSIDE: 若一个信号过滤算法配置为NEW_IS_OUTSIDE时,只有当新值不在某一设定的范围内时,这个信号的TMC才为True;
- ONE_EVERY_N:若一个信号的过滤算法配置为ONE_EVERY_N时,该信号值每更新N次,这个信号的TMC值为True;
注:对于ComSignalType FLOAT32、FLOAT64、UINT8_N或UINT8_DYN的信号,AUTOSAR COM模块应只支持配置为ALWAYS、NEVER或ONE_EVERY_N的ComFilterAlgorithm ;对于ComSignalType配置为BOOLEAN的信号,AUTOSAR COM模块应只支持ComFilterAlgorithm配置为
过滤处理
-
如果AUTOSAR COM模块在接收端过滤掉一个信号(信号簇),即filter condition的结果为false,则AUTOSAR COM模块应丢弃该信号(信号簇),不进行处理,及不会将该信号的值放入old_value中;
-
如果AUTOSAR COM模块将一个信号的过滤器计算为true(值没有被过滤掉),那么AUTOSAR COM模块应将该信号的值放入old_value中;
-
如果在send-API编写相应的信号之前对过滤器进行了计算,则需要有一种方法来确定该信号的过滤器状态。 一些筛选器需要new_value来计算筛选器。 然而,这只有在使用send-API更新信号之后才可用。 因此,有必要在第一次发送之前为new_value定义过滤器使用的值。
-
对于配置的接收滤波器MASKED_NEW_DIFFERS_MASKED_OLD的信号, AUTOSAR COM模块将处理该信号在接收截止日期监测超时后收到的第一个值,就像该值已经通过了过滤条件一样;
-
在相关的I-PDU的RX截止超时后AUTOSAR COM模块会让过滤器MASKED_NEW_DIFFERS_MASKED_OLD传递任何值。
信号传输模式
-
直接/N次传输模式(Direct/n-times模式):包含于该I-PDU的任何具备Triggered属性的信号及信号组的更新都会触发I-PDU的立即发送,当上层面模块调用Com_SendSignal( )/Com_SendSignalGroup( )更新信号或者信号组时,Com层根据配置需求发送n次该I-PDU。
-
周期传输模式(Periodic 模式):用户配置发送周期,只有该I-PDU的周期到来时才会触发该I-PDU的发送,上层模块调用Com_SendSignal()/Com_SendSignalGroup( )只更新信号及信号组的内容。
-
混合传输模式:Direct/n-times和Periodic的混合模式,当上层模块调用Com_SendSignal( )/Com_SendSignalGroup( )请求该I-PDU包含的信号/信号组的发送时,将会触发该I-PDU的直接n次发送,同时,用户配置的周期到来也会触发该I-PDU的发送。
-
None传输模式:无论何时COM层不能够触发拥有该发送模式的I-PDU的发送,只有PduR模块调用Com_TriggerTransmit()服务才能够触发该I-PDU的发送。
-
在AUTOSAR COM规范中允许为每个I-PDU静态配置两种不同的传输模式,ComTxModeTrue和ComTxModeFalse。在AUTOSAR COM规范中通过传输模式切换,来选择I-PDU中的其中一种传输模式进行传输。
- 先使用过滤机制判断I-PDU中各信号的发送模式条件,同时更新I-PDU中的信号。
- 通过各信号的判断结果来计算该I-PDU的TMS(transmission mode selector)。若至少有一个C( 与IPDUk中的信号Si相关)为True,则TMS为True,对应I-PDU以用户配置的ComTxModeTrue的发送模式发送;若所有C(Si,IPDUk)都为False,则TMS为False,对应I-PDU以用户配置的ComTxModeFalse的发送模式发送.
-
发送模式条件TMC+发送模式选择TMS
- 发送端信号的TMC(发送模式条件)的计算与接收端的信号过滤机制相同,但是,在发送端信号过滤并不会丢弃任何的信号,而只是用于计算信号TMC的值。
- 发送端的TMS,一个I-PDU的TMS的值是根据其所有下属的信号的TMC结果决定的,若一个I-PDU下属的信号中至少有一个信号的TMC计算为True,那么这个I-PDU的TMS为True,只有该I-PD下属的所有的信号的TMC都计算为False时,该I-PDU的TMS才为False。
-
每个I-PDU配置两种发送模式,在程序运行过程中,某I-PDU的发送模式是由TMS来决定,若一个I-PDU的TMS根据上述的算法计算为True,那么该I-PDU将以配置的True状态下的发送模式进行发送。当一个I-PDU下属的某个信号的过滤算法配置为ALWAYS,那么这个I-PDU将一直以用户配置的TM为True状态下发送模式进行发送。
信号流和传输方式选择
在用户(RTE 或 SwCluC)发出特定信号的发送请求后,该信号被写入配置定义的适当的 I-PDU 缓冲区
对其他模块依赖
参考文档
Specification of Communication
Requirements on Communication
AutoSAR配置与实践(深入篇)6.4 COM 主要功能描述_autosar com-CSDN博客