CANoe中的AutoSequence

2024-01-10 06:44:01

简单介绍:

AutoSequence是一种简单的,快速的类似脚本的一个可视化自动脚本插件。使用起来非常方便,甚至在很多时候能够代替一些简单的脚本。

1:Automation工程的创建

(1.1)打开Automation插件,双击这个插件按键

(1.2)出现以下界面:

可以看到,出现了三种类型的AutoSequnences:

(1)Visual Sequences? 可视化自动序列

?? (2) Macros? 宏编程序列

(3).NET Snippet .Net代码段

1.2.1 VisualSequence

首先看最简单和最容易上手的VisualSequence

框1内的从左到右依次是,

* NewSequence(新建Sequeence),

* ImportSequenceFromFile(从文件中导入新的Sequeence)

* RemoveSelectSequence(出去选中的Sequence)

* EditSelectSequences(编辑选中的Sequence)

框2上图没有截图截全,我又截图了全部

序号条目图标说明补充说明
1State(Sequence的状态)此选项其实可以分为两个部分,第一个部分可以理解为序列
执行的状态,running stopped paused。这里是指示序列的运行状态
incorrectFile。。。则是指示序列存在错误
2Active
实际上就是
使能框选

对号表示Active
没有对号表示UnActive

使用鼠标单击,可选择使能或者关闭这个Sequences。这是
序列运行时,Active勾选是序列能够执行的必要条件
3Name

Sequences的名称

双击该处,可以自定义名称(建议根据功能,取名,且最好
是全英文名称,最好执行驼峰命名法,即首字母大写)
4控制按键

一共三个按键:
start stop pause

这里的三个状态图标很好理解,需要理解的是。pause(暂停)
和stop的区别。pause是暂停,

start开始时,sequence
还会从暂停的地方继续执行。

stop就会停止,再次start时,

就会从序列头部开始,

重新开始执行

关于pause和Stop的区别
可以用单片机中的程序计数器来理解,pause按下,程序计数器会记住程序运行到的位置,而stop则会将程序计数器清零。
5AutoStart

是指,在主界面打开start时,

序列会自动开始执行

6Repetion

有两个选项,1:once只发送一次
2:periodic周期发送

目前 了解的这些,并不能让我们立即写sequence,并应用到实际的工程中,于是下一节,我们需要详细了解sequence编写过程中的语法规则

(2)sequence编写过程中的语法规则(重点)

2.1 进入Edit界面

选择右键单击,出现选择界面,单击Edit

2.2编辑界面介绍

出现如下界面:

我把菜单栏,分为三个部分,

2.2.1是控制sequence运行控件

**第1部分,是控制sequence运行,暂停,停止。和上一节说的差不多。需要注意的是,从左往右数,第二个带个小脉冲的图标。系统自带解释(stepwise execution of seauence only avaliable in debug Mode),即该图标只能在Debug模式下使用。

2.2.2sequence循环控制及特殊控件

**第2部分,依次是设置sequence是否自动循环,是否在Measurement开始时,自动开启运行,?? 也可理解为是否和工程开关绑定。

第三个图标,类似于放平的8字型。这个功能比较奇特:他是针对几个特定的命令的。下面会介绍,大家留意这个即可。

2.2.3编译及循环控制控件

**第3部分,从左往右,

第一个图标非常重要,它类似于编译器中的编译,我们写完脚本后,点击一下这个图标,他就会检查脚本写的有没有问题。如果有错误会给出相对应的提示。

第二个图标,是开启Debug模式,开启时注意会有一个蓝色边框。注意一般情况下,3部分第一个图标,就能满足大部分检查要求。因为sequence一般情况下不会太复杂,行数不会太多,也应该不会有很复杂的逻辑。但是如果很复杂的情况下,如果不能解决问题,就需要开启Debug模式,并结合stepwise(分步运行),且必要是还可以打断点(insertBreakPoint)。

第三个图标是配置界面:

1:execution(执行模式),有两种执行模式

1:Standard标准运行模式。该序列将在模拟环境中执行,这里有一个注意点,本人暂时也没有搞明白,如果在配置项选择Standard标准格式,在主界面把总线类型设置为RealBus也是可以执行的

2:OnBoard :车载,机载模式,是指该序列将在Vector硬件(VN1630/VN7600)上执行。也就是我们工程师经常使用CANoe或其他设备,放在汽车上,执行脱离计算机使用VN1630/VN7600单独接在汽车上运行的情况。在这种模式下,定义的等待和循环时间非常精确。

但是注意也有缺点:

**1)因为脱离了计算机,很多Command(命令)都只能部分支持或不支持。

**2)不能支持signalLayer(不能使用信号交互层),通俗的理解就是不能再使用,关于对信号执行直接操作的命令,如设置信号值,在直接发送信号值等操作。

**3)commandConfiguration配置

其实这个配置比较多余,他对应的是一个wait for key命令行,如下图

点击红星处的...,就可以直接设置按键。这个命令行是一个相当于一个中断,当Command 执行到此处时,就进入“暂停”状态。直到指定的按键被按下。才继续执行。

注意点,如果一个sequence中存在多个wait for key那么,最后一次配置的按键会覆盖,前一个

如上图中的两命令,第一个配置为按键“1”,第二个配置成“2”,实际运行sequence时,需要按两次“2”,而不是按一次“1”,再按一次“2”。需注意!!!

2.2.4sequence文件的导入和导出

分别对应3部分的第4和第5个按键,单击此处按键。看看输出和输入文件的格式如何

支持VisualSequences(.vsq)

Generator block send list(gen)

两种格式支持直接导入。

注意:导出时只支持vsq格式。

2.2.5显示和关闭comment

也就是这个按键,管理者comment是否显示。很简单

3具体语法的介绍和格式说明

3.1 格式说明

先看下图:一共分为6个部分

语法和格式的核心是comment,每条语句都被划分为6个部分,不是每个语句都需要设置这6个部分。分别为Command(命令),Object(对象),Operate(操作符),Operand(操作数),wait【单位:ms】 Comment(注释)

3.2语法说明

我将所有的命令分为8类;

3.2.1Send类

其中Send类,共有4种Command

**1)SendCANErrorFrame:输出CAN错误帧

先选择发送错误帧格式。然后选择通道。如果需要等待,则设置等待时间

**2)sendCANMessage发送

此选项需要DBC文件支持,发送DBC文件中定义的报文。而DBC文件中定义的报文早已经设定好其所在通道,和周期,长度等,不需要在语句中额外设定。

**3)SendRawFrame 发送原始值帧

这句话的意思是发送任意帧,这个帧的格式都需要在这个语句中定义

从图中可以看出,这个报文从ID到帧类型,发送通道,到数据都是可以我们自己定义的。

注意3位置处:只能选择=。如果不选择,那么默认数据段全部为0。

4位置处:如果选择CANfd则最大支持64Byte,如果选择传统CAN最大只能发送8Byte。

另外注意,发送的RawFrame的帧长度会自动根据所发送字长自动调节。

**4)SendGMLANFrame

发送GMLAN帧,这个暂时不需要做过多了解,因为从下图中可以看出,此发送命令,需要在DBC文件中定义GMLAN帧,不然会报错。

3.2.2 wait类型指令

**1)wait等待指令,后面带一个时间参数,wait+时间参数(ms为单位),该语句实现等待

需要注意的是,这个参数必须是>0的整数。且最大数值为2,147,483,647。

注意wait命令1后,2处也设置参数,也会起作用,上图语句等待时间为2000ms。

**2)wait For

此命令后的object(对象)限定为系统变量,该系统变量+操作符operator+操作数(operand)构成了一个真值表达式,如果此表达式为1(真True),则语句通过,不然则会一直等待。

WaitFor命令,支持的大多是关系运算符,一共是6个常规(此处常规指的是一般编程语言都支持的关系运算符)关系运算符,另外两个为sequence特有的运算符 in range outside range运算符。

in range 后的operand格式如 :1;2这种格式。且数字格式要与Object函数保持一致。

**3)wait for CanFrame

先看结构

wait for'CanFreme+DBC中已经定义的帧。完整语句的作用是只要该帧出现,就满足条件,下一步,立即执行下一步操作。

**4)wait for Can raw Frame 结构和wait for'CanFreme语句结构一样,只不过Object是可以用户自己定义的。

**5)wait for Can GMLAM Frame 需要在DBC文件里,定义GMLAN文件,暂时不怎么了解。

3.2.3 条件判断类

if else 以及elseif 和endif,一共4个为条件判断类。

**1)if 对象为signal和sysvar

operator基本为关系运算符,+in range +outside range

基本格式如下,需要注意的是在sequence中,每一个if必须有一个Endif,与之匹配,elseif则不需要

else 也总是最近的if配对。

3.2.4 循环控制类指令

repeat和repeatEnd,break

**1)repeat,如图所示repeat和repeatEnd共同构成了一个循环体object为循环次数,用户可自定义。

这里循环有一个问题,就是只能固定循环次数,需要额外的操作。

**2)break一般是配合if判断语句,一起使用在循环体内部,用来跳出循环。如下图所示

3.2.5 BlockReplay函数

回放模块

3.2.6map信号映射

将系统变量或环境变量或signal映射到其他系统变量、环境变量。需要注意的是,operand只能是系统变量或环境变量。

映射之后,注意需要取消映射。

3.2.7Exit离开

此命令是终止sequences运转。无视自动循环是否开启

无任何参数

3.2.8set类命令

set、setCanCyclicFrame、setCanCyclicFrame

**1)首先看set命令

Object可以是Signal和Variable。

Operator有如下符号

** = 赋值表达式

**inc 自增,相当于++

**dec 自减 相当于 --

**2)首先看set CAN CyclicFrame,对象只能是DBC文件中定义的帧

Operator 有下图几种,CycleTime(ms)设置循环时间、和stop停止按键

当Operator是cycle time时 ,Operator是设置循环发送的时间。需要停止时则使用stop函数。

文章来源:https://blog.csdn.net/WE_BIG/article/details/135454862
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。