NRC 0x78 在CAPL中如何打开和关闭

问题背景:

在诊断会话层,从发送诊断到响应答复都规定了定时参数,其中有两个P2 server的时间:

  • P2CAN_SERVER :俗称短时间,在接受到请求信息后,服务器开始答复信息的运行要求,一般是50ms.
  • P2*CAN_SERVER :俗称长时间,服务器在传递了0x78的否定应答码,服务器开始答复信息的运行时间,一般是5000ms.

CANoe 默认状态下,把0x78当成特殊负响应应答码,收到NRC78的时候,会自动将等待应答的时间填充为P2*~CAN_SERVER 时间。

现在我想实现的是,当收服务器返回的0x78时,把它当成一般的NRC处理。

diagSetP2Extended ()

选择 form3 ,下面的解释是:
如果“响应等待”处理被停用,CANoe 将0x78 响应转发到CAPL作为一般消极的响应。否则,P2ex计时器将自动启动,并报告最终响应或超时。
在这里插入图片描述

忽视 NRC0x78的响应

req_Reset_All_Parameters_Start 这个服务的响应时间大约在10s,左右,我们这里代码中设置 TestWaitForDiagResponse(req_Reset_All_Parameters_Start,3000); 肯定是不够的,如果禁用掉diagSetP2Extended (),看下输出结果:

     // write("DiagSetP2Extended(-1):%d",DiagSetP2Extended(-1));

      TestReportWriteDiagObject(req_Reset_All_Parameters_Start); 
      DiagSendRequest(req_Reset_All_Parameters_Start);
      TestWaitForDiagRequestSent(req_Reset_All_Parameters_Start, 150);

      retVal = TestWaitForDiagResponse(req_Reset_All_Parameters_Start,3000); 
      write("TestWaitForDiagResponse():%d",retVal);
	  write("response size:%ld",diagGetRespPrimitiveSize(req_Reset_All_Parameters_Start));
     // write("DiagSetP2Extended(-1):%d",DiagSetP2Extended(0));

输出结果:
TestWaitForDiagResponse():0 //返回结果为0,说明3000ms超时时间到了,但是没有收到 积极或者消极的响应
response size :-98 //也时说明没收到响应

下面的Trace中可以看出,31 01 DC 10的响应时间大概为10s, 当时间戳2.733 s发送了31诊断请求后,服务器在50ms 内也就是在2.788s无法给出积极或者消极响应,于是就给客户端响应了NRC78,告诉客户端你在给我5000ms的时间,但是由于我们的代码是TestWaitForDiagResponse(req_Reset_All_Parameters_Start,3000)也就是不管短时间长时间我最多只给你3000ms,在这时间有积极或者消极响应(客户端忽略NRC78),就返回值为1,否则为0;即使服务器后面时间给出了响应,我也不会等待了。
在这里插入图片描述

将NRC0x78 当成普通的 NRC

我们 使能DiagSetP2Extended(-1) 代码。

      write("DiagSetP2Extended(-1):%d",DiagSetP2Extended(-1));

      TestReportWriteDiagObject(req_Reset_All_Parameters_Start); 
      DiagSendRequest(req_Reset_All_Parameters_Start);
      TestWaitForDiagRequestSent(req_Reset_All_Parameters_Start, 150);

      retVal = TestWaitForDiagResponse(req_Reset_All_Parameters_Start,3000); 
      write("TestWaitForDiagResponse():%d",retVal);
	  write("response size:%ld",diagGetRespPrimitiveSize(req_Reset_All_Parameters_Start));
      write("DiagSetP2Extended(-1):%d",DiagSetP2Extended(0));

输出结果:
DiagSetP2Extended(-1):0 // 返回值为0 说明设置成功的;
TestWaitForDiagResponse():1 //返回值为 1 ,说明 在3000ms内收到了积极或者消极的响应。
response size :3 //响应的数据长度是3,说明是消极响应,即返回的 7F 31 78
DiagSetP2Extended(0):0

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁小兵

慢慢长夜磨一章好文章,费烟!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值