🌎相关文章
🚩Capl编程xml标签语法(1) —— Test Module/Test Group/Test Case 🚩Capl编程xml标签语法(2) —— 控制语句 if else 和 for循环 🚩Capl编程xml标签语法(3) ——变量,环境变量,系统变量的操作 🚩Capl编程xml标签语法(4) ——CAN报文周期检测/错误帧检测/信号改变检测。。。 🚩本章节内容演示源码下载,直接到文章底部
🌎前言
🍅 实际工程测试中,我们会去测试一段时间内,报文的周期是否都是符合需求的;一段时间内,某个信号是否发生改变;一段时间内,是否收到了错误帧;一段时间内,某条报文发了几次;等等这一类一段时间内的数据检测,Vector 给我们提供了这一类集的测试方法(XML和CAPL),本节只讲解XML的测试方法🍅本节内容,只讲解CAN总线方法🍅下图是测试集合,本博客内容较多,但都是干货,阅读请耐心,一次学不完,别忘了收藏。 🍅测试软硬件环境:Win10 x64CANoe 11 SP2 x64>
![请添加图片描述](https://img-blog.csdnimg.cn/cd1d9d9011754197b735528ebff62ae3.gif#pic_center)
文章目录
🌎相关文章🌎前言 🌎报文周期的检测 🌎报文数据长度检测 🌎错误报文检测 🌎两条报文之间的时间间隔 🌎收到没定义的报文 🌎检测节点是否处于激活状态 🌎检测节点是否处于非激活状态 🌎 检测信号或者变量值是否被改变 🌎检测指定报文出现了最多次数 🌎检测case执行的最大允许时间 🌎检测值之间的依赖关系 🌎 检测值是否有效🌎总结
![请添加图片描述](https://img-blog.csdnimg.cn/498a50be36fd477f89fed686f469c7b6.gif)
🌎报文周期的检测
1️⃣ 现在我想测试报文 ID = 0x3DD ,cycle 是100ms,在CAN总线中,它的实际周期在90 -110 之间,就是合格的。测试5s时间。 🏀 Cycle Time Absolute(绝对时间)(优点:可以自由设置最小和最大报文时间) 🏀 Cycle Time Relative(相对时间)(优点:可以不知道DBC文件中的报文周期,直接设置百分比)
2️⃣ 测试报告可以看到测试结果的详细参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/f5f2136058eb496b929fe3554303a569.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
3️⃣ 测试报告可以看到测试结果的详细参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/29a7b9e99cb3497e835b0cf5337466aa.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎报文数据长度检测
1️⃣ 检测一段时间内报文的DLC长度是否被改变,被改变则Fail.为了显示方便,把其它case 去掉了,完整代码,放在结尾
2️⃣ 测试报告可以看到测试结果的详细参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/00b9965b80a04e24b5c9e9baa8d1827a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎错误报文检测
🍊 如果对下面演示的代码有疑问请先仔细读下Help 描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/91b2576992bc4e9090ed47bfdc513ab0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 检测一段时间内出现错误报文的个数 为了显示方便,把其它case 去掉了,完整代码,放在结尾
2️⃣ 这次为了更加真实的还原测试,在BUS上我加了个IG模块,并且添加了个ErrorFrame,设置成按键 ‘t’触发,当我们在执行测试的时候,按下 ‘t’触
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3b3864253554c3a86da0a8f1a178acd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
3️⃣ 测试结果如下图: 如果我们在这个时间周期内允许出现2帧错误帧,则xml 改成
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a35112aa16f435985916fc172c44bbb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
4️⃣ 如果我们想测试在5s内出现了2帧错误帧,则需要改成下面代码 测试下来,min 和 max 是闭区间
5️⃣执行过程中,按下两次‘t’,按一次或者三次都会fail.
![在这里插入图片描述](https://img-blog.csdnimg.cn/78b6999cd15243c48d8d8e88044fde50.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎两条报文之间的时间间隔
🍊 如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/acadda5a336b4ad6850bed8e7d94e5e5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 我选择的两个报文 0x3FC (周期是50ms) 0x4DD(周期是100ms) ,这就说明这两个报文,最大发送的时间间隔最大应该是50ms.最小应该是0ms,根据测试场景,我们设计了两条case,为了显示方便,把其它case 去掉了,完整代码,放在结尾我本来行通过IG模块,创建两条报文的,执行报错,编译XML的时候它是去DBC文件去找的报文,找不到就报错下面代码测试内容当收到0x3FC 报文后,最大允许时间内要收到0x4DD,否则就fail
2️⃣ 测试结果看出超过最大时间间隔的pass了,二小于时间间隔的fail了,这正是符合预期结果的
![在这里插入图片描述](https://img-blog.csdnimg.cn/2437b309927f40c0b9535964613b6424.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎收到没定义的报文
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c40add42528487ab7e91028bd2a63c6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 在一段时间周期内,检测是否收到了未定的报文,收到了就是fail为了显示方便,把其它case 去掉了,完整代码,放在结尾
②, 在IG模块中定义一个0x555 报文,执行测试的过程中,按下‘x’触发报文,比对测试结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2a6f2c40abf43588b0e844b1ebd0793.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎检测节点是否处于激活状态
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/c0b724e2b5d948628a69e28c581a7285.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 在一段时间周期内,检测是否收到了指定节点的报文,只要收到任何一条报文,都算pass。否则Fail为了显示方便,把其它case 去掉了,完整代码,放在结尾
2️⃣ 把需要测试的节点IDCU屏蔽掉,然后再在IG模块中添加一条属于IDCU模块的报文,先设置成不发送
![在这里插入图片描述](https://img-blog.csdnimg.cn/05454ae4aa0248f7ae4789a53ab7cbf3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
3️⃣ 测试结果,看出,因为没收到一条来自IDCU节点的报文,所以Fail了
![在这里插入图片描述](https://img-blog.csdnimg.cn/a7bc1a311ac348559d6bc0d82244f6ba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
4️⃣我们在执行case的时候,点击周期发送,那么测试case就pass了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e5d8fbba7384afebda66bb7e9d16da6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎检测节点是否处于非激活状态
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/823cf9cad1444486a9768e113ccc49d6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 在一段时间周期内,检测是否收到了指定节点的报文,只要收到任何一条报文,都算Fiail为了显示方便,把其它case 去掉了,完整代码,放在结尾这个功能和上面的node active 是相反的。
🌎 检测信号或者变量值是否被改变
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/63eed977b77446968a64f190cdddb0e4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 在一段时间周期内,检测指定的信号或者变量的值是否被改变,被改变了就fail为了显示方便,把其它case 去掉了,完整代码,放在结尾
2️⃣ 我在测试过程中,连续改变信号 ECFail 值两次,测试结果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa479311de0b484e860e3fb00c0f9fca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎检测指定报文出现了最多次数
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e20bac82c7442eb9e43f4ed2e01972c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 在一段时间周期内,检测是指定报文出现的最大次数,也可以指定最大最小次数为了显示方便,把其它case 去掉了,完整代码,放在结尾这个报文必须是DBC文件中定义好的,IG模块自己建立的不可以
2️⃣ 把需要测试的节点IDCU屏蔽掉,然后再在IG模块中添加一条属于IDCU模块的报文,先设置成不发送,测试结果是pass的,这里每贴出来,然后再测试的时候,把周期发送选项打勾,则就fail了,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/a8e440d86206438cb4e31b753360f394.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
3️⃣这个方法,更高级的是还可以指定check 报文的内容,也就说说只有收到了指定内容的报文才算有效, 下面代码指定 byte 0 的数值等于1 的0x3af 报文 出现次数不能超过两次,否则就fail了。
0x01
4️⃣ 我们让报文周期发送,但是报文内容是不满足xml的,所以,即使一直收到这条报文,也是pass的
![在这里插入图片描述](https://img-blog.csdnimg.cn/d080cc30b220439295a40d60897a82c5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
5️⃣我们让报文周期发送,让报文内容是xml,就fail,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/17768b9255fe45269b45aba8ab2d55a0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎检测case执行的最大允许时间
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/8923735a2e814b9788df2099fbae2116.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 指定的casea要再约束条件内设置的时间内执行完毕,否则fail这个报文必须是DBC文件中定义好的,IG模块自己建立的不可以
2️⃣ 把需要测试的节点IDCU屏蔽掉,然后再在IG模块中添加一条属于IDCU模块的报文,先设置成不发送,测试结果是pass的,这里每贴出来,然后再测试的时候,把周期发送选项打勾,则就fail了,如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/af74ea9443764d91b0562d2f59e9795b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎检测值之间的依赖关系
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
这个怎么理解呢?一组值(或信号或变量)被改变了,期望另外一组值也跟着改变到指定的值,这就是所谓的值变化的依赖关系
![在这里插入图片描述](https://img-blog.csdnimg.cn/21e0826d37bc4be2a809bbc09a960ff2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 解释下下面的代码这个报文必须是DBC文件中定义好的,IG模块自己建立的不可以下面的子标签是输入条件,all 表示下面的两个信号都满足条件时,就退出 while,时间是5s,自动退出循环 下面的子条件是跟随量,any ,表示任何一个条件满足就是pass 的,如果再6s内,都没有满足,则fail
1
1
14
1
2️⃣ 测试过程中,我们手动把ECFail 和 EPBStatus 设置成 1(如果手动设置的满,把xml中时间加长),然后在把EPBErrorStatus设置成1,case 就是pass的,如果不设置,则case就是fail的,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/fe459090507f4f18a82c182bfe23097a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
🌎 检测值是否有效
🍊如果对下面演示的代码有疑问请先仔细读下Help 描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/30dd61b1b79c44589bede7983e27ad4f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
1️⃣ 下面的代码实现的就是在10内检测 信号EPBErrorStatus值要在1-3,否则就fail了这个报文必须是DBC文件中定义好的,IG模块自己建立的不可以
1
3
2️⃣ 先把把EPBErrorStatus设置成1,然后执行测试 ,case 就是pass的,如果不设置,则case就是fail的,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/012fbb03b5d24f599243cedc63d1e888.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JqC6JqB5bCP5YW1,size_20,color_FFFFFF,t_70,g_se,x_16)
![23](https://img-blog.csdnimg.cn/20201215164350761.gif)
🌎总结
![请添加图片描述](https://img-blog.csdnimg.cn/313f224ade4c4d16bbb8a58dbc1d8967.gif#pic_left)
✂️ CSDN源码下载
![7](https://img-blog.csdnimg.cn/20201215163633654.gif)
🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡! 🚩 有微信的小伙伴可以关注下浪哥车载诊断,一个行业内小小圈子,群里有网盘资料,源码,还有各路大神 闲时交流交流技术,聊聊工作机会啥的。 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
|