ECU 应用层软件模型与硬件相关的生成代码配置4 (qq.com) ECU 应用层软件模型之数据字典DD5 (qq.com) ECU 应用层软件模型之数据字典存储类6 (qq.com) ECU 应用层软件模型之定点化7 (qq.com) ECU应用软件模型之5种定点化实现方式8 (qq.com) ECU 应用层软件模型之自定义存储类9 (qq.com) ECU应用层软件模型之模型生成代码小结10 (qq.com)
从本文开始正式进入Simulink建模环节,计划从接口入手,以最通用的CAN通讯来入手:
1 CAN通讯
对于典型控制器的应用层软件开发,都会涉及到CAN通讯,先来了解下CAN报文的接收。基于AUTOSAR的CAN报文接收过程会涉及到多个模块的合作,具体过程是:
首先,BSW调度器周期性地调用CAN Driver模块的Can_MainFunction_Read()函数。
然后,Can_MainFunction_Read() 函数访问CAN Controller(硬件)的相关寄存器,例如仲裁寄存器、数据寄存器和数据长度寄存器等,提取这些寄存器中的数据,调用类似于Can_17_McmCan_lRxExtractData() 的函数从缓冲区中提取数据。接着,它会将消息对象的信息分配给 RxMailBoxInfo 结构体(其中包括 CAN Id、对应的 Hoh 和 ControllerId),并将 PDU 相关信息分配给 RxPduInfo 结构体(包括指向 Ddu 数据的指针 *SduDataPtr 和 Sdu 长度)。
再向上层传递数据,调用 CAN Interface 模块的 CanIf_RxIndication() 函数,从而将数据从 CAN Driver 层传递至上一层的 CAN Interface 模块; CAN Interface 再次调用 PduR 模块的 PduR_RxIndication() 函数,将数据传送到 PduR 模块;PduR 将数据路由至 Com 模块,并调用 Com_RxIndication() 函数将其传送至 Com 模块,Com 模块会将接收到的数据存储在其内部缓存区域。
最后,由应用层软件来获取所需的数据,进行逻辑判断和运算等操作。
CAN报文发送过程也是类似的链路,但所调用的函数不一样,本文不展开,如下所示:
2 模型开发
报文数据已解析,底层软件已经将字节数据转换成了物理信号,此时底层软件将物理信号传给应用层软件通常有两种接口形式:一种是总线形式,即将这些物理信号捆绑在一起。那么在应用层软件的模型层面,就是用Bus selector将总线解绑成一个个独立的物理信号,如下所示:
另一种形式就是底层软件直接传递一个一个物理信号,此时就以输入信号形式接收就行。
以上就是在模型中如何接收CAN报文信号,除此之外,在模型中还可以进行ID检验、Timeout,Checksum校验和Counter检验等运算。当然这些都属于高级操作了,我们这里还是关于基础操作,常见原始值转换为物理值。
3)报文转换计算的注意点
对于原始值转换为物理值的计算,首先要注意的是数据转换精度,就如下图需要进行转换的例子:
3 小结
以上就简单介绍了CAN报文接收常见的两种形式,不管是哪种形式,在应用层软件都需要对CAN信号进一步处理,最常见的就是原始值转换为物理值,并结合实际开发工作分享了数据转换过程最需要注意的点,最容易产生bug的地方。
对于CAN信号的接收,通常还需要进行信号的有效性验证,比如无效时信号的处理,比如收到的油门深度信号无效,该如何处理?是给无效值,还是寻址可替代的值。更多内容下篇文章继续~
创作不易,欢迎点赞再看收藏关注!
汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。