【问题标题】:How to send multiple diagRequest messages in Vector CAPL?如何在 Vector CAPL 中发送多个 diagRequest 消息?
【发布时间】:2019-01-28 16:58:46
【问题描述】:

我目前正在编写一些在单击按钮时执行的 CAPL 代码。它应发送多个诊断请求。但 CANoe 总是告诉我,它一次只能发送一个请求。所以我需要延迟请求。 diagSetRequestInterval 函数不起作用。由于它不是测试用例,testWaitForDiagResponse 也不起作用。

【问题讨论】:

    标签: request diagnostics capl canoe


    【解决方案1】:

    您必须等到请求被处理(通过来自目标的响应或超时)。

    由于您不是在测试节点中,您必须将控制权交还给系统,即您执行diagSendRequest 的函数将结束,您等待总线上的某些事件发生在您继续之前(否则模拟会停止)。

    一旦请求被处理,on diagRequest ... 就会被调用。在这个事件过程中,你可以发送下一个请求等等。

    示例:

    代替:

    myFunction()
    {
      diagRequest ECU.ProgrammingSession req1;
      diagRequest ECU.SecuritySeed req2:
    
      diagSendRequest(req1);
      diagSendRequest(req2);
    }
    

    你会这样做:

    myFunction()
    {
      diagRequest ECU.ProgrammingSession req1;
      diagSendRequest(req1);
    }
    
    on diagResponse ECU.ProgrammingSession
    {
      diagRequest ECU.SecuritySeed req2:
      diagSendRequest(req2);
    }
    

    超时处理是一个不同的主题,作为练习:-)

    【讨论】:

      【解决方案2】:

      您实际上希望在 CANoe 中同时实现多个 TP 连接。我假设您在诊断/ISO TP 配置中只有一个诊断描述,这使您一次只能使用 1 个 TP 连接。

      您可以根据需要在同一通信通道上的诊断 ISO/TP 中实施多个诊断层,但名称不同。

      在模拟节点中,您只需使用不同的命名空间声明您想要的请求,对应于您之前创建的诊断层名称之一。

      这样您就可以在UDS中为CANoe环境虚拟化多个TP连接。

      或者,您不使用 CANoe 的诊断层支持,而是在数据链路层(CAN、FR)上使用 UDS 有效负载构建整个消息。 取决于你设置了什么样的数据链路层(CAN、FR)以及有多少带有诊断层的通信通道。

      例如,在 Flexray 中,如果您的 frschedule 在动态段中提供了 Diaglayer(或您)可以使用的多个 frslot,您可以在同一个 frcycle 中发送多个 diag 请求。

      【讨论】:

        猜你喜欢
        • 2018-06-27
        • 2018-11-23
        • 2018-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 2017-10-01
        相关资源
        最近更新 更多