首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Autosar中过滤CAN消息?

如何在Autosar中过滤CAN消息?
EN

Stack Overflow用户
提问于 2022-09-01 16:08:10
回答 1查看 87关注 0票数 0

我是AUTOSAR com模块的新手。我想执行一些场景来检查CAN FD中的特定消息。在这里,我想阻止除一条消息(eg: ID: 0x22)以外的在某些事件发生期间的所有eg: ID: 0x22消息。

我的想法是循环所有CAN FD PDU ID并检查相应的消息ID(0x22)。这里的问题是,我必须遍历所有CAN FD PDU ID。(如果FD是200,则必须循环200时间。)

我想知道,除了AUTOSAR环境中的一些消息之外,是否还有其他好的方法来阻止所有的CAN FD消息?还有我要阻止这个PDU的地方?它是在COM模块还是CANIf模块?如果我的理解是错误的,请纠正我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-07 00:00:23

您可以尝试在SystemDescription/厄瓜多尔EcuExtract中创建几个Tx ISignalIPduGroups。将每个ISignalIpdu分配给相应的ISignalIPduGroup。然后,您可以启用/禁用必要的ISignalIPduGroup。

例如:

代码语言:javascript
运行
复制
IPduGroup_Tx_A - CommunicationDirection=OUT
    ISignalIPdu_Tx1
    ISignalIPdu_Tx2
IPduGroup_Tx_B - CommunicationDirection=OUT
    ISignalIPdu_Tx3
    ISignalIPdu_Tx4

IPduGroup_Rx_B - CommunicationDirection=IN
    ISignalIPdu_Rx1
    ISignalIPdu_Rx2
IPduGroup_Rx_B - CommunicationDirection=IN
    ISignalIPdu_Rx3
    ISignalIPdu_Rx4

您可以直接在Com上触发它。

代码语言:javascript
运行
复制
void MyCdd_MainFunction(void)
{
    if (cond_tx_a == TRUE) {
        Com_IpduGroupStart(COM_IPDUGROUP_TX_A, TRUE);
    } else {
        Com_IpduGroupStop(COM_IPDUGROUP_TX_A);
    }
    if (cond_tx_b == TRUE) {
        Com_IPduGroupStart(COM_IPDUGROUP_TX_B, TRUE);
    } else {
        Com_IpduGroupStop(COM_IPDUGROUP_TX_B);
    }
    
    if (cond_rx_a == TRUE) {
        Com_IpduGroupStart(COM_IPDUGROUP_RX_A, TRUE);
    } else {
        Com_IpduGroupStop(COM_IPDUGROUP_RX_A);
    }
    if (cond_rx_b == TRUE) {
        Com_IPduGroupStart(COM_IPDUGROUP_RX_B, TRUE);
    } else {
        Com_IpduGroupStop(COM_IPDUGROUP_RX_B);
    }
}

因此,当cond_tx_a == TRUE启动IPduGroup_TX_A,因此,ISignalIPdu_Tx1ISignalIPdu_Tx2现在将被传输,但是ISignalIPdu_Tx1ISignalIPdu_Tx2不会被发送,除非cond_tx_b == TRUE。同样的情况也发生在IPduGroup_RX_AIPduGroup_RX_B及其映射的ISignalIPdus上,但对于Rx,您实际上禁用了接收,但实际上是Rx ISignalIPdus的最后期限监视。

您也可以在无需编写直接代码的情况下在IPduGroups中配置BswM (参见configuration BswMPduGroupSwitch)中的此类切换。

我们有一些OEM,其中所有的消息有一个分配给一个PowerSource,如果传输或不。

代码语言:javascript
运行
复制
IpduGroup_PowerSource_PlusB
IpduGroup_PowerSource_ACC
IPduGroup_PowerSource_IG1
IPduGroup_PowerSource_IG2

我们从NetworkDescription中生成了一些规则,如果这些规则被映射到组中,它们会根据不同的情况自动启动/停止Ipdus。PowerStatus是BswM的输入。BswM现在甚至有BswMTimer支持。因此,你可以制定规则,例如:

3000ms.

  • after
  • 启动一个BswMTimer_IG1超时,这是另一个实际切换Rx-IpduGroup的输入,以便在IG-ON之后仅3000 is就启动Com中的超时监视。这通常是一个稳定时间,车辆唤醒/启动(Clamp15)中的所有ECU以及并非所有消息都可用在总线上,这将导致超时DTCs被记录下来。

BswM的好处是,它大多是配置好的,实际上没有手动编写一行代码。您甚至可以在POSTBUILD配置的情况下更新此配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73572473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档