【CAPL】请求和响应

请求和响应

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加



前言


一、请求和响应

请求和响应是诊断的基本要素,在ECAPL中发送诊断请求并得到诊断响应则是测试的最基本步骤。

1.定义请求并发送

在这里插入图片描述
此处声明了一个diagRequest变量,通过long diagSendRequest ( diagRequest obj )函数将其发送出去。IPC.ExtendedDiagnosticSession_Start是开始执行CDD文件中定义好的ExtendedDiagnosticSession。当用户输人“IPC."之后,CANoe会自动过滤出IPC支持的诊断服务供用户选择。此处将切换到ExtendedDiagnosticSession作为诊断请求。

2.获取响应数据

当诊断请求发送后,CANoe已经被动接收了诊断响应,如果有响应的话,用户只需要去获取响应的数据。此处使用long diagGetLastResponseCode ( diagRequest req)来判断响应的类型,结构如下。

在这里插入图片描述
需要注意的是,诊断命令的发送和接收都是需要时间的,如果诊断请求发送后立即验证响应的类型,很可能此时响应还未完成,由下表看出,TFS提供了两个测试函数来设定发送和响应的等待时间。
在这里插入图片描述

3.实例-安全访问

SeedRequest的发送与基本的诊断请求发送一致,也使用diagSendRequest函数。再使用diagCetRespPrimitiveByte函数将安全种子从诊断响应中取出。该函数返回响应中bytePos位置的数据,循环结构如下。

(1)请求安全访问种子(Seed)
在这里插入图片描述
(2)通过Seed& Key dl计算出密钥(Key) .
CANoc提供diagGencrateKeyFromSeed函数来调用d计算出密钥,当返回值为0时,密钥计算成功。具体实现如下。

在这里插入图片描述
(3)发送密钥
读者可以通过diagSetParameterRawr数将密切赋值给诊断请求,再将KeySend请求发送出去,并期待得到肯定响应。
在这里插入图片描述


总结

对于给定的诊断请求ID (0x740) 和响应ID (0x748),以下是一个简单的示例 CAPL 代码,用于实现 UDS 自动化测试用例: ```c // UDS自动化测试用例代码示例 variables { msTimer timer; // 定时器用于发送请求和等待响应 dword testerPresentReqID = 0x740; // 请求ID dword testerPresentRespID = 0x748; // 响应ID } on start { setTimer(timer, 1000); // 设置初始定时器间隔为1秒 } on timer timer { // 发送测试请求 writeTesterPresentReq(); // 等待响应 setTimer(timer, 100); // 设置等待时间为100毫秒 } on message testerPresentRespMsg // 接收到响应消息时触发的事件 { if (this.ID == testerPresentRespID) { // 响应消息的处理逻辑 // 在这里可以添加你的测试逻辑 // 例如,检查响应数据是否符合预期 clearTimer(timer); // 清除定时器,停止等待响应 } } // 发送测试请求函数 void writeTesterPresentReq() { message testerPresentReqMsg; testerPresentReqMsg.ID = testerPresentReqID; testerPresentReqMsg.length = 8; // 请求消息长度为8个字节 // 设置请求消息的数据字节 testerPresentReqMsg.byte(0) = 0x02; // 服务ID testerPresentReqMsg.byte(1) = 0x3E; // 子功能ID // 发送请求消息 output(testerPresentReqMsg); } ``` 上述代码中,我们使用了一个定时器 `timer` 来发送请求并等待响应。`testerPresentReqID` 和 `testerPresentRespID` 分别代表请求响应的 ID。在 `on timer timer` 事件中,我们首先调用 `writeTesterPresentReq()` 函数发送测试请求,然后设置定时器等待响应。当接收到响应消息时,`on message testerPresentRespMsg` 事件将被触发,你可以在该事件中添加你的测试逻辑。 请注意,上述代码只是一个示例,你可能需要根据你的实际需求进行修改和补充。希望这可以帮助你开始编写 UDS 自动化测试用例代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值