[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习

Function Block 的学习记录

1.实际情景

  • 汽车的BCM模块会发送两个信号,其中一个用于通知系统某项属性被修改了 - Signal A,另一个用于通知UI展示相关提示 - Signal B
  • Signal A一般先于Signal B到达,但偶尔会出现特殊情况,为了保证信号能正常识别,现修改实现,期望能在收到Signal A的前10ms到后100ms的范围内收到Signal B且值为true
  • 为了验证以上实现是否成功,需要编写Function Block验证
  • 具体的验证工作交给测试team完成,

2.需求

  1. 为了保证脚本运行正常,预先将Singal A置为0,再将其置为50,即出现变化
  2. 等待一段时间
  3. 设置Signal B的值为true,测试人员检查UI是否出现相应变化
  4. 一段时间后设置B的值为false,还原环境

为了测试应用能否相应不同时间内送达的Signal B,将实现4个Function Block,分别对应:

  1. B先于A 10ms以上到达
  2. B先于A 10ms以内到达
  3. B晚于A 100ms以内到达
  4. B晚于A100ms以上到达

3.实现

3.1 先看看需要什么

Vehicle spy3提供了众多简单的Description操作标签,我们可以简单选择标签,设置value,交给软件生成script,就能执行了。根据我们的需要,我们首先会在A的值不为0的情况下将A置为0,然后再将A置为任意非0的值(50)来产生变化,然后等待,一段时间后再将B设置为true,检查UI是否响应。

因此我们共需要以下的标签:

  1. Set Value If: 这是一个拥有两段值的操作,一个是if判断条件,另一个是then set操作,在if判断条件为true时,会执行set操作,这个set操作相当于一个独立的Set Value操作。
  2. Transmit: 发送信号,
  3. Set Value: 设置信号的值
  4. Wait For: 让系统等待一段时间
  5. End If: 与Set Value If搭配使用

在此涉及不到,等下次遇到了再学习~~~

3.2 合并部分需求

将所有情况分为两类,最后出两个Function Block,一个包含所有应该通过的测试,另一个则包含所有不通过的测试。

3.3 应该通过的测试

[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第1张图片
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第2张图片
设置一个信号的值,使其发生变化,将其发送出去,之后Wait For一段时间,在App提供的时间容忍范围之内,将另一个信号的true值发送出去,等待一段时间再将其置回false。

3.5 不通过的测试

[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第3张图片
与之前相反,让B信号的true值发送出现在设置value前后的有效时间外,根据App提供的实现,这种情况下UI应该不会有任何表现。

4.总结

4.1 关于Set Value If

对这个操作的设置有两个部分,具体如下图:
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第4张图片
If中是一个判断语句,当条件满足时会执行THEN中的赋值语句,注意在IF中,不等于的符号是<>,而不是编程中常用的!=,点击右侧的fx小按钮可以进行编辑,软件提供了一些判断符可以选,建议直接选,避免出错。

另外,这个操作包含一个If,根据Function Block的规则,需要有End If,当然也可以有Else 或 Else if这样的,在后面添加这些操作有一件事需要注意:不能紧跟着上一条操作进行设置
也就是这样的操作是错误的:
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第5张图片
软件会有错误提示,所以正确的做法是无论有没有多余的操作,都要在中间有至少一行:
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第6张图片
If后面可以紧跟着任何语句,但是不能与End If直接相连:
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第7张图片

4.2 一个小技巧

本次示例中,我们会频繁改变一个信号的实际值,让其在true和false之间来回切换,如果我们每次都去Set该信号的Value,会比较浪费时间,因此,我们可以采取如下方法:

在Message Editor中创建两个该信号的备份,右键点击,将其Copy to transmit,之后就可以在Tx Panel里找到它们
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第8张图片
在Tx Panel中更改我们用到的属性,置为True或False,其他我们不关心的信号就让它是默认值。再更改信号的名字,就可以在Function Block中直接发送对应信号,而不用再重复设置值了

4.3 检查信号是否来自Tx

Vehicle Spy中信号的Rx(接受)和Tx(发送)是以软件为参考的,即信号是Rx则说明该信号是Vehicle Spy软件接受的,反之则是软件发送的。因此,我们要设置信号的值发送到测试机器,需要保证信号是来自Tx的数据库:
[Vehicle spy3]从一个实际任务零基础直接上手——Function Block学习_第9张图片
选择信号时,确认标签是Tx Message,选择好的信号生成的block中会对信号来源做标注,发送的信号会标记为out
在这里插入图片描述

你可能感兴趣的:(VD,linux)